과학기술자를 위한 포트란 90 (FORTRAN 90), MPI (병렬처리), 파이썬 (Python) by 바죠

물리학자를 위한 포트란 90 (FORTRAN 90), MPI (병렬처리), 파이썬 (Python) ---> 과학기술자를 위한 포트란 90 (FORTRAN 90), MPI (병렬처리), 파이썬 (Python)

제 경험을 바탕으로 정리한 포트란 90, MPI, 파이썬에 대한 노트들이라고 생각하시면 좋을 것 같습니다. 제 경험들을 간략하게 항목별로 적어 보았습니다.
여러 언어들을 몇가지 관점에서 비교한 표가 위키에 있었다.
------------------------------------
http://en.wikipedia.org/wiki/Comparison_of_computer_shells
http://en.wikipedia.org/wiki/Comparison_of_programming_languages

Fortran --> Scientific and numeric applications, Runtime efficiency, Simple syntax
Python --> Application, Educational, Scripting Simplicity, Readability, Expressiveness, Modularity

포트란 90 (FORTRAN 90)

1990년대, 누군가 저에게, 아직도 포트란을 사용하세요?라고 묻더군요. 신기한듯. 그래서 대답했습니다. 다른것을 잘 몰라서. 조금은 쑥스럽더군요. 다른 사람들은 C++, 자바, 플래시도 하는데. 그래도 할 말은 있더라구요. 아 그게, 포트란을 읽을 줄 모르면 연구가 안 되는 상황이죠. 이 말은 좋은 말이다. C++을 할 줄 알아도, 포트란을 읽을 능력은 갖추어야 한다. 많이 사용되어온 언어이니깐요.

포트란 77 프로그래밍은 오랜 연습기간을 통해서 할줄 알았습니다. 물론, 실전에서 바로 배웠습니다. 몇년간의 경험으로 포트란77에는 아주 익숙해졋습니다. 1996년 정도 되니깐 주변에서 포트란 90을 사용하기 시작하더군요. 그전에는 한국의 슈퍼컴 센터에서 조차도 컴파일러를 배치하지는 않는 상황이었죠.

포트란 90 처음 사용할 때는 매우 제한적으로 사용했습니다. 처음에는 자동으로 메모리 공간을 할당하는데 사용했죠. 포트란 90 사용하면 배열처리 매우 간결해지기 시작합니다. 배열처리, 지원하는 여러 가지 기본 함수들 사용을 했습니다. 프로그램이 간결해지더군요. 프로그래밍하는데 상당한 시간적 성과를 보았다고 생각합니다.

나중에는 포트란 90의 핵심 기능인 "모듈 기능"을 사용했습니다. 프로그램 유지 보수가 쉬워지고 안정성/확장성이 자동으로 유지되더군요. 해당 연구에서도 진도가 빨리나가지는 것이 확실히 보이더군요. 모듈 기능은 다른 사람들이 만든 프로그램을 보고 배우는것이 더 좋을 듯 합니다. 이론적으로만 이야기하는 모듈 설명에는 많은 한계가 있다고 봅니다. 간단한 모듈이론을 읽고 바로 예제로 들어가는것이 좋을듯 합니다. 포트란77을 사용하신 분이라면 매우 쉽게 이해하시리라 생각합니다. 물론, C++를 아시는 분들은 더욱더 쉽게 이해하시겠죠.

포트란 언어의 핵심 요소는 계산 속도에 있습니다. C 언어와 더불어서 가장 우수한 실행 속도를 자랑합니다. 병렬 컴퓨팅까지 염두에 두고 있다면 당연히 포트란, C 언어를 사용해야합니다. 과학기술에서 실행 속도는 매우 중요합니다.
John Backus


MPI (Message Passing Interface: 병렬처리 라이버러리)

시간이 지나니깐? 1997년 쯤 되는깐, 병렬컴퓨팅이 서서히 바람이되어 제 곁을 스치기 시작합디다. 야, 이것 언제 배워, 언제, 제대로 한 번 신나게 사용해보다. 그리고, 내가 사용할 병렬컴퓨터는 어디에 있냐? 까마득하더군요. 지금 2005년, 신나게 사용하고 있습니다. MPI는 병렬 계산을 도와주는 함수들입니다. Fortran, C, C++ and Ada program에서 불려질 수 있는 함수들 입니다. 컴퓨터 노드간 통신의 사실상의 표준(de facto standard)이다.

1998년 초에 한국에도 cray-t3e 라고 해서 병렬 컴퓨터가 들어 왔죠. 각 노드는 125 Mbyte로 기억하고 있습니다. 전체 노드수가 128 노드인가요? 병렬 컴퓨팅 공부하기 시작했습니다. 당시에는 해당 자료도 인터넷에 잘 없던 시기였습니다. 결국 슈퍼컴퓨터 연구소에서 교육까지 받았습니다. 그 교육 잘 받았다고 생각합니다. 미국에서는 제가 연구하는 분야에서는 1994년 정도부터 집중적으로 병렬 처리가 연구되기 시작하더군요. 제 연구 분야는 전자구조 연구 분야입니다.

