2010-06-14 66 views
5

是否可以啓動兩個同時執行獨立任務的內核。例如,如果我有這樣的Cuda的代碼使用CUDA爲GPU同時啓動多個內核

// host and device initialization 
....... 
....... 

// launch kernel1 
myMethod1 <<<.... >>> (params); 

// launch kernel2 
myMethod2 <<<.....>>> (params); 

假設這些內核是獨立的,是有一個機構在同一時間分配爲每個網格數/塊啓動它們。 CUDA/OpenCL是否有此規定。

+0

同時,你的意思是他們的執行是同步的還是簡單的重疊? – 2010-06-14 05:35:41

回答

6

只有具有CUDA計算能力2.0及更高版本(即Fermi)的設備才能支持多個同時執行的內核。見3.2.6.3節的CUDA 3.0節目指南,其中規定的:

計算能力2.0 的一些裝置可以執行多個內核 兼任。應用程序可通過調用 cudaGetDeviceProperties()並檢查 concurrentKernels屬性來查詢 此功能。

設備可同時執行的內核啓動的最大數量 爲4。

來自一個CUDA上下文的內核不能與另一個CUDA上下文中的內核 同時執行。

使用很多紋理或大量本地內存的內核少於可能與其他內核同時執行的內核。

6

對於併發內核,您將需要SM 2.0或更高版本。

要獲得併發執行,您需要手動指示兩個內核之間沒有依賴關係。這是因爲編譯器無法確定一個內核不會修改另一個內核中正在使用的數據,這可能是通過讀取和寫入相同的緩衝區看起來很簡單,但實際上很難檢測,因爲內部可能有指針數據結構等。

爲了表達獨立性,您必須在不同的流中啓動內核。 Triple-chevron語法中的第四個參數指定了流,請查看編程指南或SDK concurrentKernels示例。

3

CUDA兼容性2.1 =多達16個並行內核