태그 보관물: fortran

fortran

인텔 포트란 컴파일러 : 컴파일시 최적화 팁 돌아가서, 우리는 최적화에 매우 적극적이었고,

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

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



답변

우리는 강력하게 우리의 모든 사용자가 시작하는 것이 좋습니다 -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와 유사합니다 .


답변

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

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

이게 도움이 되길 바란다.


답변

이 답변이 아마도 너무 늦었 음을 알지만 공격적인 최적화를 위해서는 “-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.

답변