[英]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.