我讀到可以使用內核啓動來同步不同的塊,即如果我希望所有塊在操作2之前完成操作1,我應該將操作1放在一個內核中,操作2在另一個內核中。這樣,我可以實現塊之間的全局同步。但是,cuda c編程指南提到內核調用是異步的,即。 CPU不會等待第一個內核調用完成,因此CPU也可以在第一個內核完成之前調用第二個內核。但是,如果這是真的,那麼我們不能使用內核啓動來同步塊。請讓我知道我的錯在哪裏cuda內核調用是同步還是異步
19
A
回答
28
從CPU的角度看,內核調用是異步的,所以如果連續調用2個內核,第二個內核將被調用而不用等待第一個內核完成。它只意味着控制立即返回到CPU。
在GPU方面,如果你沒有指定不同的流來執行內核,它們將按照它們被調用的順序執行(如果你不指定流,它們都會進入默認流並執行連續)。只有在第一個內核完成後,第二個內核纔會執行。
此行爲適用於支持併發內核執行的計算能力爲2.x的設備。在其他設備上,即使內核調用仍然是異步的,內核執行總是順序的。
查看每個CUDA程序員應閱讀的3.2.5節中的CUDA C編程指南。
0
自2.0 CUDA功能版本開始支持併發內核執行。
此外,返回到CPU代碼可以比所有warp內核更早進行工作。
在這種情況下,您可以自己提供同步。
2
接受的答案並不總是正確的。
在大多數情況下,內核啓動是異步的。但在以下情況下,它是同步。他們很容易被人忽視。
- 環境變量
CUDA_LAUNCH_BLOCKING
等於1. - 使用輪廓儀(
nvprof
),而無需啓用同時內核仿形 - 的memcpy涉及主機存儲器這是不頁面鎖定。
程序員可以內核的全局關閉異步由CUDA_LAUNCH_BLOCKING環境變量設置爲1,提供此功能僅用於調試目的,不應該被用來作爲一種系統上運行的所有CUDA應用程序啓動使生產軟件可靠運行。
如果硬件計數器通過探查器(Nsight,Visual Profiler)收集,內核啓動是同步的,除非啓用併發內核分析。如果涉及非頁面鎖定的主機內存,則異步內存副本也將同步。
從NVIDIA CUDA編程指南(http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#concurrent-execution-host-device)。
相關問題
- 1. CUDA內核在調用推入後啓動是同步還是異步?
- 2. 是同步還是異步?
- 3. CUDA同步內核
- 4. boost :: signals slots是同步調用還是異步調用?
- 5. javascript函數是同步還是異步?
- 6. 是Javascript「eval」同步還是異步?
- 7. Javamail是異步的還是同步的?
- 8. SELECT是同步的還是異步的?
- 9. 是ko.applyBindings同步還是異步?
- 10. dispatchEvent是同步還是異步函數
- 11. curl_easy_perform()是同步的還是異步的?
- 12. ByDefault NSURLConnection是同步還是異步
- 13. 是 - [UITableView reloadData]異步還是同步?
- 14. cudaMalloc和cudaFree是同步還是異步調用?
- 15. amplify.js pub/sub同步還是異步?
- 16. GLES iOS,Android RenderBuffer同步還是異步?
- 17. node.js與redis:同步還是異步?
- 18. 表單提交同步還是異步?
- 19. Cocoa:IBAction回調是同步的還是異步的?
- 20. 異步調用的核心是python線程還是多處理?
- 21. 異步CUDA傳輸調用不是異步運行
- 22. 快速路由處理程序是同步還是異步調用?
- 23. ASP.Net中的默認Web服務調用是同步還是異步?
- 24. 是在異步同步異步
- 25. crm工作流步驟 - 異步還是同步?
- 26. System.IO.FileSystemWatcher的Created事件是同步還是異步觸發的?
- 27. Sql觸發器是同步的還是異步的?
- 28. nsurlconnection默認是什麼?同步還是異步?
- 29. 我的Amazon S3客戶端是同步還是異步?
- 30. lowdb:查詢是同步的還是異步的?