Program Tip

Fortran이 과학 컴퓨팅에 사용되는 이유는 무엇입니까?

programtip 2020. 12. 15. 19:43
반응형

Fortran이 과학 컴퓨팅에 사용되는 이유는 무엇입니까?


Fortran이 여전히 과학 컴퓨팅에 많이 사용된다는 것을 읽었습니다. Fortran에 이미 많이 투자 된 코드의 경우 이것은 나에게 의미가 있습니다.

그러나 새로운 프로젝트를 위해 다른 현대 언어보다 Fortran을 사용해야하는 이유가 있습니까? Fortran에 더 많이 사용되는 언어 (C ++, Java, Python, Ruby 등)에 비해 과학 컴퓨팅에 훨씬 더 적합한 언어 설계 결정이 있습니까? 예를 들어, 내가 언급 한 다른 언어에 비해 컴파일러에서 수치 최적화를 훨씬 더 많이 허용 할 수있는 Fortran의 특정 언어 기능이 있습니까?


Fortran은 좋든 나쁘 든 과학적 수치 계산을 위해 특별히 설계된 유일한 주요 언어입니다. 배열 처리는 전체 배열과 슬라이스 모두에서 간결한 배열 작업으로 훌륭하며 matlab 또는 numpy와 비슷하지만 매우 빠릅니다. 이 언어는 실수로 느린 코드를 작성하는 것을 매우 어렵게 만들기 위해 신중하게 설계되었습니다. 표준 예와 같이 앨리어싱이있을 수 있는지 즉시 알 수 있도록 포인터가 제한되어 있으므로 최적화 프로그램이 사용자의 마을로 이동할 수 있습니다. 암호. 현재의 화신에는 coarray fortran과 같은 것이 있으며 동시 및 forall을 언어에 내장하여 분산 메모리 및 공유 메모리 병렬 처리 및 벡터화를 허용합니다.

Fortran의 단점은 주로 언급 된 장점 중 하나의이면입니다. Fortran은 매우 긴 역사를 가지고 있습니다. 장점 : 수많은 훌륭한 도서관. 단점 : 수많은 역사적 수하물.

많은 숫자 처리를해야하는 경우 Fortran은 최고의 선택 중 하나로 남아 있습니다. 이것이 바로 전 세계 슈퍼 컴퓨팅 센터에서 실행되는 가장 정교한 시뮬레이션 코드가 여기에 쓰여진 이유입니다. 그러나 물론 웹 브라우저를 작성하는 것은 끔찍하고 끔찍한 언어가 될 것입니다.


저에게 주된 이유는 멋진 배열 표기법과 과학적 코드를 더 쉽게 작성하고 디버깅 할 수있는 많은 다른 디자인 결정 때문입니다. 일반적으로 관련 작업 (어레이 작업)에 대한 성능 측면에서 최선의 선택이라는 사실도 손상되지 않습니다. :)

솔직히 저는 Fortran의 실제 경쟁자로 인용 된 대부분의 언어를 고려하지 않을 것입니다. Java와 Ruby는 편리함과 성능 측면에서 훨씬 뒤쳐져 있지만 C ++는 너무 복잡하고 까다로워 주요 업무를 수행하는 모든 사람에게 추천 할 수 없습니다. 지난 몇 년 동안은 C ++로 일상적인 프로그래밍이 아니 었습니다. numpy를 사용하는 Python은 옵션이 될 수 있습니다. 나는 개인적으로 언어의 열렬한 팬은 아니지만 numpy를 정기적으로 사용하고 꽤 만족해하는 많은 사람들을 알고 있습니다.

내가 본 진정한 경쟁은 이것들이 아니라 Matlab, R 및 유사한 언어에서 많은 표준 라이브러리와 결합 된 유사한 편의성을 제공합니다. 다행히도 일반적으로 R 또는 Matlab에서 프로젝트를 시작하고 나중에 Fortran에서 성능에 중요한 부분을 작성할 수 있습니다.


완전히 새로운 프로젝트는 거의 없습니다. 과학적 컴퓨팅에만 국한된 것인지는 모르겠지만, 적어도이 분야에서는 다른 그룹 / 사람이 생성 한 기존 (과학적) 모델을 기반으로 애플리케이션을 구축하는 경향이 있습니다. 원하든 원하지 않든 항상 어느 정도의 레거시 코드를 처리해야합니다.

Fortran은 많은 과학자들과 함께 배웠고 그들이 필요로하는 많은 라이브러리가 구현 된 것입니다. 그들 중 상당수는 컴퓨터 과학 자나 IT 전문가, 더 많은 계산 과학자 가 아닐 수도 있습니다 . 그들의 주된 목표는 거의 컴퓨팅이 아니며 과학이 먼저입니다. 많은 프로그래머가 기회가있을 때마다 (여가 시간 포함) 새로운 프로그래밍 언어 또는 프레임 워크를 배우는 경향이 있지만, 대부분의 과학자는 그 시간을 사용하여 과학에 관한 새로운 아이디어를 탐구합니다.

Fortran (또는 다른 언어)에 대해 교육을 받고 비슷한 상황에있는 사람들에게 둘러싸여있는 도메인 전문가는이 분야에서 벗어날 동기가 없습니다. 성능 측면에서 다른 언어가 Fortran만큼 좋을 수 있다는 것뿐만 아니라 훨씬 더 나아질 필요가 있습니다 . 현재 가지고 있고 알고있는 것에서 멀어 질 좋은 이유가 있어야합니다.

그것은 또한 어느 정도 "악의적 인"원입니다. 저는 Java와 Fortran 간의 비교가 조금 어려웠습니다. 단순히 많은 Java 과학 응용 프로그램이 Java 방식으로 프로그래밍되지 않았기 때문입니다. Java Grande 벤치 마크 응용 프로그램 중 일부는 Fortran 프로그램이 C 프로그램으로 바뀌고 Java 프로그램으로 복사 / 붙여 넣기 / 조정 된 것처럼 보입니다 (방법에서 배열의 길이를 배열 자체 옆에 추가 매개 변수로 전달하면 단서를 얻을 수 있습니다. 나는 잘 기억한다). 이로 인해 Java (예 :) 는 성능이 향상 되고 있음에도 불구 하고 과학계에서 큰 명성을 얻지 못했습니다.. 그 결과, 예를 들어 HPC 전문가와 Java 전문가간에 겹치는 부분이 거의 없습니다. 하드웨어 공급 업체 또는 라이브러리 구현 자조차도 사용자의 요구가 거의 없어 지원이 거의 제공되지 않아 잠재적으로 다른 언어로 이동하려는 사용자를 방해합니다.

이것은 동일한 (또는 다른) 과학자가 다른 목적 (예 : 워크 플로 관리, 데이터 관리, Matlab을 사용한 더 빠른 모델링, Numpy 등)을 위해 다른 언어를 사용하는 것을 배제하지 않습니다.


내가 이해하는 바와 같이, 사용 가능한 알고리즘을 가장 효율적으로 구현 한 라이브러리가 있으므로 언어의 한계에도 불구하고 Fortran이 이러한 종류의 작업에 인기를 얻습니다.


한 가지 이유는 어레이가 어떻게 구성되었는지에 있습니다. 대부분의 다른 언어와 달리 열 전공입니다. 이것은 그들의 계산을위한 더 빠른 계산을 제공합니다.

참조 URL : https://stackoverflow.com/questions/8997039/why-is-fortran-used-for-scientific-computing

반응형