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]);
}
}
,看看環中的一個,而另一個沒有被量化。
見
-ftree-vectorizer-verbose=n
酷,這就是我一直在尋找。我假設默認值是n = 0? –嗯,我很驚訝文檔沒有明確地這樣說,但是,我假設是這樣,因爲除非明確使用該選項,否則不會輸出。 –
我用-ftree-vectorizer-verbose = 8編譯上面的(編輯的)代碼。我得到:60:注意:沒有矢量化:內循環計數不是不變的。第54行:注意:不是矢量化的:內循環計數不是不變的。 第44行:note:not vectorized:不支持的數據類型。你能建議更好的代碼來演示矢量化嗎?問題是我的類還包含組件成員,使整個類數據不再是4個浮點數的倍數? 或者它也聽起來像循環去point3vec.size()不允許向量化,因爲它不是一個常量? –