NVIDIA 架构:CUDA 线程和线程块

  • 本文关键字:线程 CUDA 架构 NVIDIA cuda
  • 更新时间 :
  • 英文 :


这主要来自《计算机体系结构:定量方法》一书。

该书指出,32 个线程的组在所谓的线程块中分组并一起执行,但展示了一个函数调用的示例,每个线程块有 256 个线程,CUDA 的文档指出每个线程块最多可以有 512 个线程。

函数调用如下所示:

int nblocks = (n+255)/256
daxpy<<<nblocks,256>>>(n,2.0,x,y)

有人可以解释一下线程块的结构吗?

在我看来,这个问题有点不清楚。我将强调螺纹翘曲和螺纹块之间的区别,我认为这很重要,希望它有助于回答真正的问题。

每个扭曲的线程数由硬件定义。通常,线程扭曲是 32 个线程宽 (NVIDIA(,因为 GPU 上的 SIMD 单元正好有 32 个执行通道,每个通道都有自己的 ALU(据我所知,情况并非总是如此;有些架构只有 16 个通道,即使线程扭曲是 32 个宽(。

线程块的大小由用户定义(尽管受硬件约束(。硬件仍将以 32 宽的线程扭曲执行线程代码。某些 GPU 资源(如共享内存和同步(不能在 GPU 上的任何两个线程之间任意共享。但是,如果线程属于同一线程块,则 GPU 将允许线程共享更大的资源子集。这就是为什么使用线程块背后的主要思想。

最新更新