2014-01-15 27 views
0

我目前使用icc(版本13.1.0.146)来编译在英特尔至强融核协处理器上以纯模式运行的C程序。如何使英特尔C编译器(icc)矢量化基本块?

考虑以下两个代码片段:

// 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也会将“展开”版本向量化。

当编译Xeon Phi时,是否有办法告诉icc向量化基本块?

任何帮助表示赞赏。提前致谢!

回答

0

您在此寻找的转换是“循环实现”,它从基本块创建短运行循环(迭代次数),循环体非常小。因此,通常不太适合在英特尔(R)Xeon Phi(TM)协处理器上进行矢量化。这是因为我们需要在循环体中占用大量工作量,因此创建向量操作数的开销在循环的整个执行时间中并不显着。

+0

我完全理解,如果编译器通常决定不将矢量化上面描述的代码由于工作量低。但是,我不明白为什么循环(与“展开”版本完全相同!)是矢量化的,而展开版本不是。但是,没关系,该项目现在已经完成;) – pkreutzer

相关问题