【发布时间】:2018-04-24 03:59:51
【问题描述】:
我正在使用动态并行性,我想创建一个模板内核,给定一个对象指针 + 成员函数指针来执行该函数。这是一个最小(非)工作示例,使用 -arch=compute_35 -dlink 标志编译,
#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;
}
【问题讨论】:
-
请提供一个简短、完整的示例,其他人可以尝试编译并查看问题。还可以识别您的编译命令和编译器的确切输出
-
更新了一个完整的例子:)。提供的错误很长