首页 > 解决方案 > 为什么用 -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
    }
}

标签: c++gcceigen

解决方案


推荐阅读