根据这个链接,AVX512 ( MSVC 2017 )没有预定义的预处理器符号。
我正试图在(你猜到的)窗口上建立一个使用本机库的雷暴系统。本征和雷声on都使用cmake和depinding的编译器预存符号,特征用avx512指令编译或不编译。
使用/arch:AVX512似乎不会在MSVC中触发任何错误,但不会定义特征所需的__AVX512F__符号。我还试图在cmake参数中包括-D__AVX512F__=ON,但仍然没有成功。
由于AVX512没有预定义的预定义处理器符号,是否有任何方法强制Eigen使用avx512进行编译?
更新
根据chtz的评论,我已经签出了Eigen的默认分支,并使用arch: are 512重新编译了具有这个cmake参数(可能不需要所有这些参数)的thundersvm:
-DUSE_CUDA=OFF -DUSE_EIGEN=ON -DBUILD_SHARED_LIBS=OFF -DEIGEN_ENABLE_AVX512=ON -D__AVX512F__=ON -DEIGEN_VECTORIZE_AVX512=ON -DEIGEN_VECTORIZE_AVX2=ON -DEIGEN_VECTORIZE_AVX=ON -DEIGEN_VECTORIZE_FMA=ON比较英特尔的SDE -mix工具在补丁之前和之后的指令组合,我可以清楚地看到使用了AVX指令(SDE抱怨它在运行skl时不识别指令vbroadcastss zmm0, xmm0,但是对skx很好)。问题是MSVC使用的是AVX的标量版本,运行时没有任何改进(总指令的数量也是相同的),这与此帖子类似。
我是否需要定义其他标志,以便MSVC生成非标量指令?(我想我也会给gcc一次机会)
发布于 2020-10-06 11:25:00
MSVC对AVX-512的支持很差,对不同的子集没有区别.没有安全的方法可以在MSVC上生成AVX512F代码而不可能编写AVX512DQ指令。
最好的AVX-512编译器是gcc和clang。如果您喜欢IDE,可以使用的Clang插件。gcc和clang编译器具有预处理符号,如__AVX512F__、__AVX512VL__等。
https://stackoverflow.com/questions/54695779
复制相似问题