CUDA: как создать объект 2D-текстуры?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 CUDA: как создать объект 2D-текстуры?

Сообщение Anonymous »


Я пытаюсь создать объект 2D-текстуры, 4x4 uint8_t. Вот код:

__global__ void kernel(cudaTextureObject_t tex) { int x = threadIdx.x; int y = threadIdx.y; uint8_t val = tex2D(tex, x, y); printf("%d, ", val); возвращаться; } int main(int argc, char **argv) { cudaTextureObject_t текс; uint8_t dataIn[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; uint8_t* dataDev = 0; cudaMalloc((void**)&dataDev, 16); структура cudaResourceDesc resDesc; memset(&resDesc, 0, sizeof(resDesc)); resDesc.resType = cudaResourceTypePitch2D; resDesc.res.pitch2D.devPtr = dataDev; resDesc.res.pitch2D.desc.x = 8; resDesc.res.pitch2D.desc.y = 8; resDesc.res.pitch2D.desc.f = cudaChannelFormatKindUnsigned; resDesc.res.pitch2D.width = 4; resDesc.res.pitch2D.height = 4; resDesc.res.pitch2D.pitchInBytes = 4; структура cudaTextureDesc texDesc; memset(&texDesc, 0, sizeof(texDesc)); cudaCreateTextureObject(&tex, &resDesc, &texDesc, NULL); cudaMemcpy(dataDev, &dataIn[0], 16, cudaMemcpyHostToDevice); потоки dim3(4, 4); ядро(текс); cudaDeviceSynchronize(); вернуть 0; } Я ожидаю, что результат будет примерно таким:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, т.е. все значения объекта текстуры (порядок не имеет значения).

Но фактический результат:

0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4, 6, Что я делаю не так?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»