2012-08-27 4 views
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]); 
    } 

} 

을, 다른 하나는하지 않지만 루프 중 하나가 벡터화됩니다 있는지 예를 들어, 나는 데모를 다음과 같이하고 싶습니다.

답변

1
+0

에서 쿨 -ftree-vectorizer-verbose=n를 참조하십시오. 나는 기본값이 n = 0이라고 가정하고 있습니까? –

+0

흠, 나는 명시 적으로 그렇게 말하지 않는데 놀랍지 만, 그렇습니다. 나는 그 옵션을 명시 적으로 사용하지 않는 한 출력이 없기 때문에 그렇게 생각합니다. –

+0

위의 (편집 된) 코드를 -ftree-vectorizer-verbose = 8로 컴파일했습니다. 60 : 참고 : 벡터화되지 않음 : 내부 루프 수가 불변하지 않음. line 54 : 참고 : 벡터화되지 않음 : 내부 루프 수가 불변하지 않음. 라인 44 : 참고 : 벡터화되지 않음 : 지원되지 않는 데이터 유형. 벡터 라이 제이션을 시연하기 위해 더 나은 코드를 제안 할 수 있습니까? 클래스에 구성 요소 멤버가 포함되어 전체 클래스 데이터를 더 이상 4 개의 부동 소수점 형으로 만들지 못하는 문제입니까? 또는 point3vec.size() 루프가 상수가 아니기 때문에 벡터화가 허용되지 않습니다. –