2013-08-29 21 views
0

我的目标是使用Cilk Plus阵列符号与英特尔的icc编译器版本13.1.3 20130607,基于隐式索引值为阵列有条件地赋值。是否可以在使用Cilk Plus数组符号的`if`语句中使用`__sec_implicit_index`?

考虑下面的代码:

T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    if(test[:] < 5) { 
     test[:] = 10 - __sec_implicit_index(0); 
    } 

此代码编译罚款,但是当我尝试运行它,我得到以下错误:

undefined symbol: __sec_implicit_index 

注意虽然这可能看起来像链接错误,它不是,因为下面的代码编译并运行良好(条件已被删除)

T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
test[:] = 10 - __sec_implicit_index(0); 

所以,我的问题:是否有可能使用Cilk Plus Array Notation来完成下面的条件代码的行为?

T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    for(int i = 0; i < 10; i++) { 
     if(i < 5) { 
      test[i] = 10 - i; 
     } 
    } 

回答

1

该示例是正确的。问题是icc 13.1.3中的一个错误。 icc 14.0 beta正确编译并为我执行了这个例子。

对于icc 13.1.3,我发现#pragma simd在一般情况下更可靠,作为指示向量化许可的方式。有了它,你的例子看起来像:

T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
#pragma simd 
for(int i = 0; i < 10; i++) { 
    if(i < 5) { 
     test[i] = 10 - i; 
    } 
} 

它当然失去了数组符号的符号方便。

+0

谢谢,太好了!另外,感谢关​​于'#pragma simd'的提示!我现在记得在文档中浏览过这些内容,但完全忘记了它。 – naitsirhc

相关问题