Я пытаюсь создать шаблонную функцию следующего вида:
template <bool isHorizontal, float* kernel>
__global__ void smoothFilterColumns(const TwImageCUDA_Device* source, TwImageCUDA_Device*
destination)
{
// code...
}
(Не беспокойтесь о __global__
; это реализовано в CUDA.)
К сожалению, это не позволит мне создавать экземпляры этой функции следующим образом:
float ptrKernel[] = {1, 2, 1};
smoothFilterColumns<true, ptrKernel>(dxBuffer->cuda_image, dxOutput->cuda_image);
Я пробовал все виды float*
с и float[]
с, с модификатором const
и без него. Можно ли вообще создать шаблон такого рода?
Заранее спасибо.
NB. Ядро передается как параметр шаблона, а не как параметр обычной функции, потому что это позволяет мне создавать более эффективный код в CUDA путем развертывания циклов.
Обновление Указатели на поплавки работают как параметры шаблона со стандартным C ++, но, очевидно, нет способа заставить их работать с функциями устройства CUDA, так как они ожидают указателей на адреса устройств, и их нельзя определить внешне. Если кто-то заставил это работать, пожалуйста, дайте мне знать.