如何在最少的時鐘週期數內將YMM寄存器的最低64位設置爲某個常數?我知道使用SSE指令以及AVX指令VBROADCASTSD
可以做到這一點的各種方法,但我不確定哪種方法會產生最佳結果。高效地將YMM寄存器的最低64位設置爲常量
編輯:設置64位部分後,仍然需要使用完整的YMM寄存器。
感謝您的幫助!
如何在最少的時鐘週期數內將YMM寄存器的最低64位設置爲某個常數?我知道使用SSE指令以及AVX指令VBROADCASTSD
可以做到這一點的各種方法,但我不確定哪種方法會產生最佳結果。高效地將YMM寄存器的最低64位設置爲常量
編輯:設置64位部分後,仍然需要使用完整的YMM寄存器。
感謝您的幫助!
如果您只需要設置最低64位並且其他YMM位不重要,請使用VMOVQ
。
如果您需要保存YMM寄存器中的其他位,最有效的方法是使用VBLENDPD
。或者,您可以用VANDPD
清除最低64位,然後使用VORPD
加載常量。
AVX2允許其他替代方法:VPMASKMOVD
或VPBLENDD
(但它尚未被任何處理器支持)。
謝謝,這正是我正在尋找的! – 2012-03-03 13:57:34
我也可以建議VBLENDPD(Sandy Bridge上的延遲1)而不是VANDPD + VORPD。 – 2012-03-03 14:24:35
@NorbertP。 VBLENDPD絕對更好。謝謝。 – 2012-03-03 14:35:15
取決於您是否想在設置低64位或僅設置XMM部分後使用完整的YMM寄存器。 – hirschhornsalz 2012-03-03 12:43:47
對不明確的地方 - 在設置低64位之後,我需要使用完整的YMM寄存器。 – 2012-03-03 12:49:19
它也取決於常數。一些常量值可以很容易地生成,其他值必須從內存中加載) – jalf 2012-03-03 13:45:03