Parallel processing CUDA块和线程与SMP之间的关系

Parallel processing CUDA块和线程与SMP之间的关系,parallel-processing,cuda,Parallel Processing,Cuda,我最近读了这篇CUDA教程:有一点不清楚。当我们对两个向量求和时,我们将任务分成几个块和线程来并行执行。我的问题是为什么块(可能还有线程)的数量不取决于GPU的物理属性、物理SMP和线程的数量 例如,假设GPU有16个SMP,每个SMP可以运行128个线程,那么将问题分成16个块乘以128个线程会更快吗,或者像本文中那样,用256个线程拆分4000个块?这不取决于线程数,因为线程数主要取决于问题大小,而块大小取决于GPU体系结构。例如,如果您的GPU有3000个内核,最多可以有512个块,并且您

我最近读了这篇CUDA教程:有一点不清楚。当我们对两个向量求和时,我们将任务分成几个块和线程来并行执行。我的问题是为什么块(可能还有线程)的数量不取决于GPU的物理属性、物理SMP和线程的数量


例如,假设GPU有16个SMP,每个SMP可以运行128个线程,那么将问题分成16个块乘以128个线程会更快吗,或者像本文中那样,用256个线程拆分4000个块?

这不取决于线程数,因为线程数主要取决于问题大小,而块大小取决于GPU体系结构。例如,如果您的GPU有3000个内核,最多可以有512个块,并且您的代码将处理一个大小为20亿的矩阵,那么您必须指定等于或大于20亿的“块数X每个块的线程数(不大于512)”,然后CUDA会将线程块智能地划分到GPU的3000个CUDA内核中,直到GPU调用了“numBLocks X numThreadsPerBlock”指定的所有线程。

“例如,假设GPU有16个SMP,每个SMP可以运行128个线程。”没有这样的动物。在过去10年左右的时间里,GPU每个SM至少可以运行1024个线程。人们通常认为每个SM的内核是这里的一个重要考虑因素。事实并非如此。GPU是一个延迟隐藏机器。对本主题的正确解释需要大约1个小时,并配有完整的幻灯片。如果您愿意,您可以回顾培训课程3。对于那些想知道标记的人来说——CUDA不是传统意义上的多线程,而是。。。CUDA,这自动意味着一个类似线程的执行模型,因此标记是多余的。有一些问题同时被标记为多线程和CUDA标记,这些问题是关于使用CUDA和CUDA API的线程安全的多线程主机应用程序的问题。这不是这些问题中的一个,这就是我删除标签的原因