Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;AVX512与_mm256_broadcast_ss()的内在等效物?_C++_Intel_Intrinsics_Avx2_Avx512 - Fatal编程技术网

C++ c++;AVX512与_mm256_broadcast_ss()的内在等效物?

C++ c++;AVX512与_mm256_broadcast_ss()的内在等效物?,c++,intel,intrinsics,avx2,avx512,C++,Intel,Intrinsics,Avx2,Avx512,我正在将代码从AVX2重写为AVX512 我可以用什么等价物来将一个浮点数广播到一个_mm512向量?在AVX2中,它是_mm256_broadcast_ss(),但我找不到类似于_mm512_broadcast_ss()的东西。AVX512不需要内存源版本1的特殊内在特性。您只需使用\u mm512\u set1\u ps(它采用浮点值,而不是浮点值*)。如果这是有效的,编译器应该使用内存源广播。(甚至可能折叠到ALU指令的广播内存源中,而不是单独加载;AVX512可用于512位向量。)

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


我可以用什么等价物来将一个浮点数广播到一个_mm512向量?在AVX2中,它是_mm256_broadcast_ss(),但我找不到类似于_mm512_broadcast_ss()的东西。

AVX512不需要内存源版本1的特殊内在特性。您只需使用
\u mm512\u set1\u ps
(它采用
浮点值,而不是
浮点值*
)。如果这是有效的,编译器应该使用内存源广播。(甚至可能折叠到ALU指令的广播内存源中,而不是单独加载;AVX512可用于512位向量。)


脚注1:《代码》\u mm256\u broadcasts\u ss
甚至与《代码》\u mm256\u set1\u ps分开存在的原因可能是因为AVX1
VBroadcasts-ymm,[mem]
与AVX2
VBroadcasts-ymm,xmm
相比。一些编译器(如MSVC和ICC)允许您在不启用ISA扩展的情况下使用intrinsic,以便编译器在任何地方使用,因此只需要为AVX1内存源版本提供一个内部版本


使用AVX512时,AVX512F同时引入了内存和寄存器源表单,因此无需为这些编译器的用户提供一种方法来微管理允许的asm。

这就是您想要的吗@卡洛斯:是的!谢谢对于_mm256_broadcast_ss(),我读到它比set1快一点,但在这个应用程序中,我并不关心这里的性能。我将添加它作为一个答案,让它更清楚,也许你可以让人们知道它是对的。同时考虑:@PaulR该函数需要一个“_m128”类型的输入,我已经没有精力去做输入类型的额外转换了。我刚刚注意到另一个区别:_mm512_set1_ps()接受浮点值,_mm256_broadcast_ss()接受浮点指针。我当然可以使用_mm512_set1_ps(),尽管它们并不完全相同。也许你可以在英特尔链接上找到更正确的东西?不。我想他们忘了实现它。@Noob:你也可以在AVX1上使用
\u mm256_set1_ps(*ptr)
;我不知道为什么
\u mm256\u broadcast\u ss
甚至存在。也许是因为像MSVC这样的编译器从来没有优化过内部函数,也不允许使用命令行选项避免AVX2指令?因此,您可以使用
\u mm256\u broadcast\u ss
确保获得AVX1内存源版本,并且
\u mm256\u set1\u ps
也允许AVX2寄存器源代码
vbroadcastss ymm,xmm
版本,以编译器方便的版本为准?无论如何,幸运的是AVX512引入了具有相同扩展名的mem和reg源代码版本。