Fortran vs C++, 오늘날에도 Fortran은 수치 분석에서 여전히 우위를 점하고 있습니까?
C++ 컴파일러, 특히 인텔 컴파일러의 급속한 발전과 C/C++ 코드로 SIMD 함수를 직접 적용할 수 있는 능력으로 인해 Fortran은 여전히 수치 계산의 세계에서 실질적인 이점을 가지고 있습니까?
저는 응용 수학 출신이고, 제 직업은 엄격한 성능 요건을 가진 많은 수치 분석, 계산, 최적화 등을 수반합니다.
저는 Fortran에 대해 아는 것이 거의 없습니다.C/CUDA/matlab(처음에는 컴퓨터 언어라고 생각되는 경우)에 대한 경험이 있습니다.또한 매일의 작업에는 매우 큰 데이터 분석(예를 들어 10GB의 매트릭스)이 포함되어 있습니다.이 프로그램은 적어도 GPU의 2/3를 메모리 액세스에 소비하고 있는 것 같습니다(그래서 GPU를 보냅니다.프로그램의 성능을 향상시키기 위해 코드 중 적어도 일부에서 포트란 루틴을 시도해 볼 가치가 있다고 생각하시나요?
복잡성과 작업이 수반되기 때문에, 퍼포먼스면에서 큰 메리트가 있는 경우만, 그 루틴을 실시합니다.잘 부탁드립니다.
Fortran은 C++에 비해 엄밀한 에일리어싱 시멘틱스를 가지고 있으며, 수 십 년 동안 수치 성능에 대해 적극적으로 조정되어 왔습니다.CPU를 사용하여 데이터 어레이를 처리하는 알고리즘은 종종 Fortran 구현을 통해 이점을 얻을 수 있습니다.
프로그래밍 언어의 슈팅은 그다지 심각하게 받아들여지지 않습니다만, Fortran은 15개의 벤치마크 중 4개의 벤치마크(인텔 Q6600의 경우 1개의 코어)로 다른 어떤 단일 언어보다 속도가 뛰어납니다.Fortran이 뛰어난 벤치마크는 다음과 같은 수치적인 벤치마크임을 알 수 있습니다.
반례:
- k-뉴클레오티드 500% 느림(이 벤치마크는 Fortran의 강점이 아닌 보다 정교한 데이터 구조와 문자열 처리에 크게 초점을 맞춥니다)
또한 모든 구현 중에서 Fortran 코드가 평균적으로 각 벤치마크의 가장 빠른 구현에 가장 가깝다는 요약 페이지도 볼 수 있습니다.정량 바의 크기는 C++보다 훨씬 크지만 Fortran이 C++가 잘하는 일부 태스크에는 적합하지 않음을 알 수 있습니다.
따라서 다음과 같은 질문을 스스로에게 던져야 합니다.
이 기능의 속도가 Fortran에서 재실장하는 것이 제 시간을 들일 가치가 있을 정도로 중요합니까?
Fortran 학습에 대한 투자가 성과를 거둘 수 있을 정도로 성능이 중요합니까?
코드를 직접 작성하지 않고 ATLAS와 같은 라이브러리를 사용할 수 있습니까?
이러한 질문에 답하려면 코드 베이스와 비즈니스 모델에 대한 자세한 지식이 필요하기 때문에 답변할 수 없습니다.하지만 Fortran 구현은 C++ 구현보다 더 빠른 경우가 많습니다.
또 다른 결정 요인은 샘플 코드의 양과 사용 가능한 참조 구현의 양입니다.Fortran의 강력한 역사로 인해 다운로드 및 도서관 이동 중에도 사용할 수 있는 풍부한 숫자 코드가 있습니다.항상 그렇듯이 좋은 것을 찾기 위해서는 그것을 걸러내야 할 것이다.
또한 Fortran이 C++보다 훨씬 마스터하기 쉽다는 점도 주목할 필요가 있습니다.사실 Fortran은 일반 C보다 언어 사양이 짧고 구문이 단순합니다.당신은 그것을 매우 빨리 집어 들 수 있습니다.
즉, C++ 또는 Fortran을 학습하여 현재 안고 있는 특정 문제를 해결하는 데만 관심이 있다면(예를 들어 프로토타이핑 언어로 작성한 무언가의 병목 현상을 가속화하는 것), Fortran이 더 나은 투자 수익률을 제공할 수 있습니다.
일반적으로 Fortran 코드는 매트릭스 및 벡터 유형 연산에 더 적합합니다.그러나 컴파일러에 힌트/제안을 전달하여 유사한 품질의 벡터 명령을 생성함으로써 c/c++ 코드로 유사한 성능을 생성할 수도 있습니다.좋은 부스트의 한 가지 방법은 어레이 객체인 입력 변수 간에 메모리 에일리어스를 상정하지 않는 것이었습니다.이렇게 하면 컴파일러는 ILP용 내부 루프 언롤링 및 파이프라이닝을 적극적으로 실행할 수 있습니다.여기서 부하를 오버랩하고 오른쪽 프리페치를 사용하여 루프 반복에 걸쳐 동작을 저장할 수 있습니다.
The complete and correct answer to your question is, "yes, Fortran does hold some advantages".
C++ also holds some, different, advantages. So do Python, R, etc etc. They're different languages. It's easier and faster to do some things in one language, and some in others. All are widely used in their communities, and for very good reasons.
Anything else, in the absence of more specific questions, is just noise and language-war-bait, which is why I've voted to close the question and hope others will too.
Fortran is just naturally suited for numerical programming. You tend to have a large amount of numbers in such programs, typically arranged arrays. Arrays are first class citizens in Fortran and it is often pretty straight forward to translate numerical kernels from Matlab into Fortran. Regarding potential performance advantages see the other answers, that cover this quite nicely. The baseline is probably you can create highly efficient numerical applications with most compiled languages today, but you might jump through some loops to get there. Fortran was carefully designed to allow the compiler to recognize most spots for optimizations, due to the language features. Of course you can also write arbitrary slow code with any compiled language, including Fortran. In any case you should pick the tools as suited. Fortran suits numerical applications, C suits system related development. On a final remark, learning Fortran basics is not hard, and it is always worthwhile to have a look into other languages. This opens a different view on problems you want to solve.
ReferenceURL : https://stackoverflow.com/questions/13078736/fortran-vs-c-does-fortran-still-hold-any-advantage-in-numerical-analysis-thes
'programing' 카테고리의 다른 글
액션 또는 변환 내에 nameSpaceed vuex 모듈의 이름을 가져올 수 있는 방법이 있습니까? (0) | 2022.08.16 |
---|---|
vuejs 컴포넌트에서 npm 패키지를 생성하여 로컬에서 테스트하는 올바른 방법은 무엇입니까? (0) | 2022.08.16 |
는 방법 자바의 QuickTools목록을 반복할. (0) | 2022.08.16 |
vue.js 컴포넌트에서 css에서 소품을 사용하는 방법 (0) | 2022.08.16 |
Java에서의 스태틱블록 (0) | 2022.08.16 |