簡體   English   中英

Cuda塊或線程首選項

[英]Cuda block or thread preference

我正在實現的算法有許多需要並行處理的事情。 我的問題是,如果我不打算使用共享內存,那么我應該選擇更多的線程/塊更少的塊還是更多的線程/塊更少的塊來提高性能,以便總線程總數達到我需要的並行事物數量去做?

我認為“事物的設定數量”很小,否則您將不會問這個問題。 嘗試暴露更多的並行性可能會花費很多時間。

CUDA GPU將執行活動分組,然后將所得的內存訪問分成32個線程的扭曲。 因此,至少您需要從每個線程塊創建至少一個扭曲開始。

然后,您將希望創建至少與GPU中包含SM一樣多的線程塊。 如果您有4個SM,則下一個大於32的縮放增量將是創建4個線程塊,每個線程塊32個線程。

如果在此假設示例中您擁有超過128個“事物數”,那么您可能希望同時增加每個線程塊和線程塊的扭曲。 您可以從線程塊開始,直到達到一定數量(大約16個左右),這將使您的代碼可以在大於假設的4-SM GPU的GPU上擴展。 但是單個SM上可以打開的線程塊數量是有限的,因此在16個左右的線程塊之后很快,您還希望將每個線程塊的扭曲數量增加到1以上(即,超過32個線程)。

這些針對小問題的策略將使您能夠在問題擴大時盡快利用GPU上的所有硬件,同時如果問題足夠大(例如,每個線程塊扭曲多個),仍然可以隱藏延遲,或每個SM駐留多個線程塊)。

暫無
暫無

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

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