Можно ли использовать `__sec_implicit_index` внутри оператора блока if, используя нотацию массива Cilk Plus?

Моя цель состоит в том, чтобы условно присвоить значения массиву на основе неявного значения индекса, используя обозначение массива Cilk Plus с 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 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;
}
}

0

Решение

Пример верный. Проблема в баге в icc 13.1.3. Бета-версия icc 14.0 правильно скомпилирована и выполнена для меня.

Для 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;
}
}

Это, конечно, теряет удобство обозначения массива.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]