我的目标是根据隐式索引值有条件地为数组赋值,使用Cilk Plus Array Notation和Intel的icc
编译器,版本13.1.3 20130607
。
请考虑以下代码:
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数组表示法完成下面条件代码的行为?
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;
}
}
答案 0 :(得分: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;
}
}
它当然失去了数组符号的符号方便性。