所有。我只有一個GPU設備的Nvidia GTX 750我做了一個試驗,結果從CPU的數據複製到GPU在一個單獨的線程使用clEnqueueWriteBuffer。然後我通過使用多個線程來完成它。結果是多線程似乎變慢了。 當使用多個線程,每一個線程具有由相同的設備創建自己的內核/命令隊列/上下文。所以我的問題是,clEnqueueWriteBuffer調用對某個設備有一些鎖定?我怎樣才能減少這些影響?如何使用OpenCL從CPU到GPU執行並行傳輸內存?
1
A
回答
2
編輯:如果硬件工作負載太輕,多個併發命令隊列可以實現更好的總帶寬。
,比如OpenGL,OpenCL的需要批量處理多個緩衝區成單一個獲得更快,即使使用單一的OpenCL內核參數與多個參數比較快。因爲每個操作都有操作系統/ API的開銷。移動更大但更少的塊更好。
你可以買兩塊顯卡是相當於GTX 750組合時,使用多個PCI-E帶寬(如果你的主板可以給分開2個16X車道)
PCIe通道都讓您雙向可以嘗試並行化寫入和讀取或並行化的可視化和計算或並行化計算和寫入或並行化計算並讀取或並行化計算+寫+讀(ofcourse如果它們不依賴彼此像圖1中-a)如果你的算法中有這樣的情況,如果你的顯卡可以做到的話。
一旦我試圖分而治之大陣列上計算併發送各部分的GPU,它花了秒。現在我只用一次通話就可以計算一次通話。只需要幾毫秒。
圖1-A:
write iteration --- compute iteration ---- read iteration --- parallels
1 - - 1
2 1 - 2
3 2 1 3
4 3 2 3
5 4 3 3
6 5 4 3
如果迭代之間不存在依賴關係。如果有相關性,則:
圖1-B:
write iteration --- compute iteration ---- read iteration --- parallels
half of 1 - - 1
other half of 1 half of 1 - 2
half of 2 other half of 1 half of 1 3
other half of 2 half of 2 other half of 1 3
half of 3 other half of 2 half of 2 3
other half of 3 half of 3 other half of 2 3
如果您需要非恆定大小批量圖像之間的並行化:
cpu to gpu -------- gpu to gpu ----- compute ----- gpu to cpu
1,2,3,4,5 - - -
- 1,2,3 - -
- 4,5 1,2,3 -
- - 4,5 1,2,3
6,7,8,9 - - 4,5
10,11,12 6,7,8 - -
13,14 9,10,11 6,7 -
15,16,17,18 12,13,14 8,9,10 6
相關問題
- 1. OpenCL AMD S10000雙GPU執行
- 2. OpenCL:運行CPU/GPU多個設備
- 3. 並行拷貝和opencl內核執行
- 4. 使用Opencl在CPU和GPU上運行opencv例程
- 5. 內存傳輸和內核執行可以在OpenCL上同時運行
- 6. OpenCL中的GPU使用內存
- 7. 如何知道使用GPU或CPU執行代碼?
- 8. OpenCL動態並行/ GPU衍生線程?
- 9. GPU中的並行性 - CUDA/OpenCL
- 10. 在多個GPU上運行OpenCL內核?
- 11. 如何使用OpenCL處理GPU內存過大的圖像
- 12. 如何獲得在執行中並行使用的CPU數dbms_mview.refresh
- 13. Python:並行化GPU和CPU工作
- 14. CPU和GPU的操作並行
- 15. 我如何知道我的OpenCL內核在GPU上運行?
- 16. 我如何知道我的OpenCL內核在GPU上運行?
- 17. 是否可以跨越OpenCL內核在CPU和GPU上同時運行
- 18. 符合OpenCL標準的CPU/GPU列表
- 19. 32位GPU和64位CPU OpenCL?
- 20. 的OpenCL +的OpenGL以減少CPU和GPU
- 21. OpenCL CPU設備vs GPU設備
- 22. 一次調用多少數據將從內存傳輸到CPU
- 23. 爲什麼從GPU到CPU的數據傳輸速度很慢?
- 24. 在OpenCL/C++ Amp中訪問GPU內存
- 25. 從託管代碼執行CPU/GPU指令
- 26. 串行CPU與GPU代碼
- 27. 並行內核執行和OpenCL設備分區
- 28. CPU與GPU之間的指令傳輸
- 29. OpenCL,直接從GPU內核訪問主機內存
- 30. 來自多個進程的並行GPU內核執行
有之間只有一條總線CPU和GPU。如果你有足夠的數據來飽和它,增加更多的線程不會使傳輸速度更快。 –
好的,認爲。但是,如果可以在一個線程執行轉移時的處理? – ccwenlin
另一個線程上GTX 750,你可以在數據傳輸的並行執行內核,是的。 –