c++ AVX512 内在等效于 _mm256_broadcast_ss()?

Noo*_*oob 4 c++ intel intrinsics avx2 avx512

我正在将代码从 AVX2 重写为 AVX512。

我可以用来将单个浮点数广播到 _mm512 向量的等效项是什么?在 AVX2 中它是 _mm256_broadcast_ss() 但我找不到像 _mm512_broadcast_ss() 这样的东西。

Car*_*los 5

AVX512 不需要内存源版本1的特殊内在函数。您可以简单地使用_mm512_set1_ps(需要 a float,而不是 a float*)。如果有效,编译器应该使用内存源广播。(甚至可能折叠到 ALU 指令的广播内存源中,而不是单独加载;AVX512 可以为 512 位向量做到这一点。)

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_set1_ps&expand=5236,4980


脚注 1:_mm256_broadcast_ss甚至与 from 分开存在的原因_mm256_set1_ps可能是因为 AVX1 vbroadcastss ymm, [mem]vs. AVX2 vbroadcastss ymm, xmm。某些编译器(如 MSVC 和 ICC)允许您使用内在函数,而无需启用编译器的 ISA 扩展即可在任何地方使用,因此需要专门针对 AVX1 内存源版本的内在函数。

对于 AVX512,AVX512F 引入了内存和寄存器源形式,因此无需为这些编译器的用户提供一种微观管理允许哪些 asm 的方法。