如何使用CUDA处理任意大小的任务?

如何使用CUDA处理任意大小的任务?,cuda,gpgpu,nvidia,Cuda,Gpgpu,Nvidia,我开始学习CUDA,不得不直接投入到一个项目中,所以我目前缺乏坚实的理论背景;我会一路上把它捡起来 虽然我知道硬件的构建方式需要程序员处理线程块和网格,但在我的入门书中,我还没有找到以下问题的答案: 当任务大小大于GPU一次可以处理的线程数量时会发生什么?GPU是否会以CPU相同的方式(即顺序)通过阵列 因此,如果给定任务所需的线程块数量超过了可以在GPU上同时运行的线程块数量,我应该担心吗?到目前为止,我发现了一个“线程块限制”的概念,它显然比GPU在给定时刻能够处理的要高,因此,这是我应该

我开始学习CUDA,不得不直接投入到一个项目中,所以我目前缺乏坚实的理论背景;我会一路上把它捡起来

虽然我知道硬件的构建方式需要程序员处理线程块和网格,但在我的入门书中,我还没有找到以下问题的答案:

  • 当任务大小大于GPU一次可以处理的线程数量时会发生什么?GPU是否会以CPU相同的方式(即顺序)通过阵列
  • 因此,如果给定任务所需的线程块数量超过了可以在GPU上同时运行的线程块数量,我应该担心吗?到目前为止,我发现了一个“线程块限制”的概念,它显然比GPU在给定时刻能够处理的要高,因此,这是我应该关注的真正(也是唯一)限制吗
  • 除了为给定的硬件选择合适的块大小之外,在设置内核执行时还有什么问题需要考虑吗?我对启动任意大小的任务感到不知所措。甚至考虑使用OpenCL而不是CUDA,因为在启动内核以在数组上执行时,似乎没有显式的块大小计算

我同意将其作为副本关闭,如果是,请确保指向原始问题。

线程块的数量可以是任意的。如果数量较大,硬件可以按顺序处理它们。此链接提供基本视图

另一方面,通过增加每个线程的工作量,可以使用有限数量的线程来处理任意大小的任务。这个链接向您展示了如何做到这一点以及为什么它更好

你可能想阅读下面两个完整的答案


如果下层选民留下他们不喜欢这个问题的地方,我将不胜感激,谢谢。这个问题非常准确,我不知道为什么投票的范围太广。我投票决定结束投票,因为范围太广。因为它是。你已经有效地提出了四个不同的问题,回答它们都需要很长的时间。当然比我愿意写的要长。