c++ - 为什么用 -march=native 编译没有效果?
问题描述
我在我的程序中使用 Eigen::Array。根据在 GCC 上使用 -march=native 编译的数组大小没有任何效果或实际上更慢。我对 Eigen 或 C++ 并没有真正的经验,但我认为 -march=native 应该启用 simd 矢量化,这反过来应该会导致更快的执行。我错了吗?我应该在哪里寻找问题?
如果我剥离我的代码,它的核心将如下所示:
using Matrix = Eigen::Array<Float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
Matrix swarm_matrix;
Matrix pbest_matrix;
Matrix velocities_matrix;
// Initialize matrices and do some stuff
for(size_t iteration = 0; iteration < iterations_number; ++iteration)
{
for(size_t particle_index = 0; particle_index < particles_number; ++particle_index)
{
velocities_matrix.row(particle_index) =
w * velocities_matrix.row(particle_index) +
c1 * (pbest_matrix.row(particle_index) - swarm_matrix.row(particle_index)) +
c2 * (pbest_matrix.row(gbest_index) - swarm_matrix.row(particle_index));
swarm_matrix.row(particle_index) =
swarm_matrix.row(particle_index) +
velocities_matrix.row(particle_index);
// Do some other stuff
}
}
解决方案
推荐阅读
- arrays - Python 将数组的维度从 (n,1) 更改为 (n,)
- java - 在 Apache HttpClient 中使用 euc-jp 发送 UrlEncodedForm 数据
- azure - Microsoft GRAPH API 可能没有 Azure 应用注册?
- roots-sage - 无法使用外部文件中的数组
- c# - TIME 类型的 INSERT 字段
- angular - 没有可观察的服务
- json - 平面 json 到结构化映射
- laravel - 为什么我不能急切地加载我关联的客户详细信息?
- responsive - 响应式设计:我是否必须为每个移动宽度进行媒体查询?
- python - 是否有另一种方法可以在 Python 中提取具有复杂/非结构化嵌套 dict 格式的信息?