猿问

即时生成矢量常量的最佳指令序列是什么?

即时生成矢量常量的最佳指令序列是什么?

“最佳”是指最少的指令(或最少的微指令,如果有任何指令解码到一个以上的微指令)。机器码大小(以字节为单位)是相等的insn计数的平局。

从本质上讲,恒定生成是新的依赖链的开始,因此延迟很重要。在循环内生成常量也很不常见,因此吞吐量和执行端口需求也几乎无关紧要。

生成常量而不是加载常量需要更多指令(全零或全一除外),因此确实会占用宝贵的uop缓存空间。与数据缓存相比,这可能是更为有限的资源。

Agner Fog出色的《优化装配》指南在中对此进行了介绍Section 13.4。表13.10具有用于产生向量序列,每一个元素是01234-1,或-2,与从8位到64位单元大小。表13.11具有用于产生一些浮点值序列(0.00.51.01.52.0-2.0,和位掩码为符号位。)

Agner Fog的序列仅出于设计目的或因为已有一段时间没有更新而仅使用SSE2。

简短的非显而易见的指令序列还可以生成其他哪些常量? (具有不同移位计数的进一步扩展是显而易见的,并且没有“兴趣”。)是否有更好的序列来生成Agner Fog列出的常数?

如何将128位立即数移动到XMM寄存器说明了一些将任意128b常量放入指令流中的方法,但这通常不明智(它不节省任何空间,并占用大量的uop缓存空间。)


哈士奇WWW
浏览 452回答 2
2回答
随时随地看视频慕课网APP
我要回答