編譯器 上方迴圈難以使用SIMD指令向量化,其主要原因為何?for (i = 1; i < n; i++) a[i] = a[i - 1] + b[i]; A因為需要前一次重複的結果 a[i-1],無法同時計算 B因為陣列元素的型別是整數,所以SIMD指令無法計算 C因為若迴圈次數 n 在編譯時未知,就完全無法向量化 查看答案與解析 正確答案:A. 因為需要前一次重複的結果 a[i-1],無法同時計算 向量化是以一條SIMD指令同時進行例如4個元素的計算。在這個迴圈中,求 a[i] 需要前一個 a[i-1] 的結果,因此無法同時計算 a[1]~a[4]。像這樣橫跨重複的相依(迴圈攜帶相依)存在時,就無法直接向量化。整數也可以用SIMD計算,次數在執行時才決定的情況,也可以另外處理餘數部分來進行向量化。 A. 正確。因為相依於前一個結果,所以無法同時計算。B. 整數的計算也可以用SIMD指令進行。C. 即使次數在執行時才決定,只要另外處理餘數,仍可向量化。