2013-08-29 3 views
0

Моя цель - условно присвоить значения массиву на основе значения неявного индекса, используя Cilk Plus Array Notation с компилятором Intel , версия 13.1.3 20130607.Можно ли использовать `__sec_implicit_index` внутри оператора блока if if с использованием нотации Cilk Plus Array?

Рассмотрим следующий код:

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?

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

Смежные вопросы