uops.info关于vinserti128的信息是否有误?吞吐量差异的硬件原因解析
关于
vinserti128在SKX架构上的吞吐差异与端口分配问题 吞吐差异的底层原因(非数据错误)
这不是uops.info的数据错误,而是Intel Skylake-X(SKX)架构的硬件优化特性:
- 当
vinserti128的XMM源操作数来自内存时,指令可以和内存加载操作融合成单个微操作(macro-op fusion)。这种融合让CPU每个周期能处理2条这样的指令,因此 reciprocal throughput( reciprocal 吞吐)为0.5。 - 当XMM源操作数是寄存器时,不存在加载操作可以融合,指令只能以单个独立微操作执行,每个周期最多处理1条,所以 reciprocal throughput 为1。
端口0/1仅支持内存操作数的硬件解释
SKX架构的端口0和1具备处理“加载+运算”融合微操作的能力:
- 内存操作数版本的
vinserti128融合了加载和插入操作,这个复合微操作可以被调度到端口0、1或5执行。 - 寄存器操作数版本的
vinserti128只是单纯的向量插入运算,这类微操作只能由专门负责向量逻辑/插入操作的端口5处理,因此端口0和1不会参与调度。
内容的提问来源于stack exchange,提问作者Elliot Gorokhovsky
相关产品推荐
相关产品推荐

