首页 > 解决方案 > 如何确认 Eigen 在 Visual Studios 中启用矢量化?如何检查是否定义了 EIGEN_VECTORIZE 预处理器符号?

问题描述

我试图让 Eigen 使用 Visual Studios 2015 构建工具在 Visual Studios 2019 中处理一些代码。

我想确认 Eigen 正在检测并启用其矢量化。

根据Eigen FAQ,Eigen “如果检测到支持的 SIMD 指令集和支持的编译器,将自动启用其矢量化”。

我在Project->Properties->Configuration Properties->C/C++->Optimization中打开了“最大化速度”标志 (/O2)

同样根据 Eigen FAQ,为了检查是否正在使用矢量化,“首先您可以检查是否启用了 Eigen 矢量化:然后定义了 EIGEN_VECTORIZE 预处理器符号。”

如果我在Project->Properties->Configuration Properties->C/C++->Preprocessor下查看,我没有看到 EIGEN_VECTORIZE 列出。

这是否意味着它没有定义?如何检查此预处理器符号?

标签: visual-studiovectorizationeigen

解决方案


您没有定义EIGEN_VECTORIZE,它在Eigen/Core文件中定义。基本上,代码如下:

#ifndef EIGEN_DONT_VECTORIZE
    #define EIGEN_VECTORIZE
    #define EIGEN_VECTORIZE_SSE
    #define EIGEN_VECTORIZE_SSE2

并继续检查是否正在使用每个指令集,如果是,则定义EIGEN_VECTORIZE_YYYYYY指令集在哪里)。需要注意的一件事是,MSVC 没有大于 2 的 SSE 定义。如果要使用这些指令,则必须显式定义EIGEN_VECTORIZE_SSE3, EIGEN_VECTORIZE_SSSE3, EIGEN_VECTORIZE_SSE4_1, EIGEN_VECTORIZE_SSE4_2。我不确定它是否定义了任何一个,所以如果你启用 AVX2 __FMA__,你可能想要定义。EIGEN_VECTORIZE_FMA


推荐阅读