Visual c++ 如何将cudaStreamAddCallback()与类成员方法一起使用?

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

我试图使用cudaStreamAddCallback()同步我的cuda例程,但我无法实现它,因为文档并不明确。 cuda-C-programming-guide指出回调必须定义为:

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感兴趣。我在谷歌搜索时没有找到这个例子。我明天要调查一下。