【问题标题】:Difference between MP and SP (or is it Core) in CUDA parallelism?CUDA 并行性中 MP 和 SP(或者是核心)之间的区别?
【发布时间】:2014-11-14 04:59:36
【问题描述】:

所以,在阅读了一些非常有用的帖子后,我得出的结论是,

  1. 每个块网格都在单个设备上执行。 (例如设备有 9 MP)

  2. 每个线程块在单个多处理器上执行。 (例如 1 MP 有 8 个 SP/核心)。

  3. 每组线程(称为 warp)在一个 SP/Core 上执行。

现在,如果我假设

  1. 我一共有72个核心(9*8),
  2. 我用 9 个块和 8 个线程调用内核,总共 72 个线程。
  3. 所有 72 个线程都将并行运行?

但是,如果我调用更多,那么它们将不会并行运行?

【问题讨论】:

  • 只有 warp 才能真正并行运行。

标签: parallel-processing cuda gpu


【解决方案1】:
Each Grid of Blocks executes on a single device. (e.g Device has 9 MP)

是的!

Each Block of Threads executes on a single MultiProcessor. (e.g 1 MP has 8 SP/Cores).

是的!

Each Group of Threads (called warps) executes on a SP/Core.

不!通常,一个 warp(所有当前硬件上的 32 个线程)分布在内核之间。

Now, if I assume that

I have a total of 72 Cores (9*8) ,
I call kernel with 9 blocks and 8 threads,total 72 threads.
All the 72 threads will run in parallel ?

是的!但不会很快……

However, If I call more than that, then they will not run in parallel ?

它们将并行运行。 GPU 通过超额订阅获得良好的性能。一个核心不能在一个周期内完成一条指令,并且需要许多周期才能返回(这被称为latency)。通过拥有比内核更多的线程,您可以在正在启动的指令和它执行之间的间隙中发出另一条指令。这是您从 GPU 中获得最佳性能的唯一方法 - 通过每个内核拥有多个线程 - 并且是 GPU 编程的基础。一个 SM 可以拥有多少线程是有限制的,但通常您需要尽可能多的线程,是内核数量的几倍。

从程序员的角度来看,网格中的所有线程都是并行运行的。从硬件的角度来看,每个 SM 都与其他每个 SM 并行运行。每个 SM 可以有多个 warp,每个周期执行指令。每条指令在 SM 的内核上并行执行。每个核心在其管道中可以有许多操作。

程序员的观点和硬件的观点之间的细微差别在于硬件中存在基于资源的依赖关系。程序员看不到这些依赖项。

【讨论】:

    【解决方案2】:

    每个块网格都在单个设备上执行。 (例如设备有 9 MP)

    正确。

    每个线程块在单个多处理器上执行。 (例如 1 MP 有 8 个 SP/核心)。

    线程块被单独调度到 SM 上,给定块内的线程由同一个 SM 执行。

    每个线程块在单个多处理器上执行。 (例如 1 MP 有 8 个 SP/核心)。

    没错。线程块在一个多处理器上执行,在内核执行期间它们不会迁移到另一个 SM。

    如果我调用更多,它们不会并行运行?

    简短的回答是否定的。只有一个经线真正并行运行(正如@ebarr 所说)。

    长答案是,warp 映射到 SM(SP 一个线程)上,所有 32 个线程在 SM 中并行运行。如果由于某种原因,其中一个线程需要执行长时间延迟操作,这将导致其余线程(以及 SM 队列中的其他线程)空闲。为了解决这个问题,CUDA 在 warp 之间使用了快速的上下文切换。

    因此,线程级别(在一个warp内)和warp级别(不同的SM在给定时刻运行一个warp)存在并行性。

    如果启动的线程数超过 72 个会怎样? 启动超过 72 个线程是 CUDA 的目的。正如我之前所说,隐藏操作符延迟的方法是通过上下文切换,即启动大量线程。

    线程块将被划分为warp,这些warp将在SM上调度和排队,并以未知的顺序执行。

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2014-10-17
      • 1970-01-01
      • 2011-10-03
      • 2020-06-06
      • 2019-11-13
      相关资源
      最近更新 更多