Eigen :: vectors를 사용하는 코드를 가지고 있으므로 Eigen이이 코드를 SSE에 맞게 최적화했는지 확인하고자합니다.고유 코드가 SSE 명령어에 최적화 된 코드인지 여부 확인
Visual Studio 2012 Express를 사용하여 C++ 코드의 최적화 정보를 제공하는 "/ Qvec-report : 2" 명령 줄 옵션을 설정할 수 있습니다. 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;
}
'Vector3d'에 대한 SSE 최적화는 많지 않습니다 (정렬되지 않은로드/저장 비용으로 하나의 패킷과 하나의 스칼라 연산으로 만 분할 될 수 있습니다). – chtz
예 @chtz, vector3d를 최적화하지는 않지만 vector4d를 사용하면이 코드가 최적화됩니다. PeterCordes가 아래에 명시한대로 회의를보고 있습니다. –