0
인텔 컴파일러에 정보를 출력하는 플래그가 있음 (http://software.intel.com/en-us/articles/vectorization-writing-cc-code-in-vector-format/)을 읽었습니다. 벡터화 - "BLOCK WAS VECTORIZED."와 같은 것들. gcc에는 비슷한 것이 있습니까? 나는 무엇이 벡터화되고 어떤 것이 아닌지에 대한 아이디어를 얻을 수 있는지 알아보기 위해 노력하고있다.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]);
}
}
을, 다른 하나는하지 않지만 루프 중 하나가 벡터화됩니다 있는지 예를 들어, 나는 데모를 다음과 같이하고 싶습니다.
에서 쿨
-ftree-vectorizer-verbose=n
를 참조하십시오. 나는 기본값이 n = 0이라고 가정하고 있습니까? –흠, 나는 명시 적으로 그렇게 말하지 않는데 놀랍지 만, 그렇습니다. 나는 그 옵션을 명시 적으로 사용하지 않는 한 출력이 없기 때문에 그렇게 생각합니다. –
위의 (편집 된) 코드를 -ftree-vectorizer-verbose = 8로 컴파일했습니다. 60 : 참고 : 벡터화되지 않음 : 내부 루프 수가 불변하지 않음. line 54 : 참고 : 벡터화되지 않음 : 내부 루프 수가 불변하지 않음. 라인 44 : 참고 : 벡터화되지 않음 : 지원되지 않는 데이터 유형. 벡터 라이 제이션을 시연하기 위해 더 나은 코드를 제안 할 수 있습니까? 클래스에 구성 요소 멤버가 포함되어 전체 클래스 데이터를 더 이상 4 개의 부동 소수점 형으로 만들지 못하는 문제입니까? 또는 point3vec.size() 루프가 상수가 아니기 때문에 벡터화가 허용되지 않습니다. –