2014-01-15 2 views
0

현재 Intel Xeon Phi 코 프로세서에서 기본 모드로 실행중인 C 프로그램을 컴파일하는 데 icc (버전 13.1.0.146)을 사용하고 있습니다.인텔 C 컴파일러 (icc)를 기본 벡터로 벡터화하는 방법은 무엇입니까?

는 다음과 같은 두 가지 코드 조각을 고려

// fragment 1 
array[pos]  += 1; 
array[pos + 1] += 1; 
array[pos + 2] += 1; 
array[pos + 3] += 1; 

// fragment 2 
for (int i = 0; i < 4; ++i) 
    array[i] += 1; 

불행하게도, 단지 루프가 자동 벡터화됩니다. 그러나 x86 플랫폼 용으로 컴파일하면 icc는 "언 롤링"버전을 벡터 라이 제이션합니다.

Xeon Phi 용으로 컴파일 할 때 icc가 기본 블록을 벡터화하도록 지시하는 방법이 있습니까?

도움을 주시면 감사하겠습니다. 미리 감사드립니다!

답변

0

여기에서 찾고자하는 변환은 기본 블록에서 짧은 실행 루프 (반복 횟수)를 생성하고 루프 본문이 매우 작은 "루프 구체화"입니다. 따라서 일반적으로 Intel (R) Xeon Phi (TM) Coprocessor에서 벡터화에 적합한 후보는 아닙니다. 이는 루프 피연산자 생성의 오버 헤드가 루프의 전체 실행 시간에 크게 나타나지 않도록 루프 본문에 중요한 워크로드가 필요하기 때문입니다.

+0

컴파일러가 일반적으로 낮은 작업량으로 인해 위에 묘사 된 코드를 벡터화하지 않기로 결정했는지 완전히 이해할 것입니다. 그러나, 나는 언 롤링 된 버전이 그렇지 않은데 왜 루프가 ("언 롤링 된"버전과 똑같은 것을!) 벡터화되었는지 이해할 수 없습니다. 하지만, 지금까지 프로젝트가 완료되었습니다.) – pkreutzer