我正在将代码从 AVX2 重写为 AVX512。
我可以用来将单个浮点数广播到 _mm512 vector 的等效项是什么?在 AVX2 中它是 _mm256_broadcast_ss() 但我找不到像 _mm512_broadcast_ss() 这样的东西。
最佳答案
AVX512 不需要内存源版本 1 的特殊内在函数。您可以简单地使用 _mm512_set1_ps
(它需要 float
,而不是 float*
)。如果有效,编译器应该使用内存源广播。 (甚至可能折叠到 ALU 指令的广播内存源中,而不是单独的加载;AVX512 可以为 512 位 vector 做到这一点。)
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_set1_ps&expand=5236,4980
脚注 1: _mm256_broadcast_ss
甚至与 _mm256_set1_ps
分开存在的原因可能是因为 AVX1 vbroadcastss ymm, [mem]
与 AVX2 vbroadcastss ymm, xmm
。某些编译器(如 MSVC 和 ICC)允许您使用内部函数,而无需启用编译器的 ISA 扩展即可在任何地方使用,因此需要专门针对 AVX1 内存源版本的内部函数。
对于 AVX512,AVX512F 引入了内存和寄存器源形式,因此无需为这些编译器的用户提供一种微观管理允许使用哪种 asm 的方法。