Я пытаюсь использовать текстурную память / связывание вместо глобальной памяти, но не могу пройти мимо связывания текстуры.Первое, что я узнал, это то, что 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);