【问题标题】:NVIDIA Architecture: CUDA threads and thread blocksNVIDIA 架构:CUDA 线程和线程块
【发布时间】:2020-08-29 01:19:55
【问题描述】:

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

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

函数调用如下所示:

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

谁能解释一下线程块的结构?

【问题讨论】:

标签: cuda


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我遇到的问题是了解线程块和扭曲之间的区别。
猜你喜欢
  • 2012-05-13
  • 1970-01-01
  • 2015-03-16
  • 2014-05-05
  • 2012-09-05
  • 2021-03-08
  • 1970-01-01
  • 2013-11-28
  • 2021-06-05
相关资源
最近更新 更多