如何使英特尔C编译器(icc)矢量化基本块?

时间:2014-01-15 10:44:33

标签: vectorization icc

我目前正在使用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 个答案:

答案 0 :(得分:0)

您在这里寻找的转变是&#34;循环实现&#34;从基本块创建短运行循环(迭代次数),循环体非常小。因此,通常不适合在英特尔(R)Xeon Phi(TM)协处理器上进行矢量化。这是因为我们希望循环体中有大量工作负载,因此创建矢量操作数的开销不会显着地显示在循环的总体执行时间内。