簡體   English   中英

Opencl 啟動並發內核

[英]Opencl launch concurrent kernels

據我所知,要執行並發內核(在我的情況下是相同的內核但不同的 I/O 數據),它必須通過啟動獨特的計算單元(流式多處理器 -SM)來完成,顯然它們有自己的工作組。

例如 gtx960m 有 5 個 SM(Opencl 中的計算單元)。 使用自己的 16x16 (2d) 工作組異步無序啟動clEnqueueNDRangeKernel 5 次,是否會啟動所有 5 個計算單元以同時執行它們? 報告的本地內存為 64kb。 那是針對所有計算單元還是每個計算單元都有 64kb?

每個 CU 有 4 個(麥克斯韋/帕斯卡)或 2 個(圖靈/安培,AMD)扭曲。 Warp 是一組 32 個 CUDA 核心/硬件流處理器。

在一個 Warp 中運行的所有線程必須執行完全相同的指令。 在 Warp 中,甚至不可能進行分支。 一個 CU 中的兩個 Warp 可以處理不同的分支,但不能同時處理不同的內核。

如果您在具有 5 個 CU 的 960m 上並行執行不同隊列中的兩個內核,例如,內核 1 可以有 3 個 CU,內核 2 可以有剩余的 2 個。但是不能拆分一個 CU 以同時運行多個內核。

在 OpenCL 中,您可以將工作組大小設置為 Warp 大小 (32) 的倍數。 可以在一個 Maxwell CU 上同時執行 4 個(工作組大小為 32)、2 個(工作組大小為 64)或 1 個(工作組大小為 128 或更大)的 OpenCL 工作組。

每個 CU 的本地內存量(在您的情況下為 64KB)。 因此,如果您有一個大型工作組,例如 256 個線程,則每個線程的可用本地內存比工作組大小為 64 時少,因為工作組中的所有線程都共享相同的本地內存,如果它們運行在一個 CU 上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM