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

时间:2011-11-16 19:06:09

标签: c++ multithreading cuda pthreads

我正在重新实现使用pthreads的多线程C ++的图像处理库的某些部分。我希望能够在每个线程中调用CUDA内核并信任设备本身来处理内核调度,但我知道最好还是依靠这种行为。有没有人有这类问题的经验?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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