2013-08-29 3 views
0

목표는 암시 적 인덱스 값을 기반으로 배열에 값을 조건부로 할당하는 것입니다. 인텔의 icc 컴파일러 버전 13.1.3 20130607에서 Cilk Plus Array Notation을 사용합니다.Cilk Plus Array Notation을 사용하여`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