Linux-cluster

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

hongiiv 2007. 2. 23. 10:32
반응형
들어가는글
리눅스를 접한것이 95년도 대학입학때부터다 한창 인터넷이라는 단어가 회자되던 시절로 넷스케이프, 알짜리눅스, 윈도우즈95의 세단어는 그시절을 떠올리게 부족함이 없다. 엑스윈도우 화면을 한번 보겠다는 일념하나로 리눅스와의 인연은 시작되고 어느덧 시간은 흘러 까맣게 잊고 있던 리눅스와의 인연이 다시 시작된건 리눅스를 이용한 클러스터와 함께 다시 시작되었다. 이제 그때와는 너무 많은 것들이 변화되었고, 단순한 호기심(?)이 아닌 이제 밥줄이 되어 버렸다.

병렬프로그래밍
현재 내가 몸담고 있는곳은 리눅스 클러스터를 기반으로 생물정보학을 연구하는 곳으로 18노드 Itanium2 클러스터를 부터 96노드 IBM PowerPC970 클러스터까지 다양한 클러스터를 갖추고 있다. 이러한 클러스터 시스템은 순차 프로그램을 여러 노드로 분산해서 실행할때 사용되기도 하지만, 진정한 클러스터의 사용한 병렬프로그램을 수행할때 그 진가가 발휘된다.

성능향상도(speed-up) S(n)
순차 프로그램에 대한 병렬 프로그램의 성능향상 정도를 성능향상도라고 하며, 이때 실행시간(elapsed time)은 wall clock time을 기준으로 한다. 실행시간이 24시간 소요되는 순차 프로그램에 대해서 병렬화를 수행하여 4개의 프로세서를 사용하여 8시간만에 그 결과를 얻을 경우 성능향상도는


User inserted image


User inserted image

Amdahl's Law
클러스터 컴퓨팅은 CPU 1개의 성능 한계를 해결하기 위해 출현한 아키텍처 중 최초로 탄생한 것이라고 할 만 하다. ‘클러스터를 찾아서(In Search of Clusters)’라는 책을 쓴 그렉 피스터(Greg Pfister)에 의하면, 클러스터라는 개념을 만들어낸 것은, 1개의 CPU 성능으로는 만족할 수 없었던 불특정 고객들이며, 그 개념은 1960년부터 있던 것이라고 한다. 최초로 클러스터링의 이론적 기초를 닦은 사람은 IBM의 암달(Gene Amdahl) 박사였다. 암달 박사가 1967년에 발표한 암달의 법칙(Amdahl’s law)에서 병렬 컴퓨팅에 대한 기초가 마련되면서, SMP와 함께 클러스터링의 이론적 기반이 만들어졌다.

암달의 법칙이란, 병렬처리 프로그램에서 차례로 수행되어야 하는 비교적 적은 수의 명령문들이, 프로세서의 수를 추가하더라도 그 프로그램의 실행을 더 빠르게 할 수 없도록 속도향상을 제한하는 요소를 갖고 있다는 것이다.

  • 잠재적인 프로그램 speedup을 기술하는 Amdahl의 법칙은 병렬화 시킬 수 있는 코드의 비율(P) 로 정의 된다.

    User inserted image

  • 만일 아무런 코드도 병렬화가 안되어 있다면 , f=0 이고 speedup=1 (no speedup) 이다. 만일 모든 코드가 병렬화되었다면 , f=1 이고 speedup 은 무한 대이다. (이론상)
  • 만일 코드의 50%가 병렬화되었다면 , 최고 speedup=2 이고 이것은 serial 코드보다 2배의 속도 향상을 가져옴을 의미한다.
  • 즉,  프로세스병렬화 한계가 반드시 존재한다는 것으로, 병렬처리가 불가능한 순차적인 부분이 있어 프로세스를 아무리 병렬화한다하더라도 더 이상 성능이 향상되지 않는 한계가 존재한다는 법칙이다.

이론 성능향상도
암달의 법칙에 의해 병렬프로그램의 성능향상도는 순차 프로그램에서 병렬화 가능한 부분의 비율에 의해서 결정된다고 했다. 그럼 여기서 시리얼 프로그램이 코드가 100이라고 할때 20이 병렬화가 불가능한 부분이고 나머지 80에 대해서 병렬화가 가능하다고 할때, 4개의 프로세서를 사용하여 병렬화할 경우 이론 성능향상도는

f : 병렬화가 불가능한 부분 = 0.2
n : 프로세서 =4

User inserted image

실제 성능향상도
이론 성능향상도는 통신부하, 부하분산 불균형에 대한 고려가 없지만, 실제 병렬프로그램에서는 이러한 사항들이 성능향상에 영향을 미친다.

병렬 프로그램의 효율(efficiency) E(n)
프로세서 사용 개수에 따른 병렬 프고르매의 성능 효율로 4개의 프로세서로 3배의 성능향상이 있을 경우 0.75또는 75%의 병렬프로그래밍의 효율이 있다고 한다.

User inserted image

병렬 프로그램의 성능 향상
  • 순차프로그램에서 병렬화 가능한 부분을 증가시킨다.
  • 병렬 프로세스들의 부하분산을 고르게 한다.
  • 통신에 소요되는 시간을 최소화 한다.

본 문서는 트랙백에 걸린 문서들을 참고해서 작성되었습니다. 참고라기 보다는 거의 copy&paste 했죠 ^^;; 문제가 되는 부분은 지적해 주세요.


반응형