从全局内核调用主机函数
calling a host function from a global kernel
我正试图从内核调用一个函数,但我一直收到错误。我的函数是一个模板参数。错误如下:
calling a __host__ function("mul<int> ") from a __global__ function("multiply<int, &mul<int> > ") is not allowed.
这是我的代码:
template<typename T> T mul(T a, T b)
{
return a * b;
}
template <typename T, T (*myop)(T, T)>
static __global__ void multiply(int *in, int *out)
{...
a = myop(b, c);
...
}
int main()
{
multiply<T, mul<T> ><<<Blocks, 1024>>>(...);
}
有人知道发生了什么事吗?
打算在设备代码中使用的函数必须具有__device__
限定符:
$ cat t1018.cu
#include <stdio.h>
template<typename T>
__host__ __device__ T mul(T a, T b)
{
return a * b;
}
template <typename T, T (*myop)(T, T) >
static __global__ void multiply()
{
T b=2;
T c=5;
T a = myop(b, c);
printf("a = %dn", a);
}
int main()
{
multiply<int, mul<int> ><<<1, 1>>>();
cudaDeviceSynchronize();
}
$ nvcc -o t1018 t1018.cu
$ ./t1018
a = 10
$
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- GPU设备函数如何访问主机功能中定义的对象
- 在类成员函数更改设备变量的值后__device__从设备复制到主机时出现 cudaMemcpy 错误
- 为什么不能重载CUDA C++类的主机/设备成员函数
- 在 CUDA 设备代码和主机代码中创建模板类对象时未解析的外部函数
- CUDA中设备函数指针的分配(来自主机函数指针)
- 如何从 cuda 中的设备函数调用现有主机函数
- 从全局内核调用主机函数
- 主机上运行的自定义函数的Thrust结果不正确
- CUDA在使用函数指针时启动主机函数作为内核
- gethostbyaddr()函数是否使用internet将IPAddress转换为主机名
- 是否有任何内置的CUDA函数允许CUDA内核向主机代码报告错误?