最大CUDA块数?

问题描述 投票:0回答:1

我想在CUDA中实现一个算法,它采用大小为N的输入并使用N ^ 2个线程来执行它(这是特定算法词的方式)。我被要求制作一个可以处理N = 2 ^ 10的程序。我认为对于我的系统,给定的线程块最多可以有512个线程,但是对于N = 2 ^ 10,具有N ^ 2个线程意味着具有N ^ 2/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值有优势?

如果你能对任何这些^^问题提供任何见解,我会很感激。

cuda
1个回答
1
投票
  1. 如何找到实际的最大块数?当它说“65,535(或更大的2 ^ 31 - 1)”时,我不确定引用^^的意思,因为那些数字显然是非常不同的。

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

  1. 是否可以运行需要2 ^ 20/512个线程的算法[原文如此]?

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

没有。发出运行时错误。

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

不,你必须自己明确地实施这样的计划。

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

没有区别。

© www.soinside.com 2019 - 2024. All rights reserved.