c++ - 是否可以使用 Cilk Plus 数组表示法在 `__sec_implicit_index` block 语句中使用 `if`?

标签 c++ arrays conditional-statements cilk cilk-plus

我的目标是根据隐式索引值有条件地为数组分配值,使用 Cilk Plus 数组表示法和英特尔 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;
        }
    }

最佳答案

这个例子是正确的。问题是 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;
    }
}

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

关于c++ - 是否可以使用 Cilk Plus 数组表示法在 `__sec_implicit_index` block 语句中使用 `if`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510912/

相关文章:

java - 我无法让我的程序打印出闰年

python - 提取/附加满足涉及多列的复杂条件的 Pandas 数据框行

c++ - 我们可以在一个 STL 列表中保存 2 种数据类型吗?

java - 安卓NDK : Calling Java functions from C++

c++ - 为什么堆而不是排序容器

arrays - 将各种大小的元胞数组的元胞数组整理成大小为 {1xN} 的元胞数组的元胞数组

sql - Postgresql:从选择更新列并在返回多行时添加条件

c++ - librdf raptor 处理对象中的整数值

Javascript 排序函数。按第一个排序,然后按第二个排序

c - 如何从txt文件C制作数组