Compilation 变量累加循环的矢量化

Compilation 变量累加循环的矢量化,compilation,vectorization,compiler-optimization,Compilation,Vectorization,Compiler Optimization,我用icc编译了以下循环 for (int i = 0; i < arrays_size; ++i) { total = total + C[i]; } 有人能解释一下这意味着什么以及如何将这个循环矢量化吗?根据total和C[i]的类型,您可以利用加法和首和4或8(或更多)小计的关联性和交换性 int subtotal[4] = {0,0,0,0}; for (int i = 0; i < arrays_size; i+=4) { for(int k=0; k

我用icc编译了以下循环

for (int i = 0; i < arrays_size; ++i) {
      total = total + C[i];
}

有人能解释一下这意味着什么以及如何将这个循环矢量化吗?

根据
total
C[i]
的类型,您可以利用加法和首和4或8(或更多)小计的关联性和交换性

int subtotal[4] = {0,0,0,0};
for (int i = 0; i < arrays_size; i+=4) {
    for(int k=0; k<4; ++k)
        subtotal[k] += C[i+k];
}
// handle remaining elements of C, if necessary ...
// sum-up sub-totals:
total = (subtotal[0]+subtotal[2]) + (subtotal[1]+subtotal[3]);
int小计[4]={0,0,0};
对于(int i=0;iint subtotal[4] = {0,0,0,0};
for (int i = 0; i < arrays_size; i+=4) {
    for(int k=0; k<4; ++k)
        subtotal[k] += C[i+k];
}
// handle remaining elements of C, if necessary ...
// sum-up sub-totals:
total = (subtotal[0]+subtotal[2]) + (subtotal[1]+subtotal[3]);