인텔 포트란 컴파일러 : 컴파일시 최적화 팁


21

실험실에서 개인 경험을 시작하겠습니다. ifort 9 일과 10 일로 돌아가서, 우리는 최적화에 매우 적극적이었고, -O3 및 프로세서 특정 플래그 (예 : -xW -xSSE4.2)로 컴파일했습니다. 그러나 ifort 11부터는 다음과 같은 사실을 발견하기 시작했습니다.
1. 결과의 일부 불일치 (시맨틱이 유지되지 않았기 때문에)
2. -O2에 비해 더 작은 이득.

현재는 보통 -O2와 -xhost로 컴파일합니다. ifort 11에 대한 더 나은 제안이 있습니까? ifort 12로 전환 할 때이 변경 사항이 다시 변경됩니까? 미리 감사드립니다.


7
최적화가 모든 코드에 균일하게 도움이되는 것은 아닙니다. 따라서 더 나은 질문은 "어떤 컴파일러 최적화가 효과적인지 알기 위해 어떻게 코드를 프로파일 링 할 수 있는가"라고 생각합니다.
Matt Knepley

1
의미론이 보존되지 않았거나 무언가가 재정렬 되었기 때문에? 이것은 주제에서 약간 벗어나고 있지만 문제를 재현하는 코드 스 니펫을 보는 것이 좋습니다. 마음에 들지 않지만 컴파일러가 잘 생각하는 방식으로 무언가가 재정렬되었을 수 있습니다. 필자의 경험에 따르면 인텔 12는 이전 버전보다 벡터화 작업이 더 우수하므로 최신 버전으로 전환하면 더 많은 변경 사항이있을 것으로 기대합니다.
Bill Barth

의미가 보존되지 않았다고 말하는 것은 순서가 보존되지 않은 것과 같습니다. 어쨌든, 나는 내 질문이 (너무?) 일반적이라는 것을 알고 있으며, 구체적으로 생각하고 싶지 않았습니다. 인텔 10에 몇 가지 문제가 있었으며 일부는 컴파일러 버그였으며 일부는 설명되지 않았습니다. 11로, 우리는 안전하게 플레이하고 성능에 만족했습니다. 그러나 아마도 우리는 그것을 너무 안전하게 연주하고 있으며 커뮤니티에 조언이 있는지 알고 싶었습니다.
FrenchKheldar

답변:


16

우리는 강력하게 우리의 모든 사용자가 시작하는 것이 좋습니다 -O3 -xHost -ipo11 ifort 모두 부동 소수점 변환이 계산의 일부의 정밀도에 영향을 미치는 O3으로 활성화 특정이있는 경우 12 ifort, 특별히으로 떨어져 사람들을 설정할 수 있습니다 -fp-model precise -fp-model except(또는, 더 크게, -fp-model strict) 캐시에 대한 루프 차단, 루프 퓨전 및 언 롤링, 메모리 액세스 최적화와 같은 다른 최적화를 유지하면서 O3가 가능합니다.

개별 파일에서 부동 소수점 모델을 시도해보고 전 세계적으로 끄는 것이 아니라 차이점이있는 곳을 찾는 것이 좋습니다. ~ 15 %의 속도 충돌이 될 수 있으며 계산에 영향을 미치지 않는 곳에 유지할 수 있기를 원합니다. 정밀도가 어디에서 영향을 받는지 확실하지 않은 경우 해당 파일의 부동 소수점 모델 플래그를 켜거나 끄거나 반올림 모드로 재생할 수 있습니다 .

우리는 최근 x86 용 gnu 및 인텔 컴파일러에 중점을 둔 최적화 플래그에 대해 사용자들에게 간단한 대화를 나;습니다. 그 대화 에서 슬라이드를 볼 수 있습니다 .

우연히도, 우리는 코드에 대한 최적화 플래그를 선택하는 것에 대해 이야기하고 있지만 , 컴파일러가 루프를 벡터화하려고 시도한 곳이 어디인지 알기 위해 -vec-report 의 출력을 볼 가치가 있습니다 . 때로는 루프를 약간 변경하여 벡터화가 가능할 수 있습니다 (4 배 속도 향상). 보다 일반적인 -opt-report와 유사합니다 .


귀하의 답변이 마음에 들지만 테스트 사례 중 하나를 사용하여 다시 시도 -O3 -xhost -fp-model precise -fp-model except하여 30 % 속도 저하가 발생했습니다 . 프로파일 링과 -vec-report진행 상황을 다시 보려고합니다.
FrenchKheldar

2
-O2 -xhost 이상? 그 흥미 롭군요; 매우 이례적이지만 일어날 수 있습니다. 이런 경우 옵티마이 저는 속도를 향상시킬 것이라고 생각할만한 충분한 이유가 있지만 무언가를 악화시키는 것으로 나타났습니다. 일반적으로 매우 간단한 구조를 가진 과학 코드의 경우에는 발생하지 않습니다. 이와 같은 경우 Profile Guided Optimization ( software.intel.com/sites/products/documentation/hpc/compilerpro/…)이 도움이 될 수 있습니다.

5

IFort를 사용하여 Fortran에서 대규모 기술 응용 프로그램을 생산하는 회사에서 일하고 있습니다. 속도 (정확도를 유지하면서)가 주요 판매 지점이기 때문에 응용 프로그램은 성능이 매우 중요합니다.

우리는 항상 -O3으로 컴파일하며, -O3가하는 주요 작업은 루프 언 롤링과 프리 페치입니다. 나는 대부분의 과학적 컴퓨팅 응용 프로그램, 특히 루프 최적화에서 큰 이점을 얻을 것으로 생각합니다. 우리는 꽤 오랫동안 컴파일러 오류를 보지 못했습니다 (Mac에서 Ifort를 사용할 때 링커 오류가 몇 번 발생했습니다). 우리는 11.1.095를 사용합니다.

이게 도움이 되길 바란다.


4

이 답변이 아마도 너무 늦었 음을 알지만 공격적인 최적화를 위해서는 "-fast"옵션이 가장 쉬운 솔루션 인 것 같습니다. 매뉴얼 페이지에서 발췌 :

-fast
    Maximizes speed across the entire program.
    Description:
    This option maximizes speed across the entire program.

    It sets the following options:
     - On Linux* systems: -ipo, -O3, -no-prec-div, -static, and -xHost
     - On OS X* systems: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, and -xHost
     - On Windows*  systems:  /O3,  /Qipo,  /Qprec-div-,  and /QxHost

    NOTE: Option fast sets some aggressive optimizations that may not be appropriate for all
    applications. The resulting executable may not run on processor types different from the
    one on which you compile. You should make sure that you understand the individual optimi-
    zation options that are enabled by option fast.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.