我正在重新實現一些使用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