我正在使用intel-cc編譯一些C++代碼並使用-Wall選項,它似乎是向量化了很多循環。我正在假設這對現在的表現有好處。展開循環的向量化
現在我的問題是這樣的;相反,如果for循環我已經展開,所以我們有例如
a[0] = b[0] + 1;
a[1] = b[1] + 1;
a[2] = b[2] + 1;
,而不是
for(int i=0;i<3;++i) a[i] = b[i] + 1;
可以在編譯器仍然向量化這個代碼?
此外,如果我使用相反的參考訪問元素,編譯器是否有任何希望認識到兩者是等價的?例如。
int &x, &y, &z;
x = a[0]; y = a[1]; z = a[2];
然後用x,y和z代替a。
任何答案非常感謝!提前致謝。
'-Wall'選項是關於生成警告,而不是向量化代碼。 – interjay
是的,我知道,但它會告訴你什麼時候是矢量化的,如果你有這個選項的話。雖然也許它告訴你,無論如何? – Dan
Fwiw,GNU向量化,IIRC。真正的問題是,爲什麼你要手動優化代碼,然後看看編譯器是否會設法解決你真正想做的事情?不要手動優化,直到你的分析器告訴你 – sehe