【发布时间】:2011-08-01 07:29:06
【问题描述】:
我正在尝试创建以下类型的模板函数:
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*s 和float[]s,有和没有const 修饰符。甚至可以创建这种模板吗?
提前致谢。
注意。内核作为模板参数而不是普通函数参数传递,因为这允许我通过展开循环在 CUDA 中创建更高效的代码。
更新 指向浮点的指针在标准 C++ 中用作模板参数,但显然没有办法让它们与 CUDA 设备函数一起使用,因为它们需要指向设备地址的指针,而无法在外部定义这些指针.如果有人让它工作,请告诉我。
【问题讨论】:
标签: c++ arrays templates parameters cuda