Как привязать массив двойников к texture2D? - PullRequest
0 голосов
/ 12 октября 2018

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

Я объявил глобальную переменную текстуры:

texture<int2, 2> texData;

, затем сразу после выделения памяти устройства (cudaMalloc) с размером (в байтах) width*height * sizeof(double) Я пытаюсь связать его:

cudaChannelFormatDesc desc = cudaCreateChannelDesc<int2>();
cudaStatus = cudaBindTexture2D(nullptr, &texData, dev_data, &desc,  width, height, 0);
if (cudaStatus != cudaSuccess) {
    fprintf(stderr, "Binding texture failed: %s\n", cudaGetErrorString(cudaStatus));
    goto Error;
}

И эта привязка завершается с ошибкой «неверный аргумент».Ширина и высота 2048, что намного ниже пределов текстуры 2d: 65536 x 65536 x 1048544.

Так что же я тут не так сделал?

Sidenote: подпись cudaBindTexture2D:

extern __host__ cudaError_t CUDARTAPI cudaBindTexture2D(size_t *offset, 
    const struct textureReference *texref, const void *devPtr, 
    const struct cudaChannelFormatDesc *desc, size_t width, size_t height, size_t pitch);

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны сделать правильное распределение тонов

size_t pitch;
cudaMallocPitch((void**)&dev_data, &pitch, width* sizeof(double),height);

cudaChannelFormatDesc desc = cudaCreateChannelDesc<int2>();

cudaStatus = cudaBindTexture2D(nullptr, texData, dev_data, desc,  width, height, pitch);

Обратите внимание, что, хотя ошибки CUDA, как правило, не очень информативны, ошибка, которую вы получили "недопустимый аргумент", довольно информативна.Аргументы, которые вы указали в своих функциях, недопустимы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...