如果可以應用GPGPU中使用持久線程vs使用device-side-enqueue/nested-parallelism仍然有優勢嗎?持久線程vs設備端入隊/嵌套並行
我已經閱讀了一些舊的論文,其中舊硬件需要持久線程才能獲得最佳性能,我不確定使用device-side-enqueue/nested-parallelism是否使該技術無關緊要?
我想在孩子的任務完全獨立後,他們的父母啓動持續線程仍然值得嗎?
如果可以應用GPGPU中使用持久線程vs使用device-side-enqueue/nested-parallelism仍然有優勢嗎?持久線程vs設備端入隊/嵌套並行
我已經閱讀了一些舊的論文,其中舊硬件需要持久線程才能獲得最佳性能,我不確定使用device-side-enqueue/nested-parallelism是否使該技術無關緊要?
我想在孩子的任務完全獨立後,他們的父母啓動持續線程仍然值得嗎?
作爲編程方法的持久線程在一段時間內可能會繼續令人感興趣。與嵌套並行相比,持久線程可能提供幾個優點。這裏有兩個:推出延遲
消除:別看它小(可能低至幾微秒),至少在CUDA動態並行(CDP)的情況下,存在與兩個相關聯的發射延遲主機內核啓動和子內核啓動。對於極低延遲的需求(例如網絡數據包處理),具有持久線程的生產者/消費者工作隊列模型可以提供比任何涉及接收新工作的啓動的任何機制更低的延遲和更快的週轉時間。
內存使用優化:一種新的持久線程新用例是爲了避免與內核啓動相關的加載/存儲模式。一個例子的很好的描述是here。基本思路是,對於類似工作負載的重複處理,我們可以仔細優化片上數據存儲的使用(包括共享內存,特別是使用GPU寄存器空間),以避免加載數據/參數內核啓動例如從全局內存開始,然後(可能)在內核結束時將更新的參數存儲回全局內存。對於大量攜帶參數使用情況下的特定工作負載,這可以具有顯着的處理優勢,並且可以使參數空間「適合」片上。隨着更新的GPU擁有越來越多的片上寄存器存儲空間,對於更大的工作負載,這可能會繼續引起人們的興趣。
很有可能還有其他特定用例,其中持久線程方法提供明顯優於工作開始方法的優勢。這僅僅是兩個例子。
總之,持久內核並不是替代其他類型GPU處理範例的一般策略,但在特定情況下,它可以提供優於重複啓動內核的方法的好處。因此對持久內核的某些興趣可能會持續一段時間。
這是我有史以來最有信息的答案在stackoverflow上的問題!奇怪的是最快的實際回答!它幫助優化數據緩存的重點和範例非常有用。你可能知道nVidia的Pascal CUDA 8多塊coop組是否可以以某種方式保持執行之間的寄存器/共享存儲狀態?非常感謝。 – iam
我不知道Pascal/CUDA 8能夠保持從一個內核啓動到下一個內核寄存器或共享內存的狀態。我不知道這樣的設施。你能否引用該索賠的參考資料? –
從隨機的谷歌搜索中,我發現在本文末尾提到它:https://asc.llnl.gov/DOE-COE-Mtg-2016/talks/1-10_NVIDIA.pdf。但我不清楚這是如何工作的。 – iam