현대 컴퓨팅의 기술의 핵심은 병렬처리라고 생각합니다. www.top500.org에서 확인 할 수 있듯이 슈퍼컴들의 대부분이 병렬컴퓨터들로 바뀌고 있습니다. 저가의 cpu를 사용하는 경우가 많습니다. cpu의 성능은 계속해서 발전하고 있습니다. 통신 장비의 가격도 계속해서 저렴해 질것이 확실합니다. 요즘은 64비트 컴퓨터를 이용하고 리눅스(64비트 오에스)를 채택한 병렬컴퓨터들이 널리 이용되고 있습니다.

병렬처리가 필요없는 프로그램들이 무지하게 많습니다. 그런데 정말 시간이 많이 소요되는 프로그램은 심각하게 프로그램의 병렬화를 생각해야 합니다. 이전에 무시되던 알고리듬이 병렬화에 유리하다는 특성 때문에 다시 각광받을 수 있습니다. 효율성 높은 병렬 컴퓨팅은 될수 있는 한 컴퓨터간의 통신을 자제하는 것으로 부터 시작합니다. 아마도 이것이 병렬 프로그램의 핵심일것입니다. 계산은 무지하게 빠른데 컴퓨터간 통신은 상대적으로 너무 느린것이 현실입니다. 그만큼 cpu가 발달된 세상에 우리가 살고 있습니다.

컴퓨터 간의 통신은 크게 두가지에 의해서 제한을 받습니다. LATENCY 그리고 BANDWIDTH. 컴퓨터간 통신에는 통신을 시작하기 위해서 기다리는 시간이 불가피하게 필요합니다. 이것이 LATENCY입니다. 그 다음은 초당 보내고 받을 수 있는 데이터의 양 이것이 bandwidth입니다. LATENCY는 작은 값일 수록 좋고 BANDWIDTH는 높은 수일수록 좋습니다. 당연히 고가의 통신 장비는 환상적으로 작은 latency 값을 줍니다. 따라서, 컴퓨터간 정보 교환이 아주 많은 병렬 계산에서는 필수 불가결한 장비입니다. 당연히 고가입니다. 사람들 사이에 전화 걸 때 전화 바로 받지 못하고 신호음 간다음에 받지 않습니까 이게 바로 latency입니다. 당대에 최고의 계산 능력을 발휘하는 컴퓨터를 슈퍼컴이라 부른다. 오늘날 슈퍼컴들은 아래 그림에서 처럼 대부분 병렬 컴퓨터가 되고 말았다. 다루고 있는 문제의 특성에 맞는 병렬화 과정이 필요하다. 특정한 입력값들의 영역에서는 병렬화에 문제가 없는 부분이라고 하더라도 입력값들의 범위가 달라지면서 load balancing이 허물어지는 경우가 종종있다.
http://www.top500.org/


파이썬 (Python) 

2001년 쯤되니까. 쉘 스크립트를 모르는것이 두고 두고 마음에 걸립디다. 그래서 배운것이 파이썬. 쉘 스크립트 보다 훨씬 많은것을 할 수 있죠. 보다 일반적이고 최신 언어입니다. 이왕 늦은 김에 펄(PERL)을 배우기를 포기하고 더 늦게 나온, 최신의 언어 파이썬을 배우기로 했습니다. 유명 프로그램들이 파이썬을 사용하는것을 보고 파이썬을 선택했다고 해도 과언은 아닙니다. 사실 이것을 먼저 배웠어야 했는지도 모릅니다. 너무 늦게 배웠다는 생각이 듭니다. 파이썬은 계산 그 계산 속도에서는 매우 느린 언어입니다. 하지만, very-high-level 언어로 분류되어서 매우 인간에게 가까운 언어입니다. 누구나 쉽게 사용할 수 있는 컴퓨터 언어입니다. 이미 개발되어 있는 모듈들을 잘 불러오면 매우 쉽게 다양한 일들을 할 수 있습니다.
 
http://www.python.org/






----------------------------------------------------------------------------------------------------------
슈퍼컴퓨터 1호기 : 1988년도에 도입된 국내 최초의 슈퍼컴퓨터
-------------------------------------------------------------

http://www.personal.psu.edu/faculty/h/d/hdk/fortran.html
Fortran Resources
and
Fortran 77/90/95 Compilers for Windows and Linux

--------------------------------------------------------------------------------------------------------------------
http://flash.uchicago.edu/~tomek/htmls/num_meth.html
Numerical methods for Fortran programmers


핑백

덧글

댓글 입력 영역

최근 포토로그



MathJax