我正在使用动态并行机制,我想创建一个模板内核,给出一个对象指针+成员函数指针执行函数。这是一个最小(未)工作实例中,具有-arch = compute_35 -dlink标志编译,函数成员作为CUDA内核的参数
#include <iostream>
struct A
{
int i;
__device__ void clear()
{
i = 0;
}
};
template<typename Object, typename memberFunction>
__global__ void generalKernel(Object* o, memberFunction f)
{
(o->*f)();
}
template<typename Object, typename memberFunction>
__device__ void executeFunction(Object* o, memberFunction f)
{
generalKernel<<<1,1>>>(o,f);
cudaDeviceSynchronize();
}
__global__ void mainKernel(A* a)
{
executeFunction(a, &A::clear);
}
int main(int argc, char * argv[])
{
A* a;
cudaMallocManaged(&a, sizeof(A));
a->i = 1;
mainKernel<<<1,1>>>(a);
cudaDeviceSynchronize();
std::cout << a->i << std::endl;
return EXIT_SUCCESS;
}
请提供一个简短的完整示例,其他人可以尝试编译并查看该问题。还要确定你的编译命令和编译器的确切输出 –
用一个完整的例子更新:)。该错误是相当长的提供 –