c++ - 设备函数指针作为模板参数
问题描述
由于某些原因(超出了这个问题的范围),我有一个模板结构:
template<typename T, __device__ retV (*funcptr)(T)>
struct func
{
__device__ inline retV invoke(T i) { funcptr(i); }
};
可以这样使用:
__device__ double increment(double x) {
return x + 1.0;
}
__constant__ func<double, double, &increment> myfunc;
__device__ double apply(double x)
{
return myfunc.invoke(x);
}
这适用于 nvcc(cuda 10.0),但会因 nvrtc(JIT 编译)而失败,并出现以下错误:
错误:属性可能不会出现在这里
我应该如何修改此代码以使其与 nvrtc 一起使用?或者我应该在命令行中添加标志?
解决方案
好吧,答案很简单:
__device__
属性放错了位置(如编译器所示)。该func
结构应如下所示:
template<typename T, retV (* __device__ funcptr)(T)>
struct func
{
__device__ inline retV invoke(T i) { funcptr(i); }
};
但是我不知道为什么nvcc和nvrtc对此有不同的期望。
推荐阅读
- c# - 创建上划线文本
- ruby-on-rails - 通过 ActionCable 发送 zip 二进制数据
- java - Java:While Loop 抑制 JFrame 的绘制功能
- java - Osmdroid -NullPointerException: Attempt to invoke virtual method 'boolean org.osmdroid.views.overlay.Overlay.onTouchEvent
- c# - number formatting in asp.net markup code?
- javascript - 当我使用 for 循环时,为什么我的代码没有在 forEach 中等待?
- windows - 似乎无法卸载 JetBrains Toolbox
- apache-spark - Hadoop v/s Spark 说明
- r - plot.zoo (multiple) 和 par(new=T) 之后的面板搞砸了
- java - (ANDROID)哪个是最好的方法?(性能)使用 WS 创建产品目录应用程序,