为何sha256rnds2指令设计为隐式使用xmm0寄存器?
关于sha256rnds2隐式操作数设计的原因说明
你提到的三个推测中,编码空间限制是最核心的真实原因,另外两个推测和实际设计背景存在偏差,具体分析如下:
- 关于「SHA-NI面向低性能CPU设计」的推测不成立:SHA-NI从立项之初就覆盖了服务器端IPSec加解密卸载的需求,设计阶段已经考虑了高性能场景的使用,不存在未预料到高性能普及的情况。
- 关于「指令编码位宽不足」的推测符合实际:
sha256rnds2属于SSE架构下的扩展指令,当时SSE的指令编码格式仅预留了最多2个显式XMM寄存器操作数的编码位,没有多余比特位用来编码第三个操作数。为了兼容现有指令解码框架,设计方最终选择将第三操作数硬编码为固定的xmm0寄存器,这是兼容性优先的折中方案。 - 关于「指令能耗过高无法配置多流水线」的推测不成立:
sha256rnds2的运算功耗和同代同复杂度的其他向量密码指令(如AES-NI系列指令)没有量级差异,现有CPU的倒数吞吐量限制本质是隐式寄存器依赖带来的调度瓶颈,而非硬件无法实现多执行流水线。当前主流服务器CPU已经搭载了多组SHA运算单元,只是受限于该指令的隐式操作数设计,无法在多缓冲区场景下被充分调度。
补充说明:后续推出的AVX架构下的SHA扩展指令已经解决了这个问题,采用显式三操作数编码,不存在固定寄存器依赖,可以实现高效的多缓冲区并行SHA256计算。
内容的提问来源于stack exchange,提问作者user1641854
相关产品推荐
相关产品推荐

