У меня есть несколько текстур, которые я хочу прочитать во время некоторых запусков ядра.Документация говорит, что они должны быть определены глобально.Проблема в том, что я хочу вызывать одни и те же функции ядра (которые являются довольно сложными) с разными источниками текстур.
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 ().
Есть лилюбое другое решение?Спасибо.