首页 文章

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

提问于
浏览
0

我目前正在使用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

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

相关问题