Связать текстуру с закрепленной отображаемой памятью в CUDA - PullRequest
0 голосов
/ 15 апреля 2010

Я пытался привязать память хоста, которая была отображена для нулевого копирования в текстуру, но похоже, что это невозможно.

Вот пример кода:

float* a;
float* d_a;
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc( (void **)&a, bytes, cudaHostAllocMapped);
cudaHostGetDevicePointer((void **)&d_a,  (void *)a, 0);

texture<float, 2, cudaReadModeElementType> tex;
cudaBindTexture2D( 0, &tex, d_a, &channelDesc, width, height, pitch);

Рекомендуется ли использовать закрепленную память и просто скопировать ее в память устройства, связанную с текстурой?

1 Ответ

1 голос
/ 01 мая 2011

Это возможно, но вы должны убедиться, что высота звука выровнена правильно - по крайней мере, гранулярность 64B. Я не вижу требования выравнивания в cudaDeviceProp, которое вы можете использовать. cudaDeviceProp :: textureAlignment даст вам достойное руководство - это требование выравнивания для базового адреса текстуры, а не для высоты тона; но я считаю, что требование выравнивания является более строгим, чем требование выравнивания шага.

К сожалению, cudaHostAllocPitch () не может позаботиться об этом за вас.

Справедливое предупреждение: я провел немало направленного тестирования производительности 1D текстуры из памяти хоста, и это s-l-o-w. Аппаратные средства класса Tesla работают на скорости 2 Гбит / с, а аппаратные средства класса Fermi - на скорости 0,5 Гбит / с. У меня нет оснований полагать, что 2D-текстурирование будет быстрее.

...