【发布时间】:2017-04-14 04:42:11
【问题描述】:
总的来说,我认为我对延迟和吞吐量之间的区别有相当的了解。但是,对于 Intel Intrinsics,我不清楚延迟对指令吞吐量的影响,尤其是在按顺序(或几乎按顺序)使用多个内部调用时。
例如,让我们考虑:
_mm_cmpestrc
这在 Haswell 处理器上具有 11 的延迟和 7 的吞吐量。如果我在循环中运行此指令,我会在 11 个周期后获得连续的每个周期输出吗?由于这需要一次运行 11 条指令,并且由于我的吞吐量为 7,我是否会用完“执行单元”?
我不知道如何使用延迟和吞吐量,除了了解一条指令相对于不同版本的代码需要多长时间。
【问题讨论】:
-
吞吐量 = 7 表示每 7 个周期可以启动一次。延迟 = 11 意味着单个结果需要 11 个周期。因此,平均而言,在任何给定时间大约有 1.5 个在进行中,并且不超过 2 个。(尽管它是一个多指令指令,因此调度程序可能最终会因某种原因将更多指令与指令交错)。顺便说一句,Agner Fog 在 Haswell 上的 PCMPESTRI 数字与英特尔的不匹配。)
标签: performance x86 sse intrinsics micro-optimization