gpt4 book ai didi

c++ - 将数组/指针作为模板参数传递

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:40 26 4
gpt4 key购买 nike

我正在尝试创建以下类型的模板函数:

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 修饰符。甚至可以创建此类模板吗?

提前致谢。

注意。内核作为模板参数而不是普通函数参数传递,因为这允许我通过展开循环在 CUDA 中创建更高效​​的代码。

更新 指向 float 的指针作为标准 C++ 的模板参数工作,但显然没有办法让它们与 CUDA 设备函数一起工作,因为它们需要指向设备地址的指针并且不能在外部定义这些指针.如果有人成功了,请告诉我。

最佳答案

我怀疑您能否让它发挥作用。正如其他人指出的那样,C++ 标准规定作为模板参数传递的任何对象或函数都必须具有外部链接(因此未在当前翻译单元的范围内定义)。问题是 CUDA 目前根本不支持外部链接——设备代码中使用的每个符号都必须有内部链接(即在同一个翻译单元中定义)。此限制的根本原因是 CUDA 目前没有设备代码的链接器。

关于c++ - 将数组/指针作为模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5592027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com