我正在使用動態並行機制,我想創建一個模板內核,給出一個對象指針+成員函數指針執行函數。這是一個最小(未)工作實例中,具有-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;
}
請提供一個簡短的完整示例,其他人可以嘗試編譯並查看該問題。還要確定你的編譯命令和編譯器的確切輸出 –
用一個完整的例子更新:)。該錯誤是相當長的提供 –