2016-07-30 172 views
-1

我有兩個以下循環:矢量循環中

For i=1…n 
    a[i] = a[i+1] + 1 

For i=1…n 
    b[i] = b[i-1] + 1 

現在考慮的是,陣列初始化,其中哪些可向量化? 如果數組未初始化,答案也會改變,因爲如果這些值未初始化,那麼在第一個循環中需要[i + 1]才能計算出它。

edit1:這裏的循環試圖一次複製4個字節,如果我想一次複製16個字節可以完成嗎?它有任何約束嗎?

+0

這不是C++代碼,無論你在問什麼。 –

+0

爲了記錄你試圖確定一個編譯器會做什麼或爲什麼會這樣做,因爲後者是一個作業問題。 – West

+0

如果你看看自動矢量化文章,它有選擇。 – West

回答

2
void test2(int* A, int Length){ 
for (int i = 0; i+1 < Length; i++) { 
     A[i] = A[i+1] + 1; 
    } 
} 

void test3(int* A, int Length){ 
for (int i = 1; i < Length; i++) { 
     A[i] = A[i-1] + 1; 
    } 
} 

給出結果

vector.cpp:12:14: remark: vectorized loop (vectorization width: 4, interleaved count: 2) [-Rpass=loop-vectorize] 
     A[i] = A[i+1] + 1; 
      ^
vector.cpp:18:17: remark: vectorized loop (vectorization width: 4, interleaved count: 2) [-Rpass=loop-vectorize] 
     A[i] = A[i-1] + 1; 

使用此命令行 clang++-3.8 -O3 -Rpass=loop-vectorize vector.cpp 所以根據鐺他們都自動上O3

這裏開始Auto-Vectorization

編輯:更妙here是一個博客文章,其範例爲