我目前正在使用icc(版本13.1.0.146)来编译在Intel Xeon Phi协处理器上以纯模式运行的C程序 .
考虑以下两个代码片段:
// 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也会对“展开”版本进行矢量化 .
有没有办法告诉icc在编译Xeon Phi时矢量化基本块?
任何帮助表示赞赏 . 提前致谢!
1 回答
您在这里寻找的转换是“循环实现”,它从基本块创建短循环(迭代次数),循环体非常小 . 因此,通常不适合在英特尔(R)Xeon Phi(TM)协处理器上进行矢量化 . 这是因为我们希望循环体中有大量工作负载,因此创建向量操作数的开销不会在循环的总体执行时间内显着增加 .