相似指令吞吐量场景下CPU同周期多指令发射技术问询
前提说明
前提1:每条指令的吞吐量为每个时钟周期1条指令(该设定显然与事实不符,此处仅作假设)。
问题解答
同周期发射
ADDPS和SUBPS的可行性
首先要明确,前提1里的「单指令单周期吞吐量」指的是同一条指令重复执行时的单周期最大吞吐上限,不是CPU整个前端的总发射上限。ADDPS(打包单精度浮点加)和SUBPS(打包单精度浮点减)属于同类型但不需要抢占同一执行资源的指令,主流x86架构CPU一般配备2~3个独立的浮点算术执行端口,只要两条指令没有数据依赖、发射队列有空余,完全可以在同一个时钟周期内同时发射甚至同时执行。整数指令的适用性
该逻辑对整数指令完全适用。只要不同整数指令对应的执行端口不冲突,比如一条整数加法ADD和一条整数移位SHL分别分配到不同的整数ALU端口,就可以同周期发射。现在消费级通用CPU的整数发射宽度普遍达到4~6,无依赖的多整数指令同周期发射是非常常见的情况。同周期发射三条乘法指令的可行性
MULLW(16位整数乘法取低16位)、MULHW(16位整数乘法取高16位)、MULHRSW(16位舍入乘法取高16位)三类指令都需要占用整数乘法执行单元资源。目前主流通用CPU通常仅配备1~2个独立的整数乘法端口,没有额外资源的前提下无法同时满足三条乘法指令的执行需求,因此不能同周期发射。但如果是专门的DSP架构,设计了足够多的乘法器阵列,三条指令同周期发射是可以实现的。前提2的影响
这一问题取决于前提2的具体定义,从同类问题的常见设定来看,可能的影响机制包括:
- 如果前提2限定CPU单周期总发射宽度为1:无论指令类型、资源是否冲突,单周期都只能发射1条指令,上述所有多指令同发的场景都不成立。
- 如果前提2限定某类执行端口仅有1个:比如浮点算术端口仅1个,那
ADDPS和SUBPS就需要抢占同一资源,无法同周期发射;如果整数乘法端口仅1个,三条乘法指令更不可能同发。 - 如果前提2限定指令之间存在数据依赖:只要后一条指令的输入依赖前一条指令的输出,不管端口资源多充足,都必须等前一条指令执行完成输出结果后才能发射,完全无法实现同周期发射。
内容的提问来源于stack exchange,提问作者MrUnbelievable92
相关产品推荐
相关产品推荐

