Visual c++ 如何将cudaStreamAddCallback()与类成员方法一起使用?
我试图使用cudaStreamAddCallback()同步我的cuda例程,但我无法实现它,因为文档并不明确。 cuda-C-programming-guide指出回调必须定义为:Visual c++ 如何将cudaStreamAddCallback()与类成员方法一起使用?,visual-c++,cuda,Visual C++,Cuda,我试图使用cudaStreamAddCallback()同步我的cuda例程,但我无法实现它,因为文档并不明确。 cuda-C-programming-guide指出回调必须定义为: void CUDART_CB MyCallback(void *data){} 并且正在讨论需要设置的CUDAStreamCallBackblock等标志; Cuda_工具HIT_参考_手册和Cuda_运行时_api.h需要回调的其他实现: void CUDART_CB MyCallback (cudaStrea
void CUDART_CB MyCallback(void *data){}
并且正在讨论需要设置的CUDAStreamCallBackblock等标志;
Cuda_工具HIT_参考_手册和Cuda_运行时_api.h需要回调的其他实现:
void CUDART_CB MyCallback (cudaStream_t stream, cudaError_t status, void *userData){}
并提到该标志是供将来使用的,需要0作为参数。
此外,调用函数的步骤如下:
cudaStreamAddCallback(GpuStream, MyCallback, &BufSwitchParams, 0);
使用VS 2010尝试编译64位,我得到一条消息:“void(\u stdcall CMyClass::*)(cudaStream\u t stream,cudaError\u t status,void*userData)类型的参数与“cudaStreamCallback\u t”类型的参数不兼容
是否有人已经实现了此函数,并且能够在这里发布代码片段时帮助我摆脱困境?您将类方法传递给
cudaStreamAddCallback
,但它应该是非成员函数(全局或静态)。如果要使用类方法,应实现将调用该方法的包装器函数:
class MyClass
{
public:
static void CUDART_CB Callback(cudaStream_t stream, cudaError_t status, void *userData);
private:
void callbackFunc();
};
void CUDART_CB MyClass::Callback(cudaStream_t stream, cudaError_t status, void *userData)
{
MyClass* thiz = (MyClass*) userData;
thiz->callbackFunc();
}
void MyClass::callbackFunc()
{
// implementation here
}
MyClass* obj = new MyClass;
cudaStreamAddCallback(GpuStream, MyClass::Callback, obj, 0);
你可能会对相关的罗伯特·tnx感兴趣。我在谷歌搜索时没有找到这个例子。我明天要调查一下。