GPU更准确地执行线程

时间:2017-02-24 09:10:46

标签: cuda gpu

我有一个问题是理解GPU,更确切地说是GPU的哪一部分执行一个线程。 我已经理解了如何将线程分组为块和网格。 每个GPU都有一个或多个SM(流式多处理器)以及更多SP(流处理器或CUDA核心)。

据我所知,每个SM都会收到一个要执行的线程块 这是我如何看待事物的图片。 this is an example of how i see things 之后,网格被分成warp(32个线程)。 问题:

  1. 为什么我们使用网格如果它也被分割? (如果我有一个包含200个线程的网格,这将被分成32个线程并执行,那么什么是好的网格呢?)

  2. 每个SP执行一次线程?

  3. 每个SM执行一次warp一次?

1 个答案:

答案 0 :(得分:2)

我认为你正在混合术语。层次结构是网格 - >块 - > warp - >螺纹:

  • 内核在单个网格中启动。它映射到整个GPU(除非你做一些花哨的多内核计算,但是更高级)
  • 网格由几个块组成。每个块映射到单个SM,但如果资源允许,SM可以处理多个块。
  • 块被分成经线。根据GPU型号,每个SM一次处理1或2或4个扭曲。但是,块能够同时处理分配给它的所有warp。在不同的warp之间切换经常发生,并且这样做是为了隐藏内存和指令延迟,依赖性等。
  • warp分为32个线程。经线的所有线程都由SM在同一时刻执行,在SIMD中运行。