gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:36:04 25 4
gpt4 key购买 nike

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

void CUDART_CB MyCallback(void *data){}

并且正在谈论需要设置的 cudaStreamCallbackBlocking 之类的标志;
而 Cuda_Toolhit_Reference_Manual 和 cuda_runtime_api.h 需要回调的其他实现:
void CUDART_CB MyCallback (cudaStream_t stream, cudaError_t status, void *userData){}

并提到该标志供将来使用并且需要 0 作为参数。
此外,调用函数如下:
cudaStreamAddCallback(GpuStream, MyCallback, &BufSwitchParams, 0);

并使用 VS 2010 尝试为 64 位编译我收到消息:“void(__stdcall CMyClass::*)(cudaStream_t stream, cudaError_t status, void *userData)”类型的参数与“cudaStreamCallback_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);

关于visual-c++ - 如何将 cudaStreamAddCallback() 与类成员方法一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com