Eigen :: vectorsを使用しているコードを持っているので、EigenがこのコードをSSE用に最適化しているかどうかを確認します。固有値にSSE命令の最適化コードがあるかどうかを確認する
私はVisual Studio 2012 Expressを使用していますが、コマンドラインオプション"/ Qvec-report:2"を設定すると、C++コードの最適化の詳細が得られます。ビジュアルスタジオや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;
}
'Vector3d'のためのSSE最適化はあまりありません(1つのパケットと1つのスカラ演算に分割することができますが、非整列のロード/ストアを犠牲にして)。 – chtz
はい@chtz、それはvector3dを最適化していませんが、私がvector4dを使用すると、このコードが最適化されます。私はPeterCordesによって下に指定されるようにアセンブリを見ているので。 –