我正在重新实现一些使用pthreads的多线程C++图像处理库。我希望能够在每个线程中调用CUDA内核,并且信任设备本身来处理内核调度,但是我知道比指望这种行为更好。有没有人有这种类型的问题的经验?从多线程C++应用程序调用GPU内核?
2
A
回答
2
CUDA 4.0使得从多个线程驱动单个CUDA上下文简单得多 - 只需调用cudaSetDevice()来指定希望线程提交命令的CUDA设备。
请注意,这可能比从单个线程驱动CUDA上下文效率更低 - 除非CPU线程有其他工作来保证它们在内核启动之间被占用,否则它们可能会被CUDA使用的互斥量序列化在内部保持其数据结构的一致性。
2
也许Cuda流是解决您的问题。尝试从每个线程中的不同流中调用内核。但是,我不明白这将如何帮助,因为我认为即使它们是并行调用的,你的内核执行也会被序列化。事实上,即使在同一个流上的Cuda内核调用本质上也是异步的,所以您可以从同一个线程进行任意数量的调用。我真的不明白你想达到什么目的。
+1
在单个流上,就主机而言,调用是异步的,但与GPU同步(一切按顺序执行,一个操作必须在下一个开始之前完成)。这适用于内存操作以及内核启动。在单个流中,您不能将计算中的内存操作重叠/交错。多个流可以重叠,这是潜在优势的来源。有关更多信息,请参阅此处(有关Streams和Async API的部分):http://mc.stanford.edu/cgi-bin/images/0/0a/M02_4.pdf –
相关问题
- 1. 从多线程c应用程序调用cuda内核
- 2. 是否可以多线程调用GPU?
- 3. Linux内核线程 - 调度程序
- 4. 应用程序内核调试
- 5. 应用程序内的多个线程
- 6. 调试多线程应用程序
- 7. 从多线程CPU程序移到C++中的GPU
- 8. 多线程应用程序 - C++/Debian的
- 9. C多线程应用程序结构
- 10. 的HelloWorld多线程C#应用程序
- 11. 多线程c#应用程序
- 12. c#多线程应用程序
- 13. C++中的多线程应用程序
- 14. 从多线程程序调用系统()
- 15. 我的程序使用多少个gpu内核?
- 16. JNI从多线程调用Java从C++
- 17. 使用大型线程池调试多线程C++应用程序
- 18. 从多线程应用程序
- 19. C#应用程序线程
- 20. 多线程应用程序
- 21. 从C调用C++线程
- 22. 多核处理器中的多线程应用程序
- 23. 从C#应用程序调用C++ DLL
- 24. 多线程应用程序和潜在内存泄漏(C#)
- 25. Linux上多线程C++应用程序中的内存泄漏
- 26. 首选多个Solr应用程序或单应用程序多内核设置?
- 27. 从C API多线程调用python
- 28. c#在线调度应用程序
- 29. OpenCL应用程序中的多个程序(与内核)
- 30. 用户线程v.s.内核线程
只有一个链接到GPU,所以我相信在同一时间发送多个东西可能更多的问题与操作系统可能比与CPU。唯一简单的方法就是使用不同的流程。 – Dani