parallel programming

고성능 컴퓨팅 환경에서의 병렬 프로그래밍의 성능 최적화 2

hongiiv 2007. 2. 23. 16:48
반응형
들어가는말
단지 이미 만들어진 병렬 프로그램에 대해서 성능을 향상 시킨다는 의미만이 아니라 기존의 시리얼 프로그램에 대해서 병렬화하거나 병렬화 프로그램을 새롭게 작성하고자 할 경우 성능최적화, 성분분석, 프로그래밍 관련도구에 대한 지식은 많은 도움이 된다. ^^ 될 것이다.

지금까지의 병렬 프로그래밍 관련 포스트들은 다음과 같다.
리눅스 병렬 프로그래밍 - mpich
리눅스 병렬 프로그래밍 - pbs & loadleveler
고성능 컴퓨팅 환경에서의 병렬 프로그래밍의 성능 최적화

실제 병렬프로그래밍 기법이나, 병렬프로그램을 수행하기 위한 환경은 윗글들을 보면 도움이 될것이다. 여기서는 꼭 병렬 프로그램이 아니더라도 성분분석과 관련된 부분에 대해 언급하고자 한다.

솔직히 위에서 언급한 내용은 표면상의 이유이고 실제로는 매년 슈퍼컴퓨팅 경진대회를 KISTI에서 주최하고 있다. 공식행사명은 Supercomputing Challenger Award로 국내 슈퍼컴퓨팅 응용 연구개발 분야에서 슈퍼컴퓨팅 기술 활용 능력이 탁월한 연구자를 발굴하고, 관련 분야의 활성화 및 선도를 위해 개최되고 있는 행사에 한번 나가 보고 싶은 욕망 때문이다.

참가 항목은 크게 (1)성능 최적화 부문 (2) 고성능 컴퓨팅 부문으로 나뉘어 있다. 내가 관심을 갖는 부문은 고성능 컴퓨팅 부문으로 병렬화 및 최적화에 의한 최대성능을 구현해 내는 부문이다.

제출해야하는 서류는 참가신청서, 확인서, 코드 설명서, 슈퍼컴퓨터 시험 사용 약정서, 성능시험 결과표이다. 여기서 성능시험 결과표를 작성하기 위해서 hpmcount라는 유틸리티를 통해 측정된 값을 통해서 얼마만큼의 성능향상이 있었는지에 대한 내용을 제출하게 되어 있다.

그러나, 지금 당장 우리시스템에는 hpmcount가 없기 때문에 이를 대체할 만한 유틸리티를 필요로한다. 그래서 지금 이글을 쓰고 있는 것이다.

(1) 성능 시험 결과표 작성하기
병렬프로그램을 단일 프로세서에서 수행한 결과와 32프로세서에서 수행한 결과를 각각 제출하게 된다. 이를 바탕으로 Mflops(Mega FLoating-point Operation Per Second)값과 32CPU에서의 speedup({Wall clock time on 1 CPU}/ {wall clock time on 32 CPUs}을 가지고 평가를 하게 된다. 물론 단순한 성능 결과만이 아니라, 계산의 유용성, 사용기법의 적정성과 같이 병렬프로그램 자체가 학문적으로나 기술적으로 유용하고 의미있는 계산을 하는지, 문제 해결을 위해 적절한 알고리즘을 사용했는지에 대한 심사도 고려한다.

그럼 실제 hpmcount를 통해서 성능 시험 결과표를 작성하는 방법과 hpmcount를 대체하는 프로그램을 통해서 작성하는 방법을 예제의 병렬 프로그램을 통해서 알아본다.

(2) 성능분석 도구
1) hpmcount
IBM HPM(Hardware Performance Monitor) Toolkit은 물리적인 프로세서내의 하드웨어 이벤트 카운터에서 사용자가 필요한 정보를 얻을 수 있도록 해주는 라이브러리와 유틸리티의 모음으로 IBM alphaWorks에서 진행되다가 IBM High Performance Computing Toolkit이라는 상용 패키지의 한 부분이 되었다. HPM은 다양한 하드웨어 이벤트들을 측정할 수 있으며,  HPM의 한부분을 차지하고 있는 hpmcount는 사용자가 작성한 프로그램의 실제 실행 시간과 하드웨어 카운터에 관련된 정보, 사용 자원 등의 전반적인 성능을 제공한다.

현재 Power기반의 리눅스나 AIX에서 사용이 가능하며, 리눅스용 패키지는 Absoft Corp.에서 판매하고 있다.

2) hpmcount 실행
다음의 예제는 hpmcount를 통해  프로그램을 수행하는 LoadLeveler 스크립트로 시리얼 프로그램과 병렬 프로그램의 두가지 경우에 대한 예를 보여준다.

Sequential(Serial) program


Parallel program(MPI)
3) hpmcount를 통해 수집된 정보 분석
이 부분은 hpmcount를 현재 보유하고 있지 않기 때문에 단순히 서적이나 웹에서 얻은 자료를 기반으로 만들어진것을 미리 알리는 바입니다.

4) PAPI
hpmcount는 IBM의 PowerPC만을 지원하고 IRIX(리눅스의 지원여부는 확실히 모름^^)를 지원하기 때문에 다른 도구를 찾아야만 했다.

기본적으로 Flops를 측정하기 위해서는 CPU가 내부의 실수 연산 유닛의 작동 상황을 카운트해서 그정보를 제공해야 한다. CPU의 자체 카운터에 대한 성능 측정 프로그램에 대한 일반화를 위한 프로젝트가 있다. PAPI는 이러한 모니터링을 위한 공통적인 프로그래밍 인터페이스를 제공하며,  http://icl.cs.utk.edu/papi/index.html 에서 확인할 수 있다.

하악~ 힘들다. PAPI를 통한 성능 시험과 성능 시험 결과표 작성은 다음에 포스팅합니다.


반응형