[英]GPU/CUDA: Maximum number of blocks of a grid and Maximum number of resident blocks per multiprocessor
[英]Maximum number of CUDA blocks?
我想在CUDA中實現一個算法,該算法接受大小為N的輸入,並使用N ^ 2個線程來執行它(這是特定算法單詞的方式)。 我被要求制作一個程序,最多可以處理N = 2 ^ 10。 我認為,對於我的系統,給定的線程塊最多可以具有512個線程,但是對於N = 2 ^ 10,擁有N ^ 2線程將意味着擁有N ^ 2/1 512 = 2 ^ 20/512塊。 我在此鏈接( http://www.ce.jhu.edu/dalrymple/classes/602/Class10.pdf )上看到,您的塊數“可以高達65,535(或更大的2 ^ 31-1) ”。
我的問題是:
1)如何找到實際的最大塊數? 我不確定引號^^表示“ 65,535(或更大的2 ^ 31-1)”的含義,因為它們顯然是完全不同的數字。
2)是否可以運行需要2 ^ 20/512個線程的算法?
3)如果我需要的線程數(2 ^ 20/512)大於CUDA可以提供的線程數,會發生什么? 它只是填充所有可用線程,然后在完成計算后將這些線程重新分配給其他等待的任務嗎?
4)如果要在每個塊中使用最大線程數,是否應該將線程數設置為512,例如<<<number, 512>>>
,還是使用dim3
值dim3
?
如果您能對這些^^問題中的任何一個提供任何見解,我們將不勝感激。
- 如何找到實際的最大塊數? 我不確定引號^^表示“ 65,535(或更大的2 ^ 31-1)”的含義,因為它們顯然是完全不同的數字。
閱讀相關文檔 ,或構建並運行devicequery實用程序。 但無論哪種情況,限制都遠大於2048(2 ^ 20/512等於2048)。 還請注意,當前所有受支持的硬件上的塊大小限制為每個塊1024個線程,而不是512個線程,因此您可能需要少至1024個塊。
- 是否可以運行需要2 ^ 20/512個線程的算法?
是
- 如果我需要的線程數量大於CUDA可以提供的數量,那會發生什么?
沒有。 發出運行時錯誤。
- 它只是填充所有可用線程,然后在完成計算后將這些線程重新分配給其他等待的任務嗎?
否。您必須自己明確實現這種方案。
- 如果要在每個塊中使用最大線程數,是否應該將線程數設置為512,例如
<<<number, 512>>>
,還是使用dim3值有好處?
沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.