【发布时间】:2012-03-27 08:39:53
【问题描述】:
注意:此问题专门针对 nVIDIA Compute Capability 2.1 设备。以下信息来自 CUDA Programming Guide v4.1:
在计算能力 2.1 设备中,每个 SM 有 48 个 SP(核心) 用于整数和浮点运算。每个 warp 都由 32 个连续线程。每个 SM 有 2 个warp 调度器。在每一个 指令发布时间,一个warp调度器选择一个准备好的warp 线程并发出 2 条指令 用于核心上的扭曲。
我的疑惑:
- 一个线程将在一个内核上执行。设备如何在单个时钟周期或单个多周期操作中向线程发出 2 条指令?
- 这是否意味着这两条指令应该相互独立?
- 这两条指令可以在内核上并行执行,可能是因为它们在内核中使用了不同的执行单元?这是否也意味着仅在 2 条指令执行完毕后,warp 才准备就绪,还是在其中一条指令执行完毕后才准备好?
【问题讨论】:
-
是经典的指令级并行。请记住,在 Fermi 上,warp 会在至少 2 个周期内退出 16 个内核上的指令。 Compute 2.1 硬件每个 SM 有一个“备用”16 个内核,可以处理来自每个 SM 的 2 个并发扭曲中的任何一个的第二条指令(如果可用)。如果 ILP 不可行,则指令发出率将变为每 4 个周期 2 条指令的理论最大值,而不是每 2 个周期 1 条指令,就像在计算 2.0 设备上一样。
-
Talonmies:感谢您的解释。你能详细说明退休和理论上的最大值吗?请添加为答案,以便我接受,其他人可以编辑。
-
我没有也不会将其添加为答案,因为我对您所询问的“计算机体系结构视角”一无所知。理论上的最大值仅仅来自一条指令需要多少个周期才能退出。单精度 FMAD 可以在一个周期内退出,但其他的可能/比这慢。对于 32 个线程的扭曲,16 个内核上的 1 个周期退休指令需要 2 个周期才能退休。这是理论上的最大指令吞吐量。
-
小心。 FMAD 或任何其他指令的延迟比 1 个周期长得多。您不能反转吞吐量来获得延迟。它是每周期 1 条指令,而不是每条指令 1 周期。
-
@harrism:是的,这不是很好的措辞。在给定指令的延迟中需要担心流水线 - 我只考虑硬件指令吞吐量/退休率。我猜从白痴那里接受硬件建议的危险。