Есть ли обходной путь для негибкого использования текстурных ссылок в CUDA? - PullRequest
4 голосов
/ 15 марта 2012

У меня есть несколько текстур, которые я хочу прочитать во время некоторых запусков ядра.Документация говорит, что они должны быть определены глобально.Проблема в том, что я хочу вызывать одни и те же функции ядра (которые являются довольно сложными) с разными источниками текстур.

texture<unsigned char, 2, cudaReadModeElementType> g_tex_a;
texture<unsigned char, 2, cudaReadModeElementType> g_tex_b;

__global__ void gpu_kernel_1()
{
    // long complicated kernel
    foo = tex2D(g_tex_a, x,y);
}

__global__ void gpu_kernel_2()
{
    // long complicated kernel
    bar = tex2D(g_tex_a, x,y);
}

main()
{
    gpu_kernel_1<<<grid, block>>>();
    gpu_kernel_2<<<grid, block>>>();
}

Разве невозможно иметь способ передачи ядру, какой текстурой он должен быть?чтение с помощью tex2D, например, g_tex_a или g_tex_b?Кажется, что компилятор должен знать ссылку на текстуру во время компиляции.Я хочу иметь возможность повторно использовать код gpu_kernel_1 и gpu_kernel_2 для работы с различными текстурами.

Я не совсем понимаю, как эталонный объект текстуры используется кодом хоста и устройства.На данный момент у меня есть ужасное решение реплицировать весь код для каждого ядра, единственное изменение состоит в том, что функция tex2D использует другую ссылку на текстуру, например, gpu_kernel_1_with_tex_a (), gpu_kernel_1_with_tex_b ().

Есть лилюбое другое решение?Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2013

В дополнение к API ссылок на текстуры, CUDA 5.0, теперь поддерживается API объекта текстуры.Вместо того, чтобы глобально определять ссылку на текстуру, с этим новым API вы теперь можете локально определить объект текстуры и передать его ядру в качестве аргумента функции.Ознакомьтесь с руководством по программированию CUDA (раздел 3.2.10.1.1).

1 голос
/ 15 марта 2012

Прежде чем использовать текстурную ссылку, она должна быть отображена в память, например, с помощью cudaBindTextureToArray (). Именно в отображении вы решаете, с какими данными работать.

...