2014-01-15 83 views
0

我目前使用icc(版本13.1.0.146)來編譯在英特爾至強融核協處理器上以純模式運行的C程序。如何使英特爾C編譯器(icc)矢量化基本塊?

考慮以下兩個代碼片段:

// fragment 1 
array[pos]  += 1; 
array[pos + 1] += 1; 
array[pos + 2] += 1; 
array[pos + 3] += 1; 

// fragment 2 
for (int i = 0; i < 4; ++i) 
    array[i] += 1; 

不幸的是,只在循環自動量化。但是,如果我爲x86平臺編譯,icc也會將「展開」版本向量化。

當編譯Xeon Phi時,是否有辦法告訴icc向量化基本塊?

任何幫助表示讚賞。提前致謝!

回答

0

您在此尋找的轉換是「循環實現」,它從基本塊創建短運行循環(迭代次數),循環體非常小。因此,通常不太適合在英特爾(R)Xeon Phi(TM)協處理器上進行矢量化。這是因爲我們需要在循環體中佔用大量工作量,因此創建向量操作數的開銷在循環的整個執行時間中並不顯着。

+0

我完全理解,如果編譯器通常決定不將矢量化上面描述的代碼由於工作量低。但是,我不明白爲什麼循環(與「展開」版本完全相同!)是矢量化的,而展開版本不是。但是,沒關係,該項目現在已經完成;) – pkreutzer

相關問題