CUDA块的最大数量?

时间:2019-04-20 02:30:28

标签: cuda

我想在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)如果我想在每个块中使用最大线程数,应该像<<<number, 512>>>那样将线程数设置为512,还是可以使用?一个dim3值?

如果您能对这些^^问题中的任何一个提供任何见解,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  
      
  1. 如何找到实际的最大块数?我不确定引号^^表示“ 65,535(或更大的2 ^ 31-1)”的含义,   因为这些数字显然非常不同。
  2.   

阅读相关的documentation,或构建并运行devicequery实用程序。但无论哪种情况,限制都远大于2048(2 ^ 20/512等于2048)。另请注意,当前所有受支持的硬件上的块大小限制为每块1024个线程,而不是512个线程,因此您可能需要少至1024个块。

  
      
  1. 是否可以运行需要2 ^ 20/512个线程的算法?
  2.   

  
      
  1. 如果我需要的线程数量大于CUDA可以提供的数量,会发生什么?
  2.   

什么都没有。发出运行时错误。

  
      
  1. 它只是填充所有可用线程,然后在完成计算后将这些线程重新分配给其他等待的任务吗?
  2.   

不。您必须自己明确实现这种方案。

  
      
  1. 如果我想在每个块中使用最大线程数,是否应该像<<<number, 512>>>那样将线程数设置为512,还是使用dim3值有好处?
  2.   

没有区别。