OS를 Ubuntu 14.04로 업데이트하고 Gfortran 4.8.2로 재구성 한 후 병렬 포트란 프로그램이 두 배 이상 느리게 실행됩니다. 이전 OS에서 컴파일 할 때 gprof에 대한 프로파일 링 정보를 저장하지 않았기 때문에 코드의 어느 부분이 느려지는지 측정하는 것은 불행히도 더 이상 가능하지 않습니다 (OS를 다운 그레이드하지 않고).Ubuntu 14.04로 업데이트 한 후 재 작성된 Fortran 코드가 두 번 느립니다.
프로그램이 많은 행렬 반전을하기 때문에 모든 프로그램의 속도가 느려지는 방식으로 우분투 12와 14 사이에서 하나의 라이브러리 (LAPACK?) 또는 프로그래밍 인터페이스 (OpenMP?)가 업데이트되었다고 생각합니다. 나는 이것이 이미 누군가에게 알려진 일반적인 문제라고 생각한다. 우분투 12 또는 13으로 다시 다운 그레이드하는 것 외에도 빠른 포트란 코드로 돌아갈 수있는 해결책은 무엇입니까?
모든 라이브러리는 apg-get을 사용하는 저장소에서 설치되었으므로 시스템을 apt-get dist-upgrade
으로 업그레이드 할 때 업그레이드해야합니다. 그러나 실제로 최신 버전인지 확인하고 빌드 할 수는 있습니다. 기스로부터.
나는 Steabert의 조언에 따라 현재 코드를 프로파일 링했다 : gfortran -pg
으로 다시 컴파일하고 gprof
으로 성능을 점검했다. 이 프로그램은 성능 향상없이 f90으로 변환 된 일부 오래된 F77 서브 루틴을 호출 할 때 의심 스러웠습니다. 나는 제안 된 플래그로 플레이하고 하나의 프로그램 반복의 시간을 비교했다 : 플래그 -fno-aggressive-loop-optimizations
, -llapack
및 -lblas
은 중요한 성능 향상을 가져 오지 않았다. Flags -latlas
, -llapack_latlas
및 -lf77blas
은 라이브러리가 존재하고 올바른 경로에 있더라도 컴파일되지 않습니다 (/usr/bin/ld: cannot find -lf77blas
등). 컴파일러 플래그 재생과 성능 분석 모두 내 첫 번째 추측 (매트릭스 반전, LAPACK 등과 관련된 속도 저하가 잘못 되었음)이 잘못되었음을 암시합니다. 오히려 무거운 선형 대수학이 수행되지 않는 코드의 일부에서 느려지는 것 같습니다. objdump my_exec -s
사용하기 OS 업그레이드 전에 내 프로그램이 원래 gfortran 4.6.3으로 컴파일되었음을 알았습니다. 현재 gfortran (4.8.2)을 사용하는 대신. 이전 컴파일러로 코드를 컴파일하려고 시도 할 수있었습니다.
을이 대답하기 어려울 것이다. 병목 지점과 코드의 어느 부분이 느려졌는지 측정 했습니까? 그렇지 않다면 지금하십시오. –
물론 LAPACK과 BLAS를 직접 만들지 못하게하는 것은 없습니다. ATLAS 또는 OpenBLAS와 같은 최적화 된 BLAS 라이브러리를 사용해야합니다. 그들은 심지어 당신의 저장소에 존재할 수도 있습니다. –
편집 내용 : ** 어떤 ** 라이브러리를 사용하십니까? 무엇보다 BLAS 구현을 사용합니까? 패키지 관리자에서 "BLAS"를 검색하면 더 많은 패키지가 있습니다. –