确定eigen是否具有针对SSE指令的优化代码

时间:2016-10-17 15:37:34

标签: c++ visual-studio-2012 vectorization eigen sse2

我有一个使用Eigen :: vectors的代码,我想确认Eigen是否为SSE优化了这段代码。

我正在使用Visual Studio 2012 Express,我可以在其中设置命令行选项" / Qvec-report:2" ,它提供了C ++代码的优化详细信息。 Visual Studio或Eigen中是否有任何选项可以告诉我代码已经优化?

我的代码如下:

#include <iostream>
#include <vector>
#include <time.h>
#include<Eigen/StdVector>
int main(char *argv[], int argc)
{
    int tempSize=100;
/** I am aligning these vectors as specfied on http://eigen.tuxfamily.org/dox/group__TopicStlContainers.html */
    std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d>> eiVec(tempSize);
    std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d>> eiVec1(tempSize);
    std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d>> eiVec2(tempSize);

    for(int i=0;i<100;i++)
    {
        eiVec1[i] = Eigen::Vector3d::Zero();
        eiVec2[i] = Eigen::Vector3d::Zero();
    }

    Eigen::Vector3d *eV = &eiVec.front();
    const Eigen::Vector3d *eV1 = &eiVec1.front();
    const Eigen::Vector3d *eV2 = &eiVec2.front();

/** Below loop is not vectorized by visual studio due to code 1304: 
    Because here comes the operations at level of Eigen, I want to 
    know here whether Eigen has optimized this operation or not? */
    for(int i=0;i<100;i++)
    {
        eV[i] = eV1[i] - eV2[i];
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

查看asm输出。

如果在内部循环中看到SUBPD(压缩为double),则会进行矢量化。如果你只看到SUBSD(标量加倍)并且在任何地方都没有SUBPD,那么它就没有了。