2012-08-27 76 views
0

我閱讀(http://software.intel.com/zh-cn/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:注意:沒有矢量化:內循環計數不是不變的。第54行:注意:不是矢量化的:內循環計數不是不變的。 第44行:note:not vectorized:不支持的數據類型。你能建議更好的代碼來演示矢量化嗎?問題是我的類還包含組件成員,使整個類數據不再是4個浮點數的倍數? 或者它也聽起來像循環去point3vec.size()不允許向量化,因爲它不是一個常量? –