visual-studio - 如何确认 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 列出。
这是否意味着它没有定义?如何检查此预处理器符号?
解决方案
您没有定义EIGEN_VECTORIZE
,它在Eigen/Core
文件中定义。基本上,代码如下:
#ifndef EIGEN_DONT_VECTORIZE
#define EIGEN_VECTORIZE
#define EIGEN_VECTORIZE_SSE
#define EIGEN_VECTORIZE_SSE2
并继续检查是否正在使用每个指令集,如果是,则定义EIGEN_VECTORIZE_YYY
(YYY
指令集在哪里)。需要注意的一件事是,MSVC 没有大于 2 的 SSE 定义。如果要使用这些指令,则必须显式定义EIGEN_VECTORIZE_SSE3
, EIGEN_VECTORIZE_SSSE3
, EIGEN_VECTORIZE_SSE4_1
, EIGEN_VECTORIZE_SSE4_2
。我不确定它是否定义了任何一个,所以如果你启用 AVX2 __FMA__
,你可能想要定义。EIGEN_VECTORIZE_FMA
推荐阅读
- r - 我应该如何将模拟研究中的数据存储在矩阵中?
- javascript - 为什么 Javascript 无法识别我的构造函数?
- ios - 在 podspec 中使用本地框架
- c# - 你如何从预制件中获得一个 int 值?
- javascript - React Native:为什么不能同时在两台设备上进行热重载?
- kotlin - IntelliJ 在单行注释后缩进一行
- amazon-s3 - S3 MultiObjectDeleteException 与 AWS Glue 2.4 或 Pyspark
- ruby-on-rails - Rails webhook 身份验证 HMAC-SHA256
- c - 总理装配作业
- javascript - 使用 socket.io 收集击键事件