devicequery 结果中 'Maximum number of threads per multiprocessor' 和 'Maximum number of threads per block' 有什么区别

what is the difference between 'Maximum number of threads per multiprocessor' and 'Maximum number of threads per block' in the devicequery result

执行设备查询时, 我想知道“每个多处理器的最大线程数”和“每个块的最大线程数”之间的区别。据我了解,sm = multiprocessor = block on the gpu,但我不明白为什么这两个值不同。多处理器中是否有多个块?

  Maximum number of threads per multiprocessor:  1536
  Maximum number of threads per block:           1024

还有一个问题就是thread和core的关系,thread = core这样匹配对吗?

Are there multiple blocks in a multiprocessor?

可以,可以。

很简单,sm == 多处理器。 sm != 方块

SM(多处理器)是一个硬件实体。线程块是一个软件实体,基本上是线程的集合。

一个 SM 或多处理器可以驻留超过 1 个块。要完全占用具有 1536 个最大线程的 SM,您需要驻留三个 512 线程块。

And an additional question is the relationship between thread and core, is it correct to match thread = core?

一个线程代表一个指令序列。 GPU 中的“核心”是 SM 中的一个功能单元,它处理某些指令类型,即 32 位浮点加法、乘法和 multiply-add 指令。其他指令类型由 SM 中的其他(种类)功能单元处理。

当线程要处理其中一种 32 位浮点指令类型时,它需要一个核心。如果它恰好有不同的指令要处理,比如 LD(加载)指令,它将需要不同的功能单元,具体来说,case/example 中的 LD/ST (load/store) 单元.