从多线程c++应用程序调用GPU内核

Calls to GPU kernel from a multithreaded C++ application?

本文关键字:GPU 内核 调用 应用程序 多线程 c++      更新时间:2023-10-16

我正在使用pthreads重新实现一个多线程c++图像处理库的某些部分。我希望能够在每个线程中调用CUDA内核,并信任设备本身来处理内核调度,但我知道最好不要指望这种行为。有人遇到过这类问题吗?

CUDA 4.0使得从多个线程驱动单个CUDA上下文变得更加简单-只需调用cudaSetDevice()来指定您希望线程提交命令的CUDA设备。

请注意,这可能比从单个线程驱动CUDA上下文效率低-除非CPU线程在内核启动之间有其他工作要占用它们,否则它们可能会被CUDA内部使用的互斥体序列化,以保持其数据结构的一致性。

也许Cuda流可以解决你的问题。尝试从每个线程中的不同流调用内核。然而,我看不出这有什么帮助,因为我认为内核执行将被序列化,即使它们是并行调用的。实际上,即使在同一流上,Cuda内核调用本质上也是异步的,因此您可以从同一线程中进行任意数量的调用。我真不明白你到底想达到什么目的。