CUDA块与线程和SMPs之间的关系



我最近读了这篇CUDA教程:https://developer.nvidia.com/blog/even-easier-introduction-cuda/有一件事是不清楚的。当我们对两个向量求和时,我们将任务划分为几个线程,以便并行执行。我的问题是,为什么块(也许还有线程(的数量不取决于GPU的物理特性,物理SMPs和线程的数量?

例如,假设GPU有16个SMPs,每个SMPs都可以运行128个线程,那么用128个线程将问题拆分为16个块会更快吗?还是像文章中那样,用256个线程将4000个块拆分会更快?

这并不取决于,因为线程的数量主要取决于您的问题大小,块的大小取决于GPU架构。例如,如果你的GPU有3000个内核,并且最多可以有512个块,并且你的代码将处理一个大小为20亿的矩阵,那么你必须指定";块的数量X每个块的线程数量(不大于512(";则CUDA将智能地将你的线程块划分到你的GPU的3000个CUDA内核中;numBLocks X numThreadsPerBlock";已被GPU调用。

最新更新