インテル®コンパイラーには、ベクトル化に関する情報を出力するためのフラグがあることを読みました(http://software.intel.com/en-us/articles/vectorization-writing-cc-code-in-vector-format/)。 BLOCK WAS VECTORIZED。」など。gccに似たようなものはありますか?何がベクトル化され、何がベクトル化されていないのかを理解できるかどうかを確認しようとしています。たとえば、次のようなデモを作成したいと思います。
#include <vector>
class Point3
{
public:
Point3() : Components(3)
{
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
const unsigned int Components;
float data[3];
private:
};
class Point4
{
public:
Point4() : Components(4)
{
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 0;
}
const unsigned int Components;
float data[4];
private:
};
template <typename T>
static float Add(const T& a, const T& b)
{
float sumValues = 0.0f;
for(unsigned int i = 0; i < a.Components; ++i)
{
sumValues += a.data[i] + b.data[i];
}
return sumValues;
}
int main()
{
std::vector<Point3> point3vec(1000);
for(std::size_t i = 0; i < point3vec.size() - 1; ++i)
{
Add(point3vec[i], point3vec[i+1]);
}
std::vector<Point4> point4vec(1000);
for(std::size_t i = 0; i < point4vec.size(); ++i)
{
Add(point4vec[i], point4vec[i+1]);
}
}
ループの1つがベクトル化され、もう1つはベクトル化されないかどうかを確認します。