고 급 병 렬 프 로 그 래 밍

146
고 고 고 고 고 고 고 고 고 고 고 고 고 고 고 고 고 고

Upload: galen

Post on 12-Feb-2016

170 views

Category:

Documents


0 download

DESCRIPTION

고 급 병 렬 프 로 그 래 밍 . 목 표. KISTI 가 현재 보유하고 있는 IBM 시스템에서 순차 및 병렬 프로그램의 성능을 최적화 시키기 위해 필요한 배경 지식을 습득하고 최적화와 관련해서 사용할 수 있는 도구의 사용법을 익히도록 한다. 차 례. I. 고급 병렬 프로그래밍 개요 4 II.IBM 시스템에서 성능 최적화 31 III. 병렬 프로그래밍 관련 도구106 IV. 참고 자료 및 부록145. 제 I 장. 고급 병렬 프로그래밍 개요 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 고 급   병 렬 프 로 그 래 밍

고 급 병 렬고 급 병 렬

프 로 그 래 밍 프 로 그 래 밍

Page 2: 고 급   병 렬 프 로 그 래 밍

목 표목 표

KISTIKISTI 가 현재 보유하고 있는 가 현재 보유하고 있는 IBM IBM 시스템에서 순차 시스템에서 순차

및 병렬 프로그램의 성능을 최적화 시키기 위해 필요한 및 병렬 프로그램의 성능을 최적화 시키기 위해 필요한

배경 지식을 습득하고 최적화와 관련해서 사용할 수 배경 지식을 습득하고 최적화와 관련해서 사용할 수

있는 도구의 사용법을 익히도록 한다있는 도구의 사용법을 익히도록 한다 ..

Page 3: 고 급   병 렬 프 로 그 래 밍

차 례차 례

I.I. 고급 병렬 프로그래밍 개요고급 병렬 프로그래밍 개요 44

II.II. IBM IBM 시스템에서 성능 최적화시스템에서 성능 최적화 3131

III.III. 병렬 프로그래밍 관련 도구병렬 프로그래밍 관련 도구 106106

IV.IV. 참고 자료 및 부록참고 자료 및 부록 145145

Page 4: 고 급   병 렬 프 로 그 래 밍

제 제 I I 장장

고급 병렬 프로그래밍 개요고급 병렬 프로그래밍 개요 병렬 프로그램의 성능최적화병렬 프로그램의 성능최적화

일반적인 프로그램의 튜닝일반적인 프로그램의 튜닝

가이드라인가이드라인

하이브리드 병렬 프로그래밍하이브리드 병렬 프로그래밍

Page 5: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 55

병렬 프로그램의 성능최적화 병렬 프로그램의 성능최적화 (1/5)(1/5)

성능향상도성능향상도 ((speed-up) S(n)speed-up) S(n)

순차 프로그램에 대한 병렬 프로그램의 성능향상 정도순차 프로그램에 대한 병렬 프로그램의 성능향상 정도 실행시간실행시간 ((elapsed time)elapsed time) 은 벽시계시간은 벽시계시간 ((wall clock time) wall clock time) 기준기준 실행시간이 실행시간이 2424 시간시간 소요되는 순차 프로그램을 병렬화소요되는 순차 프로그램을 병렬화 , 4, 4 개 개

프로세서를 사용해서프로세서를 사용해서 88 시간 만에 결과를 얻을 수 있게 된 경우의 시간 만에 결과를 얻을 수 있게 된 경우의 성능향상도성능향상도

순차 프로그램의 실행시간순차 프로그램의 실행시간병렬 프로그램의 실행시간병렬 프로그램의 실행시간 ((nn 개 프로세서개 프로세서 ) )

ttss

ttppS(n)S(n)== ==

24 24 88S(4)S(4)== = =

33

Page 6: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 66

병렬 프로그램의 성능최적화 병렬 프로그램의 성능최적화 (2/5)(2/5)

Amdahl’s LawAmdahl’s Law ‘‘ 병렬프로그램의 성능향상도는 순차 프로그램에서 병렬화 가능한 병렬프로그램의 성능향상도는 순차 프로그램에서 병렬화 가능한

부분의 비율에 의해서 결정된다부분의 비율에 의해서 결정된다 .’.’

이상이상 ((ideal) ideal) 성능향상도 성능향상도 SSidealideal

ttp p = ft= fts s + (1-f)t+ (1-f)tss/n/n

여기서여기서 , , ff 는 병렬화 불가능한 부분이며 는 병렬화 불가능한 부분이며 0 ≤ f ≤ 10 ≤ f ≤ 1

만일만일 , , 프로세서를 충분히 많이프로세서를 충분히 많이 ((n n ∞∞) ) 사용한다면사용한다면 ,,

S(n)S(n)== ==ttss

ttpp

ttss

ftfts s + (1-f)t+ (1-f)tss/n/n== 11

ff + (1-f)/n+ (1-f)/n

SSideal ideal ==11ff

Page 7: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 77

병렬 프로그램의 성능최적화 병렬 프로그램의 성능최적화 (3/5)(3/5)

이론 성능향상도이론 성능향상도 f = 0.2, n = 4f = 0.2, n = 4

cannot be parallelizedcannot be parallelized

can be parallelizedcan be parallelized

SerialSerial2020 8080

2020 2020ParallelParallelprocess 1process 1

process 2process 2

process 3process 3

process 4process 4

1 1 0.2 + (1-0.2) / 40.2 + (1-0.2) / 4S(4)S(4)== = 2.5= 2.5

Page 8: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 88

병렬 프로그램의 성능최적화 병렬 프로그램의 성능최적화 (4/5)(4/5)

실제 성능향상도실제 성능향상도 실제의 경우 통신부하실제의 경우 통신부하 , , 부하분산 불균형이 성능향상도에 영향을 부하분산 불균형이 성능향상도에 영향을

미침미침

SerialSerial

2020 8080

2020 2020parallelparallel

process 1process 1

process 2process 2

process 3process 3

process 4process 4

Load unbalanceLoad unbalance

cannot be parallelizedcannot be parallelized

can be parallelizedcan be parallelized

communication overheadcommunication overhead

Page 9: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 99

병렬 프로그램의 성능최적화 병렬 프로그램의 성능최적화 (5/5)(5/5)

병렬 프로그램의 효율병렬 프로그램의 효율 ((efficiency) E(n)efficiency) E(n)

프로세서 사용 개수에 따른 병렬 프로그램의 성능 효율프로세서 사용 개수에 따른 병렬 프로그램의 성능 효율 44 개의 프로세서로 개의 프로세서로 33 배의 성능향상이 있는 경우 배의 성능향상이 있는 경우 0.75 0.75 혹은 혹은 75%75% 의 의

병렬 프로그래밍 효율병렬 프로그래밍 효율

병렬 프로그램의 성능 향상을 위한 가이드라인병렬 프로그램의 성능 향상을 위한 가이드라인 순차 프로그램에서 병렬화 될 수 있는 부분을 증가시킴순차 프로그램에서 병렬화 될 수 있는 부분을 증가시킴 병렬 프로세스들의 부하분산을 고르게 함병렬 프로세스들의 부하분산을 고르게 함 통신에 소요되는 시간을 최소화 시킴통신에 소요되는 시간을 최소화 시킴

ttss

ttpp x nx nS(n)S(n)nnE(n)E(n)== == [ x 100 (%) [ x 100 (%)

]]

Page 10: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1010

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (1/14)(1/14)

코드의 핸드 튜닝코드의 핸드 튜닝 지역변수와 전역변수지역변수와 전역변수

전역변수는 변수의 범위전역변수는 변수의 범위 ((scope) scope) 특성 때문에 컴파일러의 최적화 방해특성 때문에 컴파일러의 최적화 방해 최대한 자동변수최대한 자동변수 ((automatic variable)automatic variable) 과 같은 지역변수를 많이 사용과 같은 지역변수를 많이 사용

포인터포인터 최적화 과정에서 포인터를 쫓는 것은 어렵거나 불가능하기 때문에 최적화 과정에서 포인터를 쫓는 것은 어렵거나 불가능하기 때문에

대부분의 메모리 관련 최적화를 방해대부분의 메모리 관련 최적화를 방해

수식의 표현수식의 표현 Fortran Fortran 컴파일러는 동일 수식은 잘 인지하지만컴파일러는 동일 수식은 잘 인지하지만 , , 교환법칙을 교환법칙을

이해하지는 못함이해하지는 못함x = a + b + c + dx = a + b + c + dy = a + c + b + dy = a + c + b + d

가능하면가능하면 , , 동일한 수식을 표현할 때의 변수들은 동일 순서로 배열동일한 수식을 표현할 때의 변수들은 동일 순서로 배열

Page 11: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1111

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (2/14)(2/14)

형 변환형 변환 정수와 실수 간의 형 변환을 강제하지 말 것정수와 실수 간의 형 변환을 강제하지 말 것 루프 변수로 부동소수를 사용하지 말 것루프 변수로 부동소수를 사용하지 말 것

루프의 튜닝루프의 튜닝 Do Do 루프의 크기를 관리하기 쉽게 유지루프의 크기를 관리하기 쉽게 유지 데이터를 순차적으로 접근 – 스트라이드데이터를 순차적으로 접근 – 스트라이드 ((stride) 1stride) 1 이동 불가능한 루프 안의 이동 불가능한 루프 안의 IFIF 문 수를 최소화문 수를 최소화 루프 안에서의 서브루틴루프 안에서의 서브루틴 // 함수 부르기를 피할 것함수 부르기를 피할 것 배열의 배열의 subscript(subscript( 특히 루프 변수특히 루프 변수 ) ) 단순화단순화 정수형 루프 변수 사용정수형 루프 변수 사용 루프 안에서 피해야 할 구문루프 안에서 피해야 할 구문

- GOTO, STOP, PAUSE, RETURN - GOTO, STOP, PAUSE, RETURN 같은 흐름 관련 구문같은 흐름 관련 구문- - 루프의 최적화를 방해하는 데이터의 루프의 최적화를 방해하는 데이터의 EQUIVALENCE EQUIVALENCE 구문구문- LOGICAL*1, BYTE, INTEGER*1, INTEGER*2, REAL*16, - LOGICAL*1, BYTE, INTEGER*1, INTEGER*2, REAL*16,

COMPLEX*32, CAHRACTER, INTEGER*8 COMPLEX*32, CAHRACTER, INTEGER*8 같은 최적화 같은 최적화 불가능한 데이터 형을 피할 것불가능한 데이터 형을 피할 것

Page 12: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1212

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (3/14)(3/14)

성능에 치명적인 루프에서 피해야 할 것들성능에 치명적인 루프에서 피해야 할 것들 큰 스트라이드의 데이터 접근큰 스트라이드의 데이터 접근 적은 수의 반복계산을 수행하는 루프적은 수의 반복계산을 수행하는 루프 I/O I/O 문의 포함문의 포함

루프 튜닝의 예루프 튜닝의 예 IF IF 문의 제거문의 제거 경계조건 경계조건 IF IF 테스트테스트 반복적인 내재반복적인 내재 ((intrinsic) intrinsic) 함수의 계산함수의 계산 나눗셈을 역수의 곱셈으로 치환나눗셈을 역수의 곱셈으로 치환 22 의 승수의 배수를 갖는 배열 문제의 승수의 배수를 갖는 배열 문제

Page 13: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1313

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (4/14)(4/14) IF IF 문의 제거문의 제거

튜닝 전튜닝 전 튜닝 후튜닝 후

DO I=1,NDO I=1,N IF(D(J).LE.0.0)X(I)=0.0IF(D(J).LE.0.0)X(I)=0.0 A(I)=B(I)+C(I)*D(I)A(I)=B(I)+C(I)*D(I) E(I)=X(I)+F*G(I)E(I)=X(I)+F*G(I)ENDDOENDDO

IF(D(J).LE.0.0)THENIF(D(J).LE.0.0)THEN DO I=1,NDO I=1,N A(I)=B(I)+C(I)*D(I)A(I)=B(I)+C(I)*D(I) X(I)=0.0X(I)=0.0 E(I)=F*G(I)E(I)=F*G(I) ENDDOENDDOELSEELSE DO I=1,NDO I=1,N A(I)=B(I)+C(I)*D(I)A(I)=B(I)+C(I)*D(I) E(I)=X(I)+F*G(I)E(I)=X(I)+F*G(I) ENDDOENDDOENDIFENDIF

Page 14: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1414

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (5/14)(5/14) 경계조건 경계조건 IF IF 테스트테스트

튜닝 전튜닝 전 튜닝 후튜닝 후

DO I=1,NDO I=1,N IF(I.EQ.1)THENIF(I.EQ.1)THEN X(I)=0.0X(I)=0.0 ELSEIF(I.EQ.N)THENELSEIF(I.EQ.N)THEN X(I)=1.0X(I)=1.0 ENDIFENDIF A(I)=B(I)+C(I)*D(I)A(I)=B(I)+C(I)*D(I) E(I)=X(I)+F*G(I)E(I)=X(I)+F*G(I)ENDDOENDDO

A(1)=B(1)+C(1)*D(1)A(1)=B(1)+C(1)*D(1)X(1)=0.0X(1)=0.0E(1)=F*G(1)E(1)=F*G(1)DO I=2,N-1DO I=2,N-1 A(I)=B(I)+C(I)*D(I)A(I)=B(I)+C(I)*D(I) E(I)=X(I)+F*G(I)E(I)=X(I)+F*G(I)ENDDOENDDOX(N)=1.0X(N)=1.0A(N)=B(N)+C(N)*D(N)A(N)=B(N)+C(N)*D(N)E(N)=1.0+F*G(N)E(N)=1.0+F*G(N)

Page 15: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1515

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (6/14)(6/14) 반복적인 내재반복적인 내재 ((intrinsic) intrinsic) 함수의 계산함수의 계산

튜닝 전튜닝 전 튜닝 후튜닝 후

DO I=1,NDO I=1,N DO J=1,NDO J=1,N A(J,I)=B(J,I)*SIN(X(J))A(J,I)=B(J,I)*SIN(X(J)) ENDDOENDDOENDDOENDDO

DIMENSION SINX(N)DIMENSION SINX(N)……DO J=1,NDO J=1,N SINX(J)=SIN(X(J))SINX(J)=SIN(X(J))ENDDOENDDODO I=1,NDO I=1,N DO J=1,NDO J=1,N A(J,I)=B(J,I)*SINX(J)A(J,I)=B(J,I)*SINX(J) ENDDOENDDOENDDOENDDO

Page 16: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1616

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (7/14)(7/14) 나눗셈을 역수의 곱셈으로 치환나눗셈을 역수의 곱셈으로 치환

튜닝 전튜닝 전 튜닝 후튜닝 후

DO I=1,NDO I=1,N A(I)=B(I)/C(I)A(I)=B(I)/C(I) P(I)=Q(I)/C(I)P(I)=Q(I)/C(I)ENDDOENDDO

DO I=1,NDO I=1,N OC=1.0/C(I)OC=1.0/C(I) A(I)=B(I)*OCA(I)=B(I)*OC P(I)=Q(I)*OCP(I)=Q(I)*OCENDDOENDDO

DO I=1,NDO I=1,N A(I)=B(I)/C(I)A(I)=B(I)/C(I) P(I)=Q(I)/D(I)P(I)=Q(I)/D(I)ENDDOENDDO

DO I=1,NDO I=1,N OCD=1.0/( C(I)*D(I) )OCD=1.0/( C(I)*D(I) ) A(I)=B(I)*D(I)*OCDA(I)=B(I)*D(I)*OCD P(I)=Q(I)*C(I)*OCDP(I)=Q(I)*C(I)*OCDENDDOENDDO

Page 17: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1717

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (8/14)(8/14) 22 의 승수의 배수를 갖는 배열 문제의 승수의 배수를 갖는 배열 문제

튜닝 전튜닝 전 튜닝 후튜닝 후

integer nx,nzinteger nx,nzparameter (nx=2048,nz=2048)parameter (nx=2048,nz=2048)real p(2,nx,nz)real p(2,nx,nz)......do ix=2,nx-1do ix=2,nx-1 do iz=2,nz-1do iz=2,nz-1 p(it1,ix,iz)= -p(it1,ix , iz) \p(it1,ix,iz)= -p(it1,ix , iz) \ +s*p(it2,ix-1 ,iz) \+s*p(it2,ix-1 ,iz) \ +s*p(it2,ix+1,iz) \+s*p(it2,ix+1,iz) \ +s*p(it2,ix , iz-1) \+s*p(it2,ix , iz-1) \ +s*p(it2,ix , iz+1)+s*p(it2,ix , iz+1) end doend doend doend do

integer nx,nzinteger nx,nzparameter (nx=2048,nz=2048)parameter (nx=2048,nz=2048)real p(2,real p(2,20802080,nz),nz)......do ix=2,nx-1do ix=2,nx-1 do iz=2,nz-1do iz=2,nz-1 p(it1,ix,iz)= -p(it1,ix , iz) \p(it1,ix,iz)= -p(it1,ix , iz) \ +s*p(it2,ix-1 ,iz) \+s*p(it2,ix-1 ,iz) \ +s*p(it2,ix+1,iz) \+s*p(it2,ix+1,iz) \ +s*p(it2,ix , iz-1) \+s*p(it2,ix , iz-1) \ +s*p(it2,ix , iz+1)+s*p(it2,ix , iz+1) end doend doend doend do

Page 18: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1818

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (9/14)(9/14)

튜닝된 코드의 사용튜닝된 코드의 사용 이미 튜닝된 작업에 시간을 허비하지 말 것이미 튜닝된 작업에 시간을 허비하지 말 것 배열연산배열연산 , , 선형 대수 방정식의 풀이선형 대수 방정식의 풀이 , , BLAS BLAS 함수함수 , , FFT, FFT,

convolution convolution 등과 같은 표준 함수들을 코드에서 사용한다면 등과 같은 표준 함수들을 코드에서 사용한다면 대응되는 대응되는 ESSL ESSL 함수를 사용하도록 코드를 수정함수를 사용하도록 코드를 수정

성능 모니터링성능 모니터링 POWER3, POWER4 POWER3, POWER4 프로세서는 하드웨어 성능 모니터링 장치 포함프로세서는 하드웨어 성능 모니터링 장치 포함 프로세서의 동작이나 명령의 처리와 관련된 자세한 정보를 담은 프로세서의 동작이나 명령의 처리와 관련된 자세한 정보를 담은

카운터에 대한 접근을 카운터에 대한 접근을 OS OS 차원에서 제공차원에서 제공 Performance Monitor API Performance Monitor API 패키지패키지

$ $ lslpp –l bos.pmapi.*lslpp –l bos.pmapi.* Performance Monitor APIPerformance Monitor API 와 와 HPM ToolkitHPM Toolkit 을 이용해서 프로그램의 을 이용해서 프로그램의

성능 모니터링에 필요한 관련 카운터의 정보를 얻을 수 있음성능 모니터링에 필요한 관련 카운터의 정보를 얻을 수 있음

Page 19: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 1919

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (10/14)(10/14)

PM API PM API 테스트테스트$ $ xlc -O3 -c -o pm_subroutines.o pm_subroutinesxlc -O3 -c -o pm_subroutines.o pm_subroutines..cc$ $ xlf -O3 -o pm_test pm_subroutines.o -lpmapi -L/usr/pmapi/lib xlf -O3 -o pm_test pm_subroutines.o -lpmapi -L/usr/pmapi/lib

pm_test.fpm_test.f* Counter 1 – L3, 2 – memory* Counter 1 – L3, 2 – memory, 3 – , 3 – L3.5, 4 – L2, 5 – L2P1S, 6 – L2P2S, 7 – L3.5, 4 – L2, 5 – L2P1S, 6 – L2P2S, 7 –

L2P1, 8 – L2P2L2P1, 8 – L2P2

program pm_testprogram pm_test integer integer pminit,pmstart,pmstop, pminit,pmstart,pmstop, pmprint,i,jpmprint,i,j integer result,groupinteger result,group real*8 x,a(512,512)real*8 x,a(512,512) group=5group=5 result = pminit(%VAL(group))result = pminit(%VAL(group)) result = pmstart()result = pmstart()

do i=1,512do i=1,512 do j=1,512do j=1,512 a(i,j) = a(i,j) *1.5a(i,j) = a(i,j) *1.5 end doend do end doend do result = pmstop()result = pmstop() result = pmprint()result = pmprint()end programend program

Page 20: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2020

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (11/14)(11/14)

I/OI/O 를 위한 튜닝를 위한 튜닝 가능한 한 가능한 한 I/OI/O 를 제거하거나 줄여라를 제거하거나 줄여라 I/OI/O 가 프로그램의 병목가 프로그램의 병목 ((bottleneck)bottleneck) 이라면 우수한 하드웨어나 이라면 우수한 하드웨어나

소프트웨어를 사용하는 것이 최선의 튜닝 방법소프트웨어를 사용하는 것이 최선의 튜닝 방법 High-performance storage arrays, High-performance storage arrays, 스트라이핑스트라이핑 , , asynchronous I/Oasynchronous I/O

Asynchronous I/OAsynchronous I/O 계산과 계산과 I/OI/O 가 동시에 실행될 수 있도록 가 동시에 실행될 수 있도록 OS(AIX)OS(AIX) 가 지원가 지원 Asynchronous I/OAsynchronous I/O 를 위해서는 프로그램의 수정이 필요 함를 위해서는 프로그램의 수정이 필요 함 Fortran – OPEN() Fortran – OPEN() 문에서 문에서 ASYNC ASYNC 인자를 이용인자를 이용 , , asynchronous asynchronous

read/writeread/write 를 위한 를 위한 wait wait 필요필요 C – asynchronous I/OC – asynchronous I/O 는 는 unbuffered I/Ounbuffered I/O 에서만 지원에서만 지원 , , FortranFortran 의 의

경우보다 복잡함경우보다 복잡함 Direct I/O : Direct I/O : 장치와 어플리케이션 버퍼들의 사이 중간장치와 어플리케이션 버퍼들의 사이 중간 ((intermediate) intermediate)

버퍼링을 하지 않고 버퍼링을 하지 않고 I/O I/O 데이터를 전송데이터를 전송

Page 21: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2121

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (12/14)(12/14)

Fortran I/OFortran I/O I/O I/O 서브시스템에 대한 호출 횟수를 줄임서브시스템에 대한 호출 횟수를 줄임

DIMENSION A(N,N)DIMENSION A(N,N)Case 1. Best. N*NCase 1. Best. N*N 개 값의 개 값의 11 개 레코드개 레코드

WRITE(1) AWRITE(1) ACase 2. NCase 2. N 개 값의 개 값의 NN 개 레코드개 레코드

DO I = 1, NDO I = 1, N WRITE(1) (A(J,I), J = 1, N)WRITE(1) (A(J,I), J = 1, N)ENDDOENDDO

Case 3. Worst. 1Case 3. Worst. 1 개 값의 개 값의 N*NN*N 개 레코드개 레코드DO I = 1, NDO I = 1, N DO J = 1, NDO J = 1, N WRITE(1) A(J,I)WRITE(1) A(J,I) ENDDOENDDOENDDOENDDO

순차적으로 읽거나 쓸 때 길이가 긴 레코드를 이용순차적으로 읽거나 쓸 때 길이가 긴 레코드를 이용 , , 적어도 적어도 100100KBKB 이상 이상 22MB MB 혹은 그 이상 단위의 혹은 그 이상 단위의 I/OI/O 가 효율적가 효율적

Page 22: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2222

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (13/14)(13/14) Formatted Formatted 대신 대신 Unformatted I/O Unformatted I/O 사용 사용 : : binary binary decimal decimal 변환의 변환의 오버헤드 감소오버헤드 감소

Sequential Sequential 대신 대신 direct file direct file 사용 사용 : : Fortran Fortran 레코드 길이와 오버플로우 레코드 길이와 오버플로우 체크를 피함체크를 피함

계산과 계산과 I/O I/O 작업을 겹쳐서 수행하기 위해 작업을 겹쳐서 수행하기 위해 asynchronous I/Oasynchronous I/O 를 사용를 사용 AIXAIX 는 자동적으로 여유 메모리를 파일 는 자동적으로 여유 메모리를 파일 I/OI/O 의 버퍼로 사용 의 버퍼로 사용 큰 크기의 큰 크기의

임시 파일을 임시 파일을 sequentialsequential 하게 쓰고 처리 과정의 추후 단계에서 그 파일을 하게 쓰고 처리 과정의 추후 단계에서 그 파일을 다시 읽어야 할 필요가 있다면다시 읽어야 할 필요가 있다면 , , direct access direct access 파일로 만들고 끝부분의 파일로 만들고 끝부분의 레코드를 먼저 읽도록 시도레코드를 먼저 읽도록 시도 . . 이상적으로는 역순으로 읽어라 이상적으로는 역순으로 읽어라 메모리 메모리 버퍼에 남아 있는 파일 부분에 대해서 디스크를 읽지 않고 버퍼에 남아 있는 파일 부분에 대해서 디스크를 읽지 않고 I/O I/O 작업 가능작업 가능

핫스팟핫스팟 ((hot spot) hot spot) 찾기 – 프로파일링찾기 – 프로파일링 프로파일링프로파일링

프로그램의 실행 중 전체 코드에 걸쳐서 프로그램의 실행 중 전체 코드에 걸쳐서 CPU CPU 시간이 어떻게 시간이 어떻게 사용되었는지를 알려 줌사용되었는지를 알려 줌

프로그램을 가장 효과적으로 튜닝할 수 있는 서브루틴이나 루프를 밝혀 프로그램을 가장 효과적으로 튜닝할 수 있는 서브루틴이나 루프를 밝혀 줌줌

Page 23: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2323

일반적인 튜닝 가이드라인 일반적인 튜닝 가이드라인 (14/14)(14/14) 특정 프로파일링은 프로그램의 특정 실행과 연관되어 있으며특정 프로파일링은 프로그램의 특정 실행과 연관되어 있으며 , , 같은 같은

프로그램이라도 입력 파일에 따라서도 다른 프로파일링 결과를 나타냄프로그램이라도 입력 파일에 따라서도 다른 프로파일링 결과를 나타냄 프로파일링 도구프로파일링 도구

prof, gprof : prof, gprof : 프로시져 수준의 프로파일링프로시져 수준의 프로파일링 tprof: 10 milliseconds tprof: 10 milliseconds 단위로 프로그램의 실행을 가로챌 수 있는 단위로 프로그램의 실행을 가로챌 수 있는 AIX AIX

trace trace 장치 사용장치 사용 , , 결과 결과 trace trace 테이블로부터 소스 코드의 라인별 테이블로부터 소스 코드의 라인별 10 10 milliseconds milliseconds 틱틱 ((tick)tick) 의 수를 표시의 수를 표시

tproftprof -g -g 옵션을 추가하고 프로그램 컴파일옵션을 추가하고 프로그램 컴파일 tprof tprof 명령을 이용해서 프로그램을 실행명령을 이용해서 프로그램을 실행

$ $ tprof –p myprog –x “myprog params”tprof –p myprog –x “myprog params”__myprog.all : __myprog.all : 프로그램을 실행시키는데 관여한 모드 프로세스 프로그램을 실행시키는데 관여한 모드 프로세스

정보 및 각 프로세스와 연관된 시간 틱 수 등 표시정보 및 각 프로세스와 연관된 시간 틱 수 등 표시____t.myprog.f : -g t.myprog.f : -g 옵션을 사용한 경우만 생성옵션을 사용한 경우만 생성 , , 소스 코드의 소스 코드의

라인별 틱 수를 표시라인별 틱 수를 표시 xprofilerxprofiler

prof, gprof, tprofprof, gprof, tprof 의 기능을 포함한 의 기능을 포함한 XX GUI GUI 프로파일러프로파일러

Page 24: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2424

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (1/7)(1/7)

동기와 필요성동기와 필요성

성능 향상을 위해서성능 향상을 위해서 노드 내에서의 노드 내에서의 MPI MPI 사용으로 인한 통신의 초기 지연 방지사용으로 인한 통신의 초기 지연 방지 다중 프로세스 실행으로 인해 발새하는 노드 내에서의 불필요한 데이터 다중 프로세스 실행으로 인해 발새하는 노드 내에서의 불필요한 데이터

복사 방지복사 방지 노드간의 노드간의 MPI MPI 콜로 인한 통신 지연 감소콜로 인한 통신 지연 감소 전체적인 메시지 패싱 작업 감소전체적인 메시지 패싱 작업 감소

메모리 사용을 줄이기 위해서메모리 사용을 줄이기 위해서 다중 프로세스 실행으로 인해 노드 내에서 중복되는 데이터 복제 방지다중 프로세스 실행으로 인해 노드 내에서 중복되는 데이터 복제 방지

Page 25: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2525

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (2/7)(2/7)

하이브리드 병렬 프로그래밍 과정하이브리드 병렬 프로그래밍 과정

Page 26: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2626

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (3/7)(3/7)

병렬화 접근 방식의 형태병렬화 접근 방식의 형태

Fine GrainedFine Grainedmain programmain program! MPI initialization! MPI initialization........! CPU intensive loop! CPU intensive loop!$OMP PARALLEL DO!$OMP PARALLEL DOdo i=1,ndo i=1,n !work!workend do end do ........endend

Coarse GrainedCoarse Grainedmain programmain program!MPI initialization!MPI initialization!$OMP PARALLEL!$OMP PARALLEL........ do i=1,ndo i=1,n !work!work end doend do........!$OMP END PARALLEL!$OMP END PARALLELendend

Page 27: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2727

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (4/7)(4/7)

병렬화 접근 방식에 따른 특성병렬화 접근 방식에 따른 특성

Fine GrainedFine Grained 적용하기 용이적용하기 용이 OpenMP OpenMP 지시어를 사용하게 되고지시어를 사용하게 되고 , , 그에 따라 그에 따라 fork-join fork-join 되기 때문에 되기 때문에

스레드 생성 및 동기화 인해 발생하는 부하가 성능 저조에 영향스레드 생성 및 동기화 인해 발생하는 부하가 성능 저조에 영향

Coarse GrainedCoarse Grained 상대적으로 복잡하므로 적용하는데 많은 시간이 소요 됨상대적으로 복잡하므로 적용하는데 많은 시간이 소요 됨 스레드 생성으로 인한 부하가 적음스레드 생성으로 인한 부하가 적음

Page 28: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2828

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (5/7)(5/7)

Fine Grained Fine Grained 접근 방식접근 방식

Page 29: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 2929

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (6/7)(6/7)

Coarse Grained Coarse Grained 접근 방식접근 방식 MPI MPI 코드에서 시작코드에서 시작 각 각 MPI MPI 테스크가 시작 부분에서 스레드들을 한번 생성테스크가 시작 부분에서 스레드들을 한번 생성 초기화 같은 순차 작업이나 초기화 같은 순차 작업이나 MPI MPI 콜들은 콜들은 MASTER MASTER 혹은 혹은 SINGLE SINGLE

지역에서 수행지역에서 수행 메인 배열은 전역변수메인 배열은 전역변수 작업 분배 작업 분배 : : 각 스레드는 그 스레드 번호각 스레드는 그 스레드 번호 ((omp_get_thread_num())omp_get_thread_num())

에 따라 배열 데이터의 조각을 담당에 따라 배열 데이터의 조각을 담당 . 1. 1 차원 블록 분배차원 블록 분배 .. OMP DOOMP DO 를 사용치 않음를 사용치 않음 변수 및 함수의 유효 범위변수 및 함수의 유효 범위 ((scope)scope) 와 동기화와 동기화 ((synchronization)synchronization) 에 에 주의주의

Page 30: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3030

하이브리드 병렬 프로그래밍 하이브리드 병렬 프로그래밍 (7/7)(7/7)

적용 경우적용 경우 MPIMPI 로 확장성이 우수하지 않는 경우로 확장성이 우수하지 않는 경우 동적 부하 분산동적 부하 분산 ((dynamic load balancing)dynamic load balancing) 을 이용할 수 있는 경우을 이용할 수 있는 경우 Fine-grained Fine-grained 병렬성을 갖고 있는 경우병렬성을 갖고 있는 경우 중복된 데이터를 갖고 있는 경우중복된 데이터를 갖고 있는 경우 노드 내 통신에 적합한 노드 내 통신에 적합한 MPIMPI 가 없는 경우가 없는 경우

현실적 제약현실적 제약 성능 향상이 크지 않거나 저하성능 향상이 크지 않거나 저하 프로그래밍이 어려움프로그래밍이 어려움

Page 31: 고 급   병 렬 프 로 그 래 밍

제 제 IIII 장장

IBM IBM 시스템에서시스템에서 성능 성능

최적화최적화 POWER4 POWER4 프로세서를 사용하는 프로세서를 사용하는

KISTI IBM KISTI IBM 시스템에서의 최적화 방법시스템에서의 최적화 방법

POWER4 POWER4 시스템을 위한 튜닝시스템을 위한 튜닝 , ,

컴파일러를 이용한 최적화컴파일러를 이용한 최적화 , , 병렬 병렬

프로그래밍 테크닉프로그래밍 테크닉

Page 32: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3232

POWER4 POWER4 시스템 시스템 (1/11)(1/11)

IBM POWER IBM POWER 프로세서의 발전프로세서의 발전 POWER1POWER1

19901990년년 , 25, 25MHz, MHz, 88KB I-KB I-캐시캐시 , , 64KB D-64KB D-캐시캐시 , , FMA, 50MFlopsFMA, 50MFlops POWER2POWER2

19931993년년 , 55-66.5, 55-66.5MHz, 1996MHz, 1996년 년 P2SC 135~160MHz, 256KB D-P2SC 135~160MHz, 256KB D-캐시캐시 , , 이중 이중 FPU/FXU, FPU/FXU, 하드웨어 제곱근하드웨어 제곱근 , 650, 650MFlopsMFlops

PowerPCPowerPC 19931993년년 , , IBM+Motorola+Apple, POWER instructionIBM+Motorola+Apple, POWER instruction++SMP, SMP,

601/603/604/604e601/603/604/604e 로 발전로 발전 , , POWER3/4POWER3/4 의 기반의 기반 RS64RS64

19971997년년 , 64, 64 비트비트 , 24-, 24-way SMP, way SMP, 상용상용 (1(1FPU), 750MHz, Copper/SOIFPU), 750MHz, Copper/SOI기술기술

POWER3POWER3 19991999년년 , , P2SC+PowerPC, FPP2SC+PowerPC, FP 성능성능 ++SMP+64SMP+64 비트비트 , 200/375/450, 200/375/450MHz, MHz,

16-way SMP, Copper/SOI16-way SMP, Copper/SOI 기술기술 , , ASCI White, ASCI White, 서울대서울대

Page 33: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3333

POWER4 POWER4 시스템 시스템 (2/11)(2/11)

IBM POWER4 IBM POWER4 프로세서의 특징프로세서의 특징 20012001년 발표년 발표 2 2 마이크로프로세서 코어마이크로프로세서 코어 MCM (Multi-Chip Module) : 4 MCM (Multi-Chip Module) : 4 칩 칩 / 8 / 8 코어코어 SCM (Single-Chip Module) : 1 SCM (Single-Chip Module) : 1 칩 칩 / 2 / 2 코어코어 CPU CPU 속도속도 : 1.1 / 1.3 / 1.7 / 2.0 : 1.1 / 1.3 / 1.7 / 2.0 GHzGHz 3232 웨이 웨이 SMP SMP 가능가능 : 4 : 4 MCMMCM 6464 비트비트 캐시캐시 : : L1 (L1 ( 코어코어 ) / ) / L2 (L2 (칩칩 ) / ) / L3 (L3 ( 모듈모듈 ))

Page 34: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3434

POWER4 POWER4 시스템 시스템 (3/11)(3/11)

POWER4 POWER4 프로세서 칩프로세서 칩

Page 35: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3535

POWER4 POWER4 시스템 시스템 (4/11)(4/11)

POWER4 POWER4 프로세서 코어프로세서 코어

Page 36: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3636

POWER4 POWER4 시스템 시스템 (5/11)(5/11)

POWER4 POWER4 프로세서 실행 파이프라인프로세서 실행 파이프라인

Page 37: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3737

POWER4 POWER4 시스템 시스템 (6/11)(6/11)

POWER4 POWER4 메모리 체계의 구조와 용량메모리 체계의 구조와 용량

구 성 요 소구 성 요 소 구 조구 조 용 량용 량

L1 L1 명령어 캐시명령어 캐시 직접 매핑직접 매핑 , 128, 128바이트 라인바이트 라인128128KB/KB/칩칩(64(64KB/KB/ 프로세서프로세서 ))

L1 L1 데이터 캐시데이터 캐시 22 웨이웨이 , 128, 128바이트 라인바이트 라인6464KB/KB/칩칩(32(32KB/KB/ 프로세서프로세서 ))

L2 L2 캐시캐시 44 웨이 웨이 ~ 8~ 8 웨이웨이 , 128, 128바이트 라인바이트 라인14401440KB/KB/칩칩(1.41MB)(1.41MB)

L3 L3 캐시캐시 88 웨이웨이 , 512, 512바이트 라인바이트 라인 , 128, 128바이트 바이트 44 개 섹터로 관리개 섹터로 관리 128128MB/MCMMB/MCM

Page 38: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3838

POWER4 POWER4 시스템 시스템 (7/11)(7/11)

MCMMCM 과 과 POWER4 POWER4 메모리 체계의 연결메모리 체계의 연결

Page 39: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 3939

POWER4 POWER4 시스템 시스템 (8/11)(8/11)

MCMMCM 과 과 MCM MCM 사이의 연결사이의 연결

Page 40: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4040

POWER4 POWER4 시스템 시스템 (9/11)(9/11)

메모리 체계와 메모리 체계와 MCMMCM 들 사이의 연결들 사이의 연결

Page 41: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4141

POWER4 POWER4 시스템 시스템 (10/11)(10/11)

하드웨어 데이터 프리패치하드웨어 데이터 프리패치 ((prefetch)prefetch)

캐시 미스캐시 미스 ((miss)miss) 의 영향의 영향 각 메모리 구성 요소로부터 각 메모리 구성 요소로부터 11워드워드 ((word) word) 로드로드 ((load)load) 소요 시간소요 시간

L1 : 1 CPU L1 : 1 CPU 사이클사이클 ,, L2 : ~12 CPU L2 : ~12 CPU 사이클사이클L3 : ~100 CPU L3 : ~100 CPU 사이클사이클 ,, 메모리 메모리 : ~300 : ~300 CPU CPU 사이클사이클 ((latency latency 포함포함 ))

Page 42: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4242

POWER4 POWER4 시스템 시스템 (11/11)(11/11)

POWER4 POWER4 시스템 시스템 I/O I/O 구조구조

Page 43: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4343

수치 어플리케이션을 위한 튜닝 수치 어플리케이션을 위한 튜닝 (1/2)(1/2)

수치 어플리케이션을 위한 튜닝 과정수치 어플리케이션을 위한 튜닝 과정 I/OI/O 가 프로그램의 중요 부분이라면 이 부분을 따로 튜닝하는 것이 가 프로그램의 중요 부분이라면 이 부분을 따로 튜닝하는 것이

중요하며 계산 부분의 튜닝과는 별개의 과정임중요하며 계산 부분의 튜닝과는 별개의 과정임 최고의 컴파일러 최적화 옵션을 사용최고의 컴파일러 최적화 옵션을 사용 프로파일링을 통해서 프로그램에서의 핫스팟 찾기프로파일링을 통해서 프로그램에서의 핫스팟 찾기

이 과정은 매우 중요하며이 과정은 매우 중요하며 , , 프로그램에서 자주 실행되지 않는 부분을 프로그램에서 자주 실행되지 않는 부분을 튜닝하는데 시간을 허비하지 말 것튜닝하는데 시간을 허비하지 말 것

가능하면 가능하면 MASS MASS 라이브러리나 라이브러리나 ESSL ESSL 혹은 다른 성능에 최적화된 혹은 다른 성능에 최적화된 라이브러리를 사용라이브러리를 사용

일반적으로 사용하는 프로그램의 작성과 관련된 튜닝 가이드라인을 일반적으로 사용하는 프로그램의 작성과 관련된 튜닝 가이드라인을 따라서 프로그램을 튜닝따라서 프로그램을 튜닝

POWER4 POWER4 시스템에 적합하도록 핸드 튜닝시스템에 적합하도록 핸드 튜닝

Page 44: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4444

수치 어플리케이션을 위한 튜닝 수치 어플리케이션을 위한 튜닝 (2/2)(2/2)

수치 어플리케이션의 핸드 튜닝수치 어플리케이션의 핸드 튜닝 부정적 요인을 피하기부정적 요인을 피하기

수치 연산 장치보다 느린 메모리 시스템의 부정적 효과를 피하거나 최소화 수치 연산 장치보다 느린 메모리 시스템의 부정적 효과를 피하거나 최소화 시키기 위한 방편시키기 위한 방편

스트라이드 최소화스트라이드 최소화 데이터 프리패칭의 흐름이 잘 이루어지도록 튜닝데이터 프리패칭의 흐름이 잘 이루어지도록 튜닝 캐시의 세트캐시의 세트 조합성조합성 ((set associativity) set associativity) 구속을 회피구속을 회피 데이터 캐시 블로킹데이터 캐시 블로킹 ((blocking)blocking)

긍정적 요인을 이용긍정적 요인을 이용 특히특히 , , 부동소수점 연산장치와 같은 수치 연산 장치의 활용 효율을 극대화 부동소수점 연산장치와 같은 수치 연산 장치의 활용 효율을 극대화

시키기 위한 방편시키기 위한 방편 안쪽 루프의 언롤링안쪽 루프의 언롤링 ((unrollingunrolling) : ) : 루프의 반복 당 독립 연산의 수를 루프의 반복 당 독립 연산의 수를

증가시켜 파이프라인을 채움증가시켜 파이프라인을 채움 바깥쪽 루프의 언롤링 바깥쪽 루프의 언롤링 : : 로드로드 ((load), load), 스토어스토어 ((store)store) 에 대한 연산 에 대한 연산

명령어의 비율을 증가시켜 루프의 성능이 데이터의 이동보다 연산에 명령어의 비율을 증가시켜 루프의 성능이 데이터의 이동보다 연산에 의존토록 조정의존토록 조정

Page 45: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4545

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (1/17)(1/17)

레벨 레벨 1, 2, 3 1, 2, 3 캐시캐시 L1 L1 명령어 캐시명령어 캐시

6464KB / KB / 프로세서프로세서 수치 어플리케이션의 경우 보통 처리해야 할 데이터의 양이 명령어의 수치 어플리케이션의 경우 보통 처리해야 할 데이터의 양이 명령어의

흐름이 차지하는 것보다 훨씬 크기 때문에 흐름이 차지하는 것보다 훨씬 크기 때문에 L1 L1 명령어 캐시는 큰 영향을 명령어 캐시는 큰 영향을 미치지 않음미치지 않음

엑티브엑티브 ((active) active) 루프가 너무 많은 명령어를 포함하지 않도록 주의루프가 너무 많은 명령어를 포함하지 않도록 주의엑티브 루프 엑티브 루프 : : FortranFortran 의 의 DODO 루프루프 , , CC 의 의 forfor 루프루프

L1 L1 데이터 캐시데이터 캐시 3232KB / KB / 프로세서프로세서 FIFO(first-in-first-out) FIFO(first-in-first-out) 교체 알고리즘의 교체 알고리즘의 22 웨이 세트 조합성웨이 세트 조합성

L2 L2 캐시캐시 , , L3 L3 캐시캐시 L2 : 1440KB / L2 : 1440KB / 칩칩 , , L3 : 128MB/MCML3 : 128MB/MCM 캐시의 일관성캐시의 일관성 ((coherency)coherency) 은 은 L2 L2 레벨에서 시스템 전체에 걸쳐 유지레벨에서 시스템 전체에 걸쳐 유지

Page 46: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4646

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (2/17)(2/17)

일반적인 캐시 고려 사항일반적인 캐시 고려 사항 L2 L2 캐시에서 캐시에서 L1 L1 캐시로의 대역폭캐시로의 대역폭 ((bandwidth)bandwidth) 은 부동소수점 은 부동소수점

연산장치에 데이터를 원활히 공급해 주기에 충분연산장치에 데이터를 원활히 공급해 주기에 충분 성능관점에서 성능관점에서 L1 L1 캐시와 캐시와 L2 L2 캐시의 가장 큰 차이점은 지연캐시의 가장 큰 차이점은 지연

((latency)latency) L1 L1 캐시와 부동소수점 레지스터캐시와 부동소수점 레지스터 ((register) register) 사이의 지연 사이의 지연 : ~: ~4 cycles4 cycles L2 L2 캐시와 부동소수점 레지스터 사이의 지연 캐시와 부동소수점 레지스터 사이의 지연 : : ~14 cycles~14 cycles 조밀조밀 ((dense) dense) 행렬 연산에 대한 추천행렬 연산에 대한 추천

L2 L2 캐시에 대한 데이터 블로킹캐시에 대한 데이터 블로킹 L1 L1 캐시에 대한 데이터 접근 조직화캐시에 대한 데이터 접근 조직화

L1 L1 데이터 캐시의 구조데이터 캐시의 구조 캐시 라인캐시 라인 ((cache line)cache line)

개념상 메모리 혹은 캐시를 개념상 메모리 혹은 캐시를 128128바이트 단위의 연속으로 나눈 것바이트 단위의 연속으로 나눈 것 메모리와 캐시 사이에서의 데이터 전송 단위메모리와 캐시 사이에서의 데이터 전송 단위

Page 47: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4747

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (3/17)(3/17)

세트 조합성세트 조합성 ((set associativity)set associativity) 22 웨이 세트 조합성을 갖는 웨이 세트 조합성을 갖는 128128 개의 합동개의 합동 ((congruence) congruence) 클래스 구조클래스 구조 2 2 x 128 x 128x 128 x 128바이트 바이트 = 32= 32KBKB

Page 48: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4848

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (4/17)(4/17)

POWER4 POWER4 프로세서의 프로세서의 L1 L1 데이터 캐시의 세트 조합성 관련 특성데이터 캐시의 세트 조합성 관련 특성 합동합동 ((congruence) congruence) 클래스 클래스 : L1 : L1 데이터 캐시 구조 그림에서의 동일 데이터 캐시 구조 그림에서의 동일 칼럼을 이루는 캐시 라인들의 집합칼럼을 이루는 캐시 라인들의 집합

22 웨이 세트 조합성웨이 세트 조합성 , , 128 128 합동 클래스합동 클래스 메모리와 캐시 사이의 로드메모리와 캐시 사이의 로드 // 스토어는 같은 합동 클래스 상의 캐시 스토어는 같은 합동 클래스 상의 캐시

라인들 사이에서만 허용라인들 사이에서만 허용 메모리 상의 메모리 상의 128128바이트 크기 메모리 라인은 바이트 크기 메모리 라인은 22곳의 캐시 라인 중 한 곳의 캐시 라인 중 한 곳으로만 로드 가능곳으로만 로드 가능

실질적으로 유효한 실질적으로 유효한 L1 L1 데이터 캐시의 크기를 감소시키는 효과데이터 캐시의 크기를 감소시키는 효과 1616KBKB 의 배수로 메모리 요소를 접근할 경우 의 배수로 메모리 요소를 접근할 경우 POWER4 POWER4 프로세서 프로세서 L1 L1

데이터 캐시 활용 면에서 최악의 상황 초래데이터 캐시 활용 면에서 최악의 상황 초래

Page 49: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 4949

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (5/17)(5/17)

스트라이드 최소화스트라이드 최소화 스트라이드 값이 스트라이드 값이 1 1 혹은 작음으로 인한 데이터의 순차 접근은 캐시의 혹은 작음으로 인한 데이터의 순차 접근은 캐시의 활용 및 하드웨어 프리패칭 흐름 관점에서 이득활용 및 하드웨어 프리패칭 흐름 관점에서 이득

데이터가 캐시 라인에 로드되면 데이터가 캐시 라인에 로드되면 1616 개의 배정도개의 배정도 ((double precision) double precision) 워드워드 ((word) word) 혹은 혹은 3232 개의 단정도개의 단정도 ((single precision) single precision) 워드가 한 개의 워드가 한 개의 캐시 라인을 차지캐시 라인을 차지 , , 데이터 접근 단위를 나타내는 스트라이드 값이 데이터 접근 단위를 나타내는 스트라이드 값이 배정도의 경우 배정도의 경우 16, 16, 단정도의 경우 단정도의 경우 3232 인 경우 한 개의 캐시 라인에서 인 경우 한 개의 캐시 라인에서 한 개의 워드만을 접근해서 사용하게 되고한 개의 워드만을 접근해서 사용하게 되고 , , 추후 동일 캐시라인 내의 추후 동일 캐시라인 내의 데이터를 접근하려 할 때 캐시 미스데이터를 접근하려 할 때 캐시 미스 ((miss) miss) 발생 확률 높음발생 확률 높음

데이터에 대한 스트라이드 데이터에 대한 스트라이드 1 1 혹은 –혹은 – 11 의 순차접근만이 의 순차접근만이 88 개의 개의 하드웨어 프리패칭 흐름 중 하나를 가동할 수 있음하드웨어 프리패칭 흐름 중 하나를 가동할 수 있음

FortranFortran 의 경우 열 우선의 경우 열 우선 순서 접근순서 접근 , , CC 의 경우 행 우선 순서 접근이 의 경우 행 우선 순서 접근이 유리함유리함

Page 50: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5050

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (6/17)(6/17)

스트라이드 최소화 예스트라이드 최소화 예 FortranFortran

DO J = 1, NDO J = 1, N DO I = 1, NDO I = 1, N A(I,J) = A(I,J) + B(I,J)*C(I,J)A(I,J) = A(I,J) + B(I,J)*C(I,J) ENDDOENDDOENDDOENDDO

CCfor (i=0; i<n; i++)for (i=0; i<n; i++) for (j=0; j<n; j++) {for (j=0; j<n; j++) { a[i][j] += b[i][j]*c[i][j];a[i][j] += b[i][j]*c[i][j]; }}

Page 51: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5151

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (7/17)(7/17)

보통의 경우 보통의 경우 : : 루프 내의 모든 배열을 스트라이드 루프 내의 모든 배열을 스트라이드 11 로만 접근하는 로만 접근하는 것은 어려우며 이런 경우 데이터 캐시 블로킹 방법의 적용이 필요함것은 어려우며 이런 경우 데이터 캐시 블로킹 방법의 적용이 필요함

DO I = 1, NDO I = 1, N DO J = 1, NDO J = 1, N DO K = 1, NDO K = 1, N D(I,J) = D(I,J) + A(J,K)*B(K,I)D(I,J) = D(I,J) + A(J,K)*B(K,I) ENDDOENDDO ENDDOENDDOENDDOENDDO

Page 52: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5252

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (8/17)(8/17)

데이터 프리패칭 흐름 튜닝데이터 프리패칭 흐름 튜닝 POWER4 POWER4 프로세서에서는 데이터 프리패칭이 하드웨어를 이용해서 프로세서에서는 데이터 프리패칭이 하드웨어를 이용해서

이루어짐이루어짐 데이터 프리패칭 장치를 효과적으로 활용하기 위한 튜닝데이터 프리패칭 장치를 효과적으로 활용하기 위한 튜닝

프로그램의 성능에 많은 영향을 주는 루프에서 너무 많거나 적은 수의 프로그램의 성능에 많은 영향을 주는 루프에서 너무 많거나 적은 수의 프리패칭 흐름을 적절한 수로 조절프리패칭 흐름을 적절한 수로 조절

프로그램의 성능에 많은 영향을 주는 루프에서 프리패칭 흐름의 길이프로그램의 성능에 많은 영향을 주는 루프에서 프리패칭 흐름의 길이 ((루프의 반복회수루프의 반복회수 )) 를 너무 짧지 않게 조절를 너무 짧지 않게 조절

루프내의 프리패칭 흐름의 수 조절 방법루프내의 프리패칭 흐름의 수 조절 방법 루프 내에 루프 내에 44 개 개 ~ 8~ 8 개의 하드웨어 프리패칭 흐름에 최적화 되어 있음개의 하드웨어 프리패칭 흐름에 최적화 되어 있음 인접 루프들의 융합인접 루프들의 융합 ((fusing) : -qhot fusing) : -qhot 컴파일러 옵션으로 가능컴파일러 옵션으로 가능 루프의 중간지점 양분루프의 중간지점 양분 ((midpoint bisection)midpoint bisection)

Page 53: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5353

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (9/17)(9/17)

데이터 프리패칭 흐름 튜닝 예데이터 프리패칭 흐름 튜닝 예 인접 루프의 융합인접 루프의 융합

튜닝 전튜닝 전 튜닝 후튜닝 후

DO I=1,NDO I=1,N S = S + B(I) * A(I)S = S + B(I) * A(I)ENDDOENDDODO I=1,NDO I=1,N R(I) = C(I) + D(I)R(I) = C(I) + D(I)ENDDOENDDO

DO I=1,NDO I=1,N S = S + B(I) * A(I)S = S + B(I) * A(I) R(I) = C(I) + D(I)R(I) = C(I) + D(I)ENDDOENDDO

Page 54: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5454

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (10/17)(10/17)

루프의 중간지점 양분루프의 중간지점 양분

튜닝 전튜닝 전 튜닝 후튜닝 후

DO I=1,NDO I=1,N S = S + B(I) * A(I)S = S + B(I) * A(I)ENDDOENDDO

NHALF = N/2NHALF = N/2S0=0.D0S0=0.D0S1=0.D0S1=0.D0DO I=1,NHALFDO I=1,NHALF S0 = S0 + A(I)*B(I)S0 = S0 + A(I)*B(I) S1 = S1 + A(I+NHALF)*B(I+NHALF)S1 = S1 + A(I+NHALF)*B(I+NHALF)ENDDOENDDOIF(2*NHALF.NE.N) S0 = S0 + A(N)*B(N)IF(2*NHALF.NE.N) S0 = S0 + A(N)*B(N)S = S0+S1S = S0+S1

Page 55: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5555

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (11/17)(11/17)

데이터 프리패칭 흐름의 수에 따른 데이터 프리패칭 흐름의 수에 따른 POWER4 POWER4 데이터 전송률데이터 전송률

Page 56: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5656

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (12/17)(12/17)

L1 L1 캐시의 세트 조합성의 특성 고려 캐시의 세트 조합성의 특성 고려 배열의 주요 차원배열의 주요 차원 ((leading dimension)leading dimension) 을 을 22 의 고 제곱의 배수로 의 고 제곱의 배수로

정하지 말 것정하지 말 것 L1 L1 캐시의 세트 조합성 특성 고려 예캐시의 세트 조합성 특성 고려 예

튜닝 전 튜닝 전 : 2048 : 2048 x REAL*8 = 16 KB, x REAL*8 = 16 KB, 총 총 75 75 캐시 라인 접근캐시 라인 접근 , , 모든 캐시 모든 캐시 라인이 같은 합동 클래스에 존재라인이 같은 합동 클래스에 존재 , 2, 2 웨이 세트 조합성을 갖는 웨이 세트 조합성을 갖는 L1 L1 데이터 데이터 캐시에서 오직 캐시에서 오직 22 개의 캐시 라인만 활용 가능개의 캐시 라인만 활용 가능

개선 방법 개선 방법 : : 배열의 주요 차원을 배열의 주요 차원을 2064(2048+16, 2064(2048+16, 캐시 라인 길이캐시 라인 길이 ), ), 2056( 2048+8, 2056( 2048+8, 캐시 라인 반 길이캐시 라인 반 길이 ), 2046(2048–2) ), 2046(2048–2) 등의 크기로 정의등의 크기로 정의

튜닝 전튜닝 전 튜닝 후튜닝 후

REAL*8 A(2048,75)REAL*8 A(2048,75)DO I=1, 75DO I=1, 75 A(100,I) = A(100,I)*1.15A(100,I) = A(100,I)*1.15ENDDOENDDO

REAL*8 A(2046,75)REAL*8 A(2046,75)DO I=1, 75DO I=1, 75 A(100,I) = A(100,I)*1.15A(100,I) = A(100,I)*1.15ENDDOENDDO

Page 57: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5757

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (13/17)(13/17)

데이터 캐시 블로킹데이터 캐시 블로킹 처리할 데이터처리할 데이터 (( 배열배열 )) 가 너무 커서 캐시에 맞지 않으면가 너무 커서 캐시에 맞지 않으면 캐시에 맞는 캐시에 맞는

크기의 블록들로 나누어서 처리하는 것크기의 블록들로 나누어서 처리하는 것 POWER4 POWER4 시스템에서는 시스템에서는 14401440KB KB 크기의 크기의 L2 L2 캐시를 맞출 대상으로 캐시를 맞출 대상으로

함함 블로킹의 효과 여부를 결정짓는 두 가지 요소블로킹의 효과 여부를 결정짓는 두 가지 요소

스트라이드 스트라이드 1 : 1 : 모든 데이터가 스트라이드 모든 데이터가 스트라이드 11 로 접근되는지의 여부로 접근되는지의 여부 데이터 재사용 데이터 재사용 : : 각 데이터 요소들이 하나 이상의 산술 연산에서 각 데이터 요소들이 하나 이상의 산술 연산에서

사용되는지의 여부사용되는지의 여부 블로킹의 효과 결정 요소의 조합에 따른 효과 여부블로킹의 효과 결정 요소의 조합에 따른 효과 여부

스트라이드 스트라이드 1, 1, 데이터 재사용 없을 경우 데이터 재사용 없을 경우 : : 블로킹 이득 없음블로킹 이득 없음DO J = 1, N !Summed dot productsDO J = 1, N !Summed dot products DO I = 1, NDO I = 1, N S = S + A(I,J)*B(I,J) !Each elements of A and B used just onceS = S + A(I,J)*B(I,J) !Each elements of A and B used just once ENDDOENDDO

ENDDOENDDO

Page 58: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5858

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (14/17)(14/17) 일부 배열 스트라이드 일부 배열 스트라이드 1 1 아니고아니고 , , 데이터 재사용 없을 경우 데이터 재사용 없을 경우 : : 어느 정도 어느 정도 블로킹 이득 있음블로킹 이득 있음

스트라이드 스트라이드 1, 1, 많은 데이터 재사용의 경우 많은 데이터 재사용의 경우 : : 어느 정도 블로킹 이득 어느 정도 블로킹 이득 있음있음

DO J = 1, N !Summed dot products with transposed arrayDO J = 1, N !Summed dot products with transposed array DO I = 1, NDO I = 1, N S = S + A(J,IS = S + A(J,I)*)*B(I,J)B(I,J) ENDDOENDDOENDDOENDDO

DO IDO I = 1, = 1, N !Matrix multiply transposeN !Matrix multiply transpose DO J = 1, NDO J = 1, N DO K = 1, NDO K = 1, N D(I,J) = D(I,J) + A(K,JD(I,J) = D(I,J) + A(K,J)*)*B(K,I)B(K,I) ENDDOENDDO ENDDOENDDOENDDOENDDO

Page 59: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 5959

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (15/17)(15/17) 일부 배열 스트라이드 일부 배열 스트라이드 1 1 아니고아니고 , , 많은 데이터 재사용의 경우 많은 데이터 재사용의 경우 : : 블로킹 블로킹

필수이며필수이며 , , 컴파일러 옵션을 사용하지 않고 일반적으로 수동 튜닝컴파일러 옵션을 사용하지 않고 일반적으로 수동 튜닝

블로킹 예블로킹 예블록의 크기 블록의 크기 = = NBxNB NBxNB 요소 수요소 수이 예에서 블로킹이 효과적으로 되기 위해서는 세 개의 이 예에서 블로킹이 효과적으로 되기 위해서는 세 개의

NBxNB NBxNB 블록들이 블록들이 L2 L2 캐시에 동시에 로드될 수 있도록 캐시에 동시에 로드될 수 있도록 NBNB의 크기가 결정되어야 함의 크기가 결정되어야 함

POWER4 POWER4 칩의 경우 두 개의 프로세서가 칩의 경우 두 개의 프로세서가 L2L2 를 공유하므로 를 공유하므로 NB NB 크기의 결정이 좀 더 복잡해 짐크기의 결정이 좀 더 복잡해 짐

DO IDO I = 1, = 1, N !Matrix multiplyN !Matrix multiply DO J = 1, NDO J = 1, N DO K = 1, NDO K = 1, N D(I,J) = D(I,J) + A(JD(I,J) = D(I,J) + A(J,,K)*B(K,I)K)*B(K,I) ENDDOENDDO ENDDOENDDOENDDOENDDO

Page 60: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6060

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (16/17)(16/17) 블로킹 예블로킹 예

DO IIDO II = 1, = 1, N, NB !3 blocking loopsN, NB !3 blocking loops DO JJ = 1, N, NBDO JJ = 1, N, NB DO KK = 1, N, NBDO KK = 1, N, NB DO I = II, MIN(N,II+NB-1) !In-cache loops STARTDO I = II, MIN(N,II+NB-1) !In-cache loops START DO J = JJ, MIN(N, JJ+NB-1)DO J = JJ, MIN(N, JJ+NB-1) DO K = KK, MIN(N, KK+NB-1)DO K = KK, MIN(N, KK+NB-1) D(I,J) = D(I,JD(I,J) = D(I,J) + ) + A(J,K)*B(K,I)A(J,K)*B(K,I) ENDDOENDDO ENDDOENDDO ENDDO !In-cache loops ENDENDDO !In-cache loops END ENDDOENDDO ENDDOENDDOENDDOENDDO

Page 61: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6161

캐시 메모리를 위한 튜닝 캐시 메모리를 위한 튜닝 (17/17)(17/17)

N N 바이트의 임의 데이터를 접근하기 위한 지연 사이클바이트의 임의 데이터를 접근하기 위한 지연 사이클

Page 62: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6262

FPUFPU 를 위한 튜닝 를 위한 튜닝 (1/13)(1/13)

POWER4 FPUPOWER4 FPU 의 특성의 특성 22FPU / FPU / 프로세서프로세서 22 개의 개의 FPUFPU 가 가 L1 L1 캐시캐시 , 72, 72 개 실제개 실제 ((physical) 64physical) 64 비트 부동소수점 비트 부동소수점

레지스터 공유레지스터 공유 어셈블러 프로그램에서는 어셈블러 프로그램에서는 renamingrenaming 을 통해 을 통해 7272 개의 실제 개의 실제

레지스터에 대응되는레지스터에 대응되는 ((mapped) 32mapped) 32 개의 논리개의 논리 ((architected) architected) 레지스터를 사용해서만 부동소수점 연산을 수행레지스터를 사용해서만 부동소수점 연산을 수행

모든 부동소수점 연산은 논리적으로 부동소수점 레지스터만을 모든 부동소수점 연산은 논리적으로 부동소수점 레지스터만을 사용하는 레지스터 대 레지스터 연산 동작사용하는 레지스터 대 레지스터 연산 동작

단정도단정도 변수도 배정도 변수와 동일한 변수도 배정도 변수와 동일한 6464 비트 레지스터 사용비트 레지스터 사용 기본 부동소수점 연산은 배정도 기본 부동소수점 연산은 배정도 FMA(multiply/add) FMA(multiply/add) 연산연산

곱셈과 덧셈 연산을곱셈과 덧셈 연산을 동시에 수행하며 빼기동시에 수행하며 빼기 , , 음수 및 단정도 변형 포함음수 및 단정도 변형 포함 연산부분에서 연산부분에서 66 사이클 소요사이클 소요 , , 슈퍼스칼라 파이프라이닝 시 슈퍼스칼라 파이프라이닝 시 11 사이클 사이클

소요소요 최악의 경우 – 최악의 경우 – 1FMA / 61FMA / 6 사이클사이클 , , 최고의 경우 – 최고의 경우 – 22FMA / FMA / 사이클사이클

Page 63: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6363

FPUFPU 를 위한 튜닝 를 위한 튜닝 (2/13)(2/13)

POWER3 POWER3 프로세서에서 프로세서에서 FPUFPU 의 슈퍼스칼라 파이프라인의 슈퍼스칼라 파이프라인

Page 64: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6464

FPUFPU 를 위한 튜닝 를 위한 튜닝 (3/13)(3/13)

기타 부동소수점 연산기타 부동소수점 연산 덧셈덧셈 , , 뺄셈뺄셈 , , 곱셈 연산은 곱셈 연산은 FMA FMA 연산으로 변환연산으로 변환 , , 같은 처리 시간 소요같은 처리 시간 소요 부동소수점 나눗셈 연산 부동소수점 나눗셈 연산 : : 슈퍼스칼라 파이프라인을 이용하지 않음슈퍼스칼라 파이프라인을 이용하지 않음

명령어명령어 소요 사이클 수소요 사이클 수

부동소수점 덧셈부동소수점 덧셈 , , 뺄셈뺄셈 , , 곱셈곱셈 , , FMAFMA

11

부동소수점 나눗셈부동소수점 나눗셈 3030

하드웨어 제곱근하드웨어 제곱근 3636

내재함수 내재함수 sin, cossin, cos 15 ~ 4515 ~ 45

내재함수 내재함수 tantan 110110

내재함수 내재함수 powpow 405 (405 (MASS 183)MASS 183)

내재함수 내재함수 expexp 89 (89 (MASS 42)MASS 42)

내재함수 내재함수 loglog 165 (165 (MASS 84)MASS 84)

내재함수 내재함수 sqrtsqrt 125 (125 (MASS72)MASS72)

정수 덧셈뺄셈 정수 덧셈뺄셈 / / 곱셈 곱셈 / / 나눗셈나눗셈 1 / 3 / 301 / 3 / 30

Page 65: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6565

FPUFPU 를 위한 튜닝 를 위한 튜닝 (4/13)(4/13)

최고의 최고의 GFlopsGFlops 를 위한 수치 연산 루프의 조율 방법를 위한 수치 연산 루프의 조율 방법 L1L1 과 과 L2 L2 캐시 내에서 효율적으로 동작하도록 조정캐시 내에서 효율적으로 동작하도록 조정 나눗셈나눗셈 , , 제곱근제곱근 , , 함수 호출 등을 금지함수 호출 등을 금지 루프 내에 루프 내에 FMA FMA 연산만 포함하도록 조정연산만 포함하도록 조정 FMAFMA 연산들을 독립적이고연산들을 독립적이고 , , 깊이 깊이 66 의 의 FMA FMA 연산 파이프라인 두 연산 파이프라인 두

개를 채우기 위해서 개를 채우기 위해서 1212 개 이상 포함하도록 조정개 이상 포함하도록 조정 루프가 루프가 FMAFMA 에 한정에 한정 ((bound)bound) 되도록 조정되도록 조정

FMA FMA 연산에 소요되는 사이클과 연산에 소요되는 사이클과 FMA FMA 이외의 연산에 소요되는 이외의 연산에 소요되는 사이클을 비교사이클을 비교

RISC RISC 프로세서의 특성상 프로세서의 특성상 FMA FMA 이외의 연산들이 이외의 연산들이 FMA FMA 연산과 동시에 연산과 동시에 실행될 것이므로실행될 것이므로 , , FMA FMA 연산에 소요되는 사이클 수와 동일하거나 더 연산에 소요되는 사이클 수와 동일하거나 더 적게 수행되도록 조정하여 전체 연산이 적게 수행되도록 조정하여 전체 연산이 FMA FMA 연산에 의해 한정되도록 연산에 의해 한정되도록 조정조정

Page 66: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6666

FPUFPU 를 위한 튜닝 를 위한 튜닝 (5/13)(5/13)

FPUFPU 를 위한 튜닝를 위한 튜닝 캐시 메모리를 위한 튜닝과는 다르게 컴파일러에 의해서 최적화캐시 메모리를 위한 튜닝과는 다르게 컴파일러에 의해서 최적화 안쪽 루프의 언롤링안쪽 루프의 언롤링

FPU FPU 파이프라인을 최대한 활용할 수 있도록 튜닝파이프라인을 최대한 활용할 수 있도록 튜닝 루프 내에 적어도 루프 내에 적어도 1212 개의 독립적인 개의 독립적인 FMA FMA 연산이 포함되어야 함연산이 포함되어야 함 L1 L1 캐시 지연을 극복하기 위해 명령어 흐름 상 로드가 캐시 지연을 극복하기 위해 명령어 흐름 상 로드가 FMAFMA 보다 적어도 보다 적어도

44 사이클 정도사이클 정도 선행되도록 조정선행되도록 조정 로드와 스토어의 수가 로드와 스토어의 수가 FMA FMA 연산의 수보다 작거나 같아야 하며연산의 수보다 작거나 같아야 하며 , , 그렇지 그렇지

않으면 로드않으면 로드 // 스토어 시간이 지배적이 됨스토어 시간이 지배적이 됨 수동 언롤링을 할 때는 –수동 언롤링을 할 때는 – qnounroll qnounroll 옵션으로 컴파일러와의 중복을 옵션으로 컴파일러와의 중복을

방지하고방지하고 , , 보통은 컴파일러에 의해서 자동으로 최적화할 수 있음보통은 컴파일러에 의해서 자동으로 최적화할 수 있음 바깥쪽 루프의 언롤링바깥쪽 루프의 언롤링

로드로드 ++ 스토어에 대한 스토어에 대한 FMA FMA 연산의 비를 증가시키고자 할 때 사용연산의 비를 증가시키고자 할 때 사용 데이터 재사용의 경우에 적용 가능하며데이터 재사용의 경우에 적용 가능하며 , , 보통 수동으로 언롤링보통 수동으로 언롤링

Page 67: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6767

FPUFPU 를 위한 튜닝 를 위한 튜닝 (6/13)(6/13)

바깥쪽 루프 언롤링의 예 바깥쪽 루프 언롤링의 예 11 튜닝 전튜닝 전

스트라이드 스트라이드 11 이 되도록 잘 작성되었으나이 되도록 잘 작성되었으나 , , 로드로드 ++ 스토어 연산에 한정됨스토어 연산에 한정됨 컴파일러가 안쪽 루프를 언롤링해도 컴파일러가 안쪽 루프를 언롤링해도 FMA FMA 연산에 한정되지 않음연산에 한정되지 않음

안쪽 루프 안쪽 루프 44회 회 : 8: 8 로드로드 ((X(J), A(J,I)), 0X(J), A(J,I)), 0 스토어스토어 , 4, 4FMAFMA 수동으로 바깥쪽 루프를 언롤링해서 수동으로 바깥쪽 루프를 언롤링해서 FMA FMA 연산에 한정되도록 조정해야 연산에 한정되도록 조정해야

함함

DO I = 1, NDO I = 1, N DO J = 1, NDO J = 1, N Y(I) = Y(I) + X(J)*A(J,I)Y(I) = Y(I) + X(J)*A(J,I) ENDDOENDDOENDDOENDDO

Page 68: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6868

FPUFPU 를 위한 튜닝 를 위한 튜닝 (7/13)(7/13)

튜닝 후튜닝 후

루프 언롤링 깊이루프 언롤링 깊이 ((depth) 4depth) 4까지 튜닝한 예까지 튜닝한 예 로드로드 ++ 스토어 연산에 대한 스토어 연산에 대한 FMA FMA 연산의 비가 튜닝 전보다 증가 됨연산의 비가 튜닝 전보다 증가 됨

안쪽 루프 안쪽 루프 44회 회 : 5: 5 로드로드 ((X(J), A(J,I)…A(J,I+3)), 0X(J), A(J,I)…A(J,I+3)), 0 스토어스토어 , , 44FMAFMA

DO I = 1, N, 4DO I = 1, N, 4 S0 = Y(I)S0 = Y(I) S1 = Y(I+1)S1 = Y(I+1) S2 = Y(I+2)S2 = Y(I+2) S3 = Y(I+3)S3 = Y(I+3) DO J = 1, NDO J = 1, N S0 = S0 + X(J)*A(J,I)S0 = S0 + X(J)*A(J,I) S1 = S1 + X(J)*A(J,I+1)S1 = S1 + X(J)*A(J,I+1) S2 = S2 + X(J)*A(J,I+2)S2 = S2 + X(J)*A(J,I+2) S3 = S3 + X(J)*A(J,I+3)S3 = S3 + X(J)*A(J,I+3) ENDDOENDDO

Y(I) = S0Y(I) = S0 Y(I+1) = S1Y(I+1) = S1 Y(I+2) = S2Y(I+2) = S2 Y(I+3) = S3Y(I+3) = S3ENDDOENDDO

Page 69: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 6969

FPUFPU 를 위한 튜닝 를 위한 튜닝 (8/13)(8/13)

바깥쪽 루프 언롤링의 효과바깥쪽 루프 언롤링의 효과 (( 행렬행렬 --벡터 곱벡터 곱 , 1.1, 1.1GHz)GHz)

Page 70: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7070

FPUFPU 를 위한 튜닝 를 위한 튜닝 (9/13)(9/13)

바깥쪽 루프 언롤링의 예 바깥쪽 루프 언롤링의 예 22 행렬 곱에 대한 행렬 곱에 대한 MxN MxN 언롤링언롤링 튜닝 전튜닝 전

행렬 곱 알고리즘의 루프에서 데이터 캐시 블로킹 테크닉을 적용한 행렬 곱 알고리즘의 루프에서 데이터 캐시 블로킹 테크닉을 적용한 코드가 복잡하게 보이는 것은 줄이기 위해 블로킹 루프는 제외시키고 코드가 복잡하게 보이는 것은 줄이기 위해 블로킹 루프는 제외시키고 캐시에 들어가는 부분만 표시캐시에 들어가는 부분만 표시

로드로드 ++ 스토어 연산에 한정됨스토어 연산에 한정됨안쪽 루프 안쪽 루프 : 2: 2 로드로드 ((A(J,K), B(K,I)), 0A(J,K), B(K,I)), 0 스토어스토어 , 1, 1FMAFMA

DO I = II, MIN(N,II+NB-1)DO I = II, MIN(N,II+NB-1) DO J = JJ, MIN(N,JJ+NB-1)DO J = JJ, MIN(N,JJ+NB-1) DO K = KK, MIN(N,KK+NB-1)DO K = KK, MIN(N,KK+NB-1) D(I,J) = D(I,J) + A(J,K)*B(K,I)D(I,J) = D(I,J) + A(J,K)*B(K,I) ENDDOENDDO ENDDOENDDOENDDOENDDO

Page 71: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7171

FPUFPU 를 위한 튜닝 를 위한 튜닝 (10/13)(10/13)

튜닝 튜닝 1 : 1 : 임시 변수의 도입임시 변수의 도입

개선된 듯 보이지만개선된 듯 보이지만 , , 안쪽 루프에서 보면 튜닝 전과 별 차이 없음안쪽 루프에서 보면 튜닝 전과 별 차이 없음 로드로드 ++ 스토어에 한정됨스토어에 한정됨

DO I = II, MIN(N,II+NB-1)DO I = II, MIN(N,II+NB-1) DO J = JJ, MIN(N,JJ+NB-1)DO J = JJ, MIN(N,JJ+NB-1) S = D(I,J)S = D(I,J) DO K = KK, MIN(N,KK+NB-1)DO K = KK, MIN(N,KK+NB-1) S = S + A(J,K)*B(K,I)S = S + A(J,K)*B(K,I) ENDDOENDDO ENDDOENDDOENDDOENDDO

Page 72: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7272

FPUFPU 를 위한 튜닝 를 위한 튜닝 (11/13)(11/13)

튜닝 튜닝 2 : 52 : 5x4 x4 언롤링 언롤링 (1/3)(1/3)DO I = II, MIN(N,II+NB-1), 5DO I = II, MIN(N,II+NB-1), 5 DO J = JJ, MIN(N,JJ+NB-1), 4DO J = JJ, MIN(N,JJ+NB-1), 4 S00 = D(I+0,J+0)S00 = D(I+0,J+0) S10 = D(I+1,J+0)S10 = D(I+1,J+0) S20 = D(I+2,J+0)S20 = D(I+2,J+0) S30 = D(I+3,J+0)S30 = D(I+3,J+0) S40 = D(I+4,J+0)S40 = D(I+4,J+0) S01 = D(I+0,J+1)S01 = D(I+0,J+1) S11 = D(I+1,J+1)S11 = D(I+1,J+1) S21 = D(I+2,J+1)S21 = D(I+2,J+1) S31 = D(I+3,J+1)S31 = D(I+3,J+1) S41 = D(I+4,J+1)S41 = D(I+4,J+1) S02 = D(I+0,J+2)S02 = D(I+0,J+2) S12 = D(I+1,J+2)S12 = D(I+1,J+2) S22 = D(I+2,J+2)S22 = D(I+2,J+2)

S32 = D(I+3,J+2)S32 = D(I+3,J+2) S42 = D(I+4,J+2)S42 = D(I+4,J+2) S03 = D(I+0,J+3)S03 = D(I+0,J+3) S13 = D(I+1,J+3)S13 = D(I+1,J+3) S23 = D(I+2,J+3)S23 = D(I+2,J+3) S33 = D(I+3,J+3)S33 = D(I+3,J+3) S43 = D(I+4,J+3)S43 = D(I+4,J+3) DO K = KK, MIN(N,KK+NB-1)DO K = KK, MIN(N,KK+NB-1) S00 = S00 + S00 = S00 + A(J+0,K)*B(K,I+0)A(J+0,K)*B(K,I+0) S10 = S10 + S10 = S10 + A(J+0,K)*B(K,I+1)A(J+0,K)*B(K,I+1) S20 = S20 + S20 = S20 + A(J+0,K)*B(K,I+2)A(J+0,K)*B(K,I+2) S30 = S30 + S30 = S30 + A(J+0,K)*B(K,I+3)A(J+0,K)*B(K,I+3) S40 = S40 + S40 = S40 + A(J+0,K)*B(K,I+4)A(J+0,K)*B(K,I+4) S01 = S01 + S01 = S01 + A(J+1,K)*B(K,I+0)A(J+1,K)*B(K,I+0) S11 = S11 + S11 = S11 + A(J+1,K)*B(K,I+1)A(J+1,K)*B(K,I+1)

Page 73: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7373

FPUFPU 를 위한 튜닝 를 위한 튜닝 (12/13)(12/13)

튜닝 튜닝 2 : 52 : 5x4 x4 언롤링 언롤링 (2/3)(2/3) S21 = S21 + S21 = S21 + A(J+1,K)*B(K,I+2)A(J+1,K)*B(K,I+2) S31 = S31 + S31 = S31 + A(J+1,K)*B(K,I+3)A(J+1,K)*B(K,I+3) S41 = S41 + S41 = S41 + A(J+1,K)*B(K,I+4)A(J+1,K)*B(K,I+4) S02 = S02 + S02 = S02 + A(J+2,K)*B(K,I+0)A(J+2,K)*B(K,I+0) S12 = S12 + S12 = S12 + A(J+2,K)*B(K,I+1)A(J+2,K)*B(K,I+1) S22 = S22 + S22 = S22 + A(J+2,K)*B(K,I+2)A(J+2,K)*B(K,I+2) S32 = S32 + S32 = S32 + A(J+2,K)*B(K,I+3)A(J+2,K)*B(K,I+3) S42 = S42 + S42 = S42 + A(J+2,K)*B(K,I+4)A(J+2,K)*B(K,I+4) S03 = S03 + S03 = S03 + A(J+3,K)*B(K,I+0)A(J+3,K)*B(K,I+0) S13 = S13 + S13 = S13 + A(J+3,K)*B(K,I+1)A(J+3,K)*B(K,I+1) S23 = S23 + S23 = S23 + A(J+3,K)*B(K,I+2)A(J+3,K)*B(K,I+2) S33 = S33 + S33 = S33 + A(J+3,K)*B(K,I+3)A(J+3,K)*B(K,I+3) S43 = S43 + S43 = S43 + A(J+3,K)*B(K,I+4)A(J+3,K)*B(K,I+4) ENDDOENDDO D(I+0,J+0) = S00D(I+0,J+0) = S00

D(I+1,J+0) = S10D(I+1,J+0) = S10 D(I+2,J+0) = S20D(I+2,J+0) = S20 D(I+3,J+0) = S30D(I+3,J+0) = S30 D(I+4,J+0) = S40D(I+4,J+0) = S40 D(I+0,J+1) = S01D(I+0,J+1) = S01 D(I+1,J+1) = S11D(I+1,J+1) = S11 D(I+2,J+1) = S21D(I+2,J+1) = S21 D(I+3,J+1) = S31D(I+3,J+1) = S31 D(I+4,J+1) = S41D(I+4,J+1) = S41 D(I+0,J+2) = S02D(I+0,J+2) = S02 D(I+1,J+2) = S12D(I+1,J+2) = S12 D(I+2,J+2) = S22D(I+2,J+2) = S22 D(I+3,J+2) = S32D(I+3,J+2) = S32 D(I+4,J+2) = S42D(I+4,J+2) = S42 D(I+0,J+3) = S03D(I+0,J+3) = S03

Page 74: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7474

FPUFPU 를 위한 튜닝 를 위한 튜닝 (13/13)(13/13)

튜닝 튜닝 2 : 52 : 5x4 x4 언롤링 언롤링 (3/3)(3/3)

안쪽 루프 안쪽 루프 : 9: 9 로드로드 ((A(J+0,K)…A(J+3,K), B(K,I+0)…B(K,I+4)), 20FMAA(J+0,K)…A(J+3,K), B(K,I+0)…B(K,I+4)), 20FMA 29 29 부동소수점 레지스터 사용부동소수점 레지스터 사용 행렬의 인수분해행렬의 인수분해 ((factorization)factorization) 에서도 유사한 방법 적용 가능에서도 유사한 방법 적용 가능 ESSLESSL 의 의 DGEMM() DGEMM() 함수도 비슷한 최적화 방법을 적용함수도 비슷한 최적화 방법을 적용

D(I+1,J+3) = S13D(I+1,J+3) = S13 D(I+2,J+3) = S23D(I+2,J+3) = S23 D(I+3,J+3) = S33D(I+3,J+3) = S33 D(I+4,J+3) = S43D(I+4,J+3) = S43 ENDDOENDDOENDDOENDDO

Page 75: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7575

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (1/15)(1/15)

최적화 레벨 옵션최적화 레벨 옵션 컴파일러를 사용하는데 있어서 가장 흔히 사용하는 옵션컴파일러를 사용하는데 있어서 가장 흔히 사용하는 옵션 시스템 혹은 컴파일러 제조업체마다 약간의 차이가 있지만시스템 혹은 컴파일러 제조업체마다 약간의 차이가 있지만 , , 보통 보통 --OO

로 시작하며 로 시작하며 --O0, -O2 O0, -O2 및 및 --O3 O3 정도는 공통적으로 유사한 의미로 사용정도는 공통적으로 유사한 의미로 사용 --qoptimize=n qoptimize=n 혹은 혹은 --OnOn 으로 지정하며으로 지정하며 , , nn 은 다음 중의 한 가지 값은 다음 중의 한 가지 값

0 : 0 : 빠른 컴파일 및 완전한 디버깅 지원빠른 컴파일 및 완전한 디버깅 지원 2 : 2 : 저수준의 최적화를 수행하며저수준의 최적화를 수행하며 , , 프로시저 경계에 한하는 부분적인 프로시저 경계에 한하는 부분적인 디버깅 지원디버깅 지원

3 : 3 : 레벨 레벨 22 보다 더 많은 최적화를 수행하며보다 더 많은 최적화를 수행하며 , , 긴 컴파일 시간과 긴 컴파일 시간과 시스템자원을 소모 함시스템자원을 소모 함 . . 매크로가 아닌 경우의 최고 최적화 레벨매크로가 아닌 경우의 최고 최적화 레벨

4 : ‘-4 : ‘-O3 -qhot -qipa -qarch=auto -qtune=auto –qcache=auto’ O3 -qhot -qipa -qarch=auto -qtune=auto –qcache=auto’ 매크로매크로 5 : ‘-5 : ‘-O4 -qipa=level=2’O4 -qipa=level=2’ 매크로매크로

프로그램의 실행 성능을 높이기 위해 가장 흔히 사용하는 옵션이며프로그램의 실행 성능을 높이기 위해 가장 흔히 사용하는 옵션이며 , , 디버깅을 위한 컴파일이 아니라면 최소한 레벨 디버깅을 위한 컴파일이 아니라면 최소한 레벨 2, 2, 적어도 레벨 적어도 레벨 33 의 의 최적화 레벨 옵션 사용을 권장최적화 레벨 옵션 사용을 권장

Page 76: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7676

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (2/15)(2/15)

-O -O 혹은 혹은 --O2 O2 사용시의 최적화 내용사용시의 최적화 내용 전체적으로 사용자 변수를 레지스터에 할당전체적으로 사용자 변수를 레지스터에 할당 updateupdate 와 같은 어드레싱 모드의 효과적인 사용와 같은 어드레싱 모드의 효과적인 사용 사용되지 않거나 불필요하게 과한 코드 부분의 제거사용되지 않거나 불필요하게 과한 코드 부분의 제거 변하지 않는 코드 부분을 루프 밖으로 이동변하지 않는 코드 부분을 루프 밖으로 이동 프로그램의 실행 기계에 대한 명령어 스케줄링프로그램의 실행 기계에 대한 명령어 스케줄링 루프 언롤링과 스케줄링루프 언롤링과 스케줄링

-O3 -O3 사용시의 최적화 내용사용시의 최적화 내용 안쪽 루프의 언롤링안쪽 루프의 언롤링 개선된 루프 스케줄링개선된 루프 스케줄링 --qnostrict qnostrict 옵션을 함께 사용하면 –옵션을 함께 사용하면 – qstrict qstrict 옵션에 의한 제한을 무시하는 옵션에 의한 제한을 무시하는 추가적인 최적화를 허용추가적인 최적화를 허용

보통 전체 프로시저에 해당하는 최적화 범위의 확대보통 전체 프로시저에 해당하는 최적화 범위의 확대 암시적으로 적용되는 암시적으로 적용되는 --qmaxmem=-1 qmaxmem=-1 옵션에 의해 최적화를 위해 옵션에 의해 최적화를 위해

사용하는 메모리 제한 없음사용하는 메모리 제한 없음

Page 77: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7777

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (3/15)(3/15)

최적화 레벨 옵션 사용시의 팁최적화 레벨 옵션 사용시의 팁 최적화 레벨 옵션을 사용하기 전에 프로그램의 실행여부를 최적화 레벨 옵션을 사용하기 전에 프로그램의 실행여부를

테스트하고 디버깅테스트하고 디버깅 최적화를 수행하는 컴파일 옵티마이저는 표준에 대한 적합성 여부를 최적화를 수행하는 컴파일 옵티마이저는 표준에 대한 적합성 여부를 검사하고검사하고 , , 표준에 충실히 따른 프로그램의 최적화를 가장 잘 표준에 충실히 따른 프로그램의 최적화를 가장 잘 수행하므로 프로그램을 작성할 때는 표준을 따르도록 작성수행하므로 프로그램을 작성할 때는 표준을 따르도록 작성 Fortran Fortran 프로그램의 경우 서브루틴의 매개 변수들이 별칭프로그램의 경우 서브루틴의 매개 변수들이 별칭 ((alias) alias) 규칙을 규칙을

따르도록따르도록 C C 프로그램의 경우 포인터를 사용할 때의 형프로그램의 경우 포인터를 사용할 때의 형 ((type) type) 제한을 따르도록제한을 따르도록 모든 공유변수들이 휘발성모든 공유변수들이 휘발성 ((volatile)volatile) 의 특성을 가짐을 명시한다의 특성을 가짐을 명시한다 ..

우선우선 , , 프로그램을 구성하는 최대한 많은 코드 부분을 –프로그램을 구성하는 최대한 많은 코드 부분을 – O2O2 로 컴파일로 컴파일 --O2O2 로 문제점이 생기는 부분에 대해서는 최적화 레벨 옵션의 사용을 로 문제점이 생기는 부분에 대해서는 최적화 레벨 옵션의 사용을

포기하지 말고 포기하지 말고 --qalias=noansi qalias=noansi 혹은 혹은 --qalias=nostd qalias=nostd 옵션을 추가로 옵션을 추가로 적용적용

Page 78: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7878

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (4/15)(4/15)

그 다음그 다음 , -, -O2O2 로 컴파일 된 부분을 포함한 최대한 많은 코드 부분을 로 컴파일 된 부분을 포함한 최대한 많은 코드 부분을 --O3O3 로 컴파일로 컴파일

-O3 -O3 최적화 레벨 옵션으로 문제점이 생기거나 최적화 레벨 옵션으로 문제점이 생기거나 --O2O2 보다 성능저하가 보다 성능저하가 나타난다면 해당 부분에 대해서 나타난다면 해당 부분에 대해서 --O3O3 와 함께 와 함께 --qstrict qstrict 혹은 혹은 --qcompact qcompact 옵션을 추가로 적용옵션을 추가로 적용

그래도 문제점이 없어지지 않는다면그래도 문제점이 없어지지 않는다면 , , 해당 서브루틴이나 파일에 해당 서브루틴이나 파일에 대해서만 대해서만 --O2O2 를 적용하고 를 적용하고 --O2O2 와 함께 와 함께 --qmaxmem=-1 qmaxmem=-1 옵션과 옵션과 --qnostrict qnostrict 옵션을 사용옵션을 사용

실행 대상 시스템 옵션실행 대상 시스템 옵션 IBM XL Fortran IBM XL Fortran 및 및 VisualAge C/C++ VisualAge C/C++ 컴파일러들은 크로스컴파일러컴파일러들은 크로스컴파일러 컴파일된 프로그램을 실행할 시스템의 아키텍처컴파일된 프로그램을 실행할 시스템의 아키텍처 , , 비트 모드비트 모드 , , 공유 공유

메모리 병렬 시스템인지의 여부 등의 특성에 따라 컴파일 옵션을 메모리 병렬 시스템인지의 여부 등의 특성에 따라 컴파일 옵션을 추가로 사용추가로 사용

Page 79: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 7979

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (5/15)(5/15)

ARCH : Power ARCH : Power 혹은 혹은 PowerPC PowerPC 인스트럭션을 사용해서 프로그램을 인스트럭션을 사용해서 프로그램을 생성하도록 제한생성하도록 제한 . -. -qarch=isa qarch=isa 형식으로 지정하며형식으로 지정하며 , , isaisa 는 다음 중의 는 다음 중의 하나하나 com(com(디폴트디폴트 ) : ) : RS/6000 RS/6000 계열의 시스템에서 실행 가능한 코드를 계열의 시스템에서 실행 가능한 코드를 생성하며생성하며 , -, -qtune=pwr2 qtune=pwr2 옵션을 암시적으로 내포옵션을 암시적으로 내포

auto : auto : 컴파일하는 시스템의 아키텍처를 지정한 것과 같음컴파일하는 시스템의 아키텍처를 지정한 것과 같음 ppc : PowerPC ppc : PowerPC 아키텍쳐의 인스트럭션을 사용하는 코드를 생성하며아키텍쳐의 인스트럭션을 사용하는 코드를 생성하며 , 3, 3

22 비트 모드 컴파일 시에는 비트 모드 컴파일 시에는 --qtune=604, 64qtune=604, 64 비트 모드 컴파일 시에는 비트 모드 컴파일 시에는 --qtune=pwr3 qtune=pwr3 옵션을 암시적으로 내포옵션을 암시적으로 내포

pwr3 : POWER3 pwr3 : POWER3 아키텍처의 인스트럭션을 사용하는 코드를 생성하며아키텍처의 인스트럭션을 사용하는 코드를 생성하며 , , --qtune=pwr3 qtune=pwr3 옵션을 암시적으로 내포옵션을 암시적으로 내포

그 외에 아키텍처에 따라 그 외에 아키텍처에 따라 pwr, pwr2, 604, pwr4, ... pwr, pwr2, 604, pwr4, ... 등을 지정등을 지정 TUNE : TUNE : 지정하는 시스템의 아키텍처에서 실행하기 위한 코드의 지정하는 시스템의 아키텍처에서 실행하기 위한 코드의

최적화를 수행최적화를 수행 . -. -qtune=machine qtune=machine 형식으로 지정되며형식으로 지정되며 , , machinemachine 은 은 auto, 604, pwr2, p2sc, pwr3, pwr4, rs64cauto, 604, pwr2, p2sc, pwr3, pwr4, rs64c 중의 하나중의 하나

Page 80: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8080

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (6/15)(6/15) --qtune=autoqtune=auto 는 컴파일하는 시스템의 아키텍처를 지정한 것과 같으며는 컴파일하는 시스템의 아키텍처를 지정한 것과 같으며 , ,

지정된 아키텍처에 대해 자동으로 조율된 코드를 생성지정된 아키텍처에 대해 자동으로 조율된 코드를 생성 . . 특정 아키텍처를 특정 아키텍처를 지정하지 않으면 지정하지 않으면 ARCH ARCH 옵션에 따라 –옵션에 따라 – qtuneqtune 의 기본 값이 지정 됨의 기본 값이 지정 됨

CACHE : CACHE : 프로그램을 실행하고자 하는 시스템의 캐쉬메모리의 설정을 프로그램을 실행하고자 하는 시스템의 캐쉬메모리의 설정을 지정하며지정하며 , , 기본 값은 기본 값은 TUNE TUNE 값에 따라 지정 됨값에 따라 지정 됨 . -. -qcache=level=n: qcache=level=n: cache_spec cache_spec 형식으로 각 캐쉬 레벨별 특성치를 지정하며형식으로 각 캐쉬 레벨별 특성치를 지정하며 , , cache_speccache_spec 의 특성치들을 지정할 때의 지정 요소는 다음과 같음의 특성치들을 지정할 때의 지정 요소는 다음과 같음 type=i|d|c: type=i|d|c: 명령어 캐쉬명령어 캐쉬 , , 데이터 캐쉬데이터 캐쉬 , , 명령어 데이터 혼합 캐쉬와 같은 명령어 데이터 혼합 캐쉬와 같은 캐쉬 타입 지정캐쉬 타입 지정

line=lsz:size=sz:assoc=as: line=lsz:size=sz:assoc=as: 라인 크기와 캐쉬 크기 및 라인 크기와 캐쉬 크기 및 set associativity set associativity 지정지정

cost=c: cost=c: 캐쉬 미스에 대한 캐쉬 미스에 대한 CPU CPU 사이클 단위의 비용을 지정사이클 단위의 비용을 지정 CACHE CACHE 옵션은 옵션은 ARCH ARCH 및 및 TUNE TUNE 옵션에 의해서 지정되므로 보통 옵션에 의해서 지정되므로 보통

지정하지 않아도 되지만지정하지 않아도 되지만 , , 컴파일러 및 옵티마이저가 조건 및 옵션에 따라 컴파일러 및 옵티마이저가 조건 및 옵션에 따라 프로그램을 대폭 변경할 수도 있는 프로그램을 대폭 변경할 수도 있는 --qhot qhot 혹은 –혹은 – qsmp qsmp 옵션을 사용할 때는 옵션을 사용할 때는 캐쉬의 구조를 지정하는 캐쉬의 구조를 지정하는 CACHE CACHE 옵션이 유용하게 쓰일 수 있음옵션이 유용하게 쓰일 수 있음

Page 81: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8181

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (7/15)(7/15)

64/32: 6464/32: 64 비트 모드 혹은 비트 모드 혹은 3232 비트 모드의 어드레싱 모델을 위한 코드 비트 모드의 어드레싱 모델을 위한 코드 생성을 지정생성을 지정 . -. -q32 q32 혹은 –혹은 – q64q64 로 지정로 지정 --q64q64 는 는 AIX V4AIX V4 와 와 AIX V5AIX V5 에서 서로 다른 매직 넘버를 써서 코드를 에서 서로 다른 매직 넘버를 써서 코드를 생성하므로 코드를 양쪽에서 모두 실행할 필요가 있다면 필요에 따라 두 생성하므로 코드를 양쪽에서 모두 실행할 필요가 있다면 필요에 따라 두 개의 실행 파일 혹은 라이브러리를 만들기 위해 따로 컴파일해야 함개의 실행 파일 혹은 라이브러리를 만들기 위해 따로 컴파일해야 함

SMP : SMP : 공유 메모리 병렬 시스템에서 실행할 수 있는 스레드 코드 공유 메모리 병렬 시스템에서 실행할 수 있는 스레드 코드 생성을 지정하며생성을 지정하며 , -, -qsmp[=[no]auto:[no]omp:[no]opt:fine tuning] qsmp[=[no]auto:[no]omp:[no]opt:fine tuning] 형식으로 지정형식으로 지정 autoauto 는 주로 루프와 같은 병렬화 가능 부분에 대해 컴파일러가 사용자의 는 주로 루프와 같은 병렬화 가능 부분에 대해 컴파일러가 사용자의

지시어 삽입 같은 지원 없이 병렬 코드를 자동으로 생성하도록 지시지시어 삽입 같은 지원 없이 병렬 코드를 자동으로 생성하도록 지시 ompomp 는 컴파일러에게 사용자가 명확히 병렬화를 지정하기 위해 는 컴파일러에게 사용자가 명확히 병렬화를 지정하기 위해

OpenMP 1.0 OpenMP 1.0 언어 확장언어 확장 ((language extension)language extension) 을 사용한 부분을 을 사용한 부분을 관찰해서 지시어대로 병렬화 된 코드를 생성하도록 지시관찰해서 지시어대로 병렬화 된 코드를 생성하도록 지시

optopt 는 는 SMP SMP 옵션의 기본 값으로 컴파일러에게 병렬화 및 최적화를 옵션의 기본 값으로 컴파일러에게 병렬화 및 최적화를 지시하며지시하며 , , 최적화는 기본적으로 –최적화는 기본적으로 – O2 –qhotO2 –qhot 와 동일와 동일

Page 82: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8282

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (8/15)(8/15)

SMP SMP 옵션 사용시의 팁옵션 사용시의 팁 --qsmp qsmp 옵션을 사용하기 전에 최적화 및 단일 스레드 방식에서 –옵션을 사용하기 전에 최적화 및 단일 스레드 방식에서 –

qhot qhot 옵션을 사용하여 프로그램의 컴파일 및 실행 이상 유무를 검사옵션을 사용하여 프로그램의 컴파일 및 실행 이상 유무를 검사 --qsmp qsmp 옵션을 사용할 때는 항상 ‘옵션을 사용할 때는 항상 ‘ __r’r’ 로 끝나는 스레드용 컴파일러 로 끝나는 스레드용 컴파일러

명령을 사용명령을 사용 이렇게 컴파일 된 프로그램이 실행될 때는 기본적으로 시스템 내에서 이렇게 컴파일 된 프로그램이 실행될 때는 기본적으로 시스템 내에서

모든 유효 프로세서들을 사용해서 멀티 스레딩 방식으로 실핼될 모든 유효 프로세서들을 사용해서 멀티 스레딩 방식으로 실핼될 것이므로것이므로 , , 유효한 프로세서 수보다 적은 수의 스레드를 사용하고자 유효한 프로세서 수보다 적은 수의 스레드를 사용하고자 하는 것이 아니라면하는 것이 아니라면 , , PARTHDSPARTHDS 나 나 OMP_NUM_THREADSOMP_NUM_THREADS 와 같은 와 같은 스레드 수를 지정하는 환경 변수를 사용하지 않음스레드 수를 지정하는 환경 변수를 사용하지 않음

벤치마크 테스트와 같은 목적으로 시스템이나 노드를 전용벤치마크 테스트와 같은 목적으로 시스템이나 노드를 전용((dedicated)dedicated) 해서 사용한다면 해서 사용한다면 SPINSSPINS 와 와 YIELDS YIELDS 환경 변수의 값을 환경 변수의 값을 00 으로 설정해서 스레드가 으로 설정해서 스레드가 sleep-waiting sleep-waiting 모드로 진입하는 것을 방모드로 진입하는 것을 방지지 , , 프로그램의 실행소요시간을 줄이는 효과를 볼 수 있음프로그램의 실행소요시간을 줄이는 효과를 볼 수 있음

Page 83: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8383

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (9/15)(9/15)

OpenMP OpenMP 프로그램을 디버깅할 때는 컴파일러로부터 디버깅 정보를 프로그램을 디버깅할 때는 컴파일러로부터 디버깅 정보를 보다 정확하게 얻기 위해서 최적화 옵션 없이 –보다 정확하게 얻기 위해서 최적화 옵션 없이 – qsmp=noopt qsmp=noopt 옵션을 옵션을 사용사용

기타 옵션기타 옵션 최적화 레벨 옵션의 –최적화 레벨 옵션의 – O4 O4 및 –및 – O5 O5 매크로 옵션에 포함된 최적화 관련 매크로 옵션에 포함된 최적화 관련

컴파일 옵션 및 기타 유용하게 사용될 수 있는 옵션들컴파일 옵션 및 기타 유용하게 사용될 수 있는 옵션들 HOT(High Order Transformations) HOT(High Order Transformations) 옵션 – 옵션 – FortranFortran

––qhot[=[no]vectoer | arraypad[=n]]qhot[=[no]vectoer | arraypad[=n]] 으로 지정으로 지정 임시변수의 제거임시변수의 제거 , , 문문 ((statement) statement) 융합과 같은 융합과 같은 F90 F90 배열 언어 구문의 배열 언어 구문의

최적화된 처리최적화된 처리 , , 캐쉬캐쉬 //TBL TBL 미스미스 ((miss)miss) 를 줄이기 위한 메모리 위치 개를 줄이기 위한 메모리 위치 개선선 , , 하드웨어 프리패칭의 최적 사용하드웨어 프리패칭의 최적 사용 , , 로드로드 // 스토어와 부동소수점 루프 스토어와 부동소수점 루프 연산의 균형 유지를 위해 중첩 루프를 교환하는 등의 고 수준 변형연산의 균형 유지를 위해 중첩 루프를 교환하는 등의 고 수준 변형 , , 역역수수 , , 제곱근제곱근 , , 삼각함수 등의 벡터 내재함수삼각함수 등의 벡터 내재함수 라이브러리를 이용하기 위한 라이브러리를 이용하기 위한 임의의 루프 변형 등을 수행임의의 루프 변형 등을 수행

Page 84: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8484

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (10/15)(10/15)

IPA (Inter-Procedural Analysis) IPA (Inter-Procedural Analysis) 옵션옵션 컴파일과 링크 단계에서 –컴파일과 링크 단계에서 – qipa[=level=n | inline= | fine tuning]qipa[=level=n | inline= | fine tuning] 으로 지정으로 지정 실행 파일이나 공유 목적 파일 등의 전체 프로그램 단위로 프로시저 간의 실행 파일이나 공유 목적 파일 등의 전체 프로그램 단위로 프로시저 간의

상호 분석을 통해서 최적화를 수행할 수 있으며 최적화 범위를 확장시킴상호 분석을 통해서 최적화를 수행할 수 있으며 최적화 범위를 확장시킴 level=0 : level=0 : 프로그램 구획화와 단순한 프로시저 상호 최적화프로그램 구획화와 단순한 프로시저 상호 최적화 level=1 : level=1 : 인라이닝인라이닝 ((inlining)inlining) 과 전체적인 데이터 매핑과 전체적인 데이터 매핑 level=2 : level=2 : 전체적인 별칭 분석전체적인 별칭 분석 , , 특수화특수화 ((specialization), specialization), 프로시저 상호 프로시저 상호

데이터 흐름 처리데이터 흐름 처리 inline= : inline= : 인라이닝의 정확한 사용자 조정인라이닝의 정확한 사용자 조정 fine tuning : fine tuning : 라이브러리 코드의 행동 명시라이브러리 코드의 행동 명시 , , 프로그램 구획화 조율프로그램 구획화 조율 , ,

파일로부터 명령어 판독파일로부터 명령어 판독 PDF (Profile-Directed Feedback) PDF (Profile-Directed Feedback) 옵션옵션

-qpdf1-qpdf1 과 과 --qpdf2qpdf2 로 지정로 지정 --qpdf1qpdf1 은 프로그램의 제어 흐름 데이터 수집을 위해 사용하며은 프로그램의 제어 흐름 데이터 수집을 위해 사용하며 , -, -qpdf2qpdf2 는 는

수집된 데이터를 사용해서 최적화할 때 사용수집된 데이터를 사용해서 최적화할 때 사용 . . 두 옵션을 다음의 세 단계에 두 옵션을 다음의 세 단계에 걸쳐서 사용걸쳐서 사용

Page 85: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8585

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (11/15)(11/15) --qpdf1qpdf1 과 함께 컴파일 및 링크과 함께 컴파일 및 링크 견본 데이터를 통한 프로그램 실행견본 데이터를 통한 프로그램 실행 --qpdf2qpdf2 와 함께 컴파일 및 링크 와 함께 컴파일 및 링크 ((XLF 7.1.1, VA C/C++ V6XLF 7.1.1, VA C/C++ V6 에서는 에서는 --qpdf2qpdf2

와 재링크만 필요와 재링크만 필요 )) 최적화 관련 옵션최적화 관련 옵션

COMPACT : -q[no]compactCOMPACT : -q[no]compact 로 지정하며로 지정하며 , , 선택이 필수적일 때 실행 선택이 필수적일 때 실행 시간 성능을 통해 최종 코드 크기를 감소시간 성능을 통해 최종 코드 크기를 감소

INLINE : -Q[+names | -names | !]INLINE : -Q[+names | -names | !] 로 지정하며로 지정하며 , , 함수 이름으로 함수 이름으로 인라이닝을 통제인라이닝을 통제 . . 컴파일 및 링크 시에 사용 가능컴파일 및 링크 시에 사용 가능

UNROLL : -q[no]unrollUNROLL : -q[no]unroll 로 지정하며로 지정하며 , , 독립적으로 루프 언롤링을 조정독립적으로 루프 언롤링을 조정 . -. -O2O2 와 와 --O3O3 에서는 암시적으로 활성화에서는 암시적으로 활성화

INLGLUE : -q[no]inlglueINLGLUE : -q[no]inlglue 로 지정하며로 지정하며 , , 함수 포인터 및 동적으로 함수 포인터 및 동적으로 한정되는 함수에 대한 콜에 사용되는 ‘한정되는 함수에 대한 콜에 사용되는 ‘ glue’glue’ 코드에 대한 콜을 인라인코드에 대한 콜을 인라인 . . 포인터 포인터 glueglue 는 는 --qtune=pwr4qtune=pwr4 에서 기본적으로 인라인 됨에서 기본적으로 인라인 됨

TBTABLE: TBTABLE: 역추적역추적 ((trace-back) trace-back) 테이블 정보의 생성을 조정테이블 정보의 생성을 조정

Page 86: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8686

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (12/15)(12/15)

부동 소수점 관련 옵션부동 소수점 관련 옵션 FLOAT : -qflot=subopt FLOAT : -qflot=subopt 형식으로 지정하며형식으로 지정하며 , , 부동 소수점 연산의 부동 소수점 연산의

처리에 대한 제어를 지시처리에 대한 제어를 지시 FLTTRAP: -qflttrap=imprecise | enable | ieee_exceptions FLTTRAP: -qflttrap=imprecise | enable | ieee_exceptions 형식으로 형식으로

지정하며지정하며 , , IEEE IEEE 부동 소수점 예외부동 소수점 예외 ((exception)exception) 들을 소프트웨어적으로 들을 소프트웨어적으로 단독 검사할 수 있게 함단독 검사할 수 있게 함

Real Real 및 및 integerinteger 형 데이터의 기본 크기 지정 옵션형 데이터의 기본 크기 지정 옵션 프로그램의 소스 코드에 프로그램의 소스 코드에 kind kind 파라미터를 써서 정의하지 않은 파라미터를 써서 정의하지 않은 integer integer

및 및 realreal 형의 변수 크기를 지정할 때는 형의 변수 크기를 지정할 때는 --qrealsize qrealsize 및 및 --qintsize qintsize 옵션을 옵션을 사용하며사용하며 , , 보통 프로그램을 이기종 시스템 사이에 이식할 때 시스템마다 보통 프로그램을 이기종 시스템 사이에 이식할 때 시스템마다 컴파일러의 기본 변수형 크기가 다르기 때문에 발생하는 문제를 컴파일러의 기본 변수형 크기가 다르기 때문에 발생하는 문제를 컴파일러 옵션 만으로 간단히 해결해 보고자 할 때 사용컴파일러 옵션 만으로 간단히 해결해 보고자 할 때 사용

예 예 : : CRAY CRAY 시스템에서는 시스템에서는 88바이트 바이트 real real 및 및 integerinteger 형이 기본이므로형이 기본이므로 , , 프로그램을 이식할 때 프로그램을 이식할 때 real real 및 및 integerinteger 형의 크기와 관련된 문제형의 크기와 관련된 문제 (( 보통 보통 real real 형의 경우 표현 가능한 유효자리수형의 경우 표현 가능한 유효자리수 , , integer integer 형의 경우 표현 가능한 형의 경우 표현 가능한 정수 값의 범위로 인한 문제정수 값의 범위로 인한 문제 )) 가 발생한 것으로 판단될 경우 가 발생한 것으로 판단될 경우 --qrealsize=8 qrealsize=8 및 및 --qintsize=8 qintsize=8 옵션을 사용해서 문제점을 해결옵션을 사용해서 문제점을 해결

Page 87: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8787

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (13/15)(13/15) RealReal 형 변수 형 변수 : -: -qrealsize=bytes qrealsize=bytes 형식으로 형식으로 REAL REAL 및 및 REALREAL 형에 형에

기반한 기반한 DOUBLE PRECISION, COMPLEX, DOUBLE COMPLEXDOUBLE PRECISION, COMPLEX, DOUBLE COMPLEX 형 형 변수 및 상수들의 기본 크기를 지정하며변수 및 상수들의 기본 크기를 지정하며 , , 지정하지 않으면 지정하지 않으면 44바이트가 바이트가 기본기본 . . 옵션의 값으로는 옵션의 값으로는 44 와 와 88 을 지정을 지정

IntegerInteger 형 변수 형 변수 : -: -qintsize=bytes qintsize=bytes 형식으로 형식으로 INTEGER, LOGICALINTEGER, LOGICAL 형 형 변수 및 상수들의 기본 크기를 지정하며변수 및 상수들의 기본 크기를 지정하며 , , 지정하지 않으면 지정하지 않으면 44바이트가 바이트가 기본기본 . . 옵션의 값으로는 옵션의 값으로는 2, 4, 82, 4, 8 을 지정할 수 있으며을 지정할 수 있으며 , 64, 64 비트 모드 비트 모드 컴파일 옵션인 –컴파일 옵션인 – q64 q64 옵션을 지정해도 기본 값에는 영향을 미치지 않음옵션을 지정해도 기본 값에는 영향을 미치지 않음

프로그램 행동 관련 옵션프로그램 행동 관련 옵션 STRICT: -q[no]strict STRICT: -q[no]strict 형식으로 지정하며형식으로 지정하며 , , 기본 값은 기본 값은 --O0O0 와 와 --O2O2

에서는 에서는 --qstrict, -O3, -O4, -O5qstrict, -O3, -O4, -O5 에서는 에서는 --qnostrictqnostrict. . nostrictnostrict 는 는 컴파일러가 부동 소수점 연산 및 잠재적 예외 명령들의 재정리를 컴파일러가 부동 소수점 연산 및 잠재적 예외 명령들의 재정리를 허용허기 때문에 비트 수준에서의 동일 결과를 내지 않을 수 있음허용허기 때문에 비트 수준에서의 동일 결과를 내지 않을 수 있음

ALIAS (Fortran): -qalias=[no]std:[no]aryovrlp:others ALIAS (Fortran): -qalias=[no]std:[no]aryovrlp:others 형식으로 형식으로 지정하며지정하며 , , 컴파일러가 특정 변수들은 중복 저장 공간을 참조하지 컴파일러가 특정 변수들은 중복 저장 공간을 참조하지 않는다고 가정하는 것을 허용않는다고 가정하는 것을 허용

Page 88: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8888

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (14/15)(14/15) ALIAS (C, C++): -qalias=subopt ALIAS (C, C++): -qalias=subopt 형식으로 지정하며형식으로 지정하며 , , 같은 이름의 같은 이름의

Fortran Fortran 옵션과 유사하지만 포인터를 사용해서 접근하는 저장 공간의 옵션과 유사하지만 포인터를 사용해서 접근하는 저장 공간의 중복에 초점을 맞춤중복에 초점을 맞춤

ASSERT: -qassert=[no]deps | itercnt=n ASSERT: -qassert=[no]deps | itercnt=n 형식으로 지정하며형식으로 지정하며 , , deps(deps( 기본기본 ))는 루프에 의한 메모리 의존성 여부를는 루프에 의한 메모리 의존성 여부를 , , itercntitercnt 는 루프의 반복 카운트 는 루프의 반복 카운트 기대치의 기본 값을 수정기대치의 기본 값을 수정

INTSIZE (Fortran): -qintsize=1|2|4|8 INTSIZE (Fortran): -qintsize=1|2|4|8 형식으로 지정하며형식으로 지정하며 , , INTEGER INTEGER 변수의 기본 크기를 지정변수의 기본 크기를 지정

IGNERRNO (C,C++): -q[no]ignerrno IGNERRNO (C,C++): -q[no]ignerrno 형식으로 지정하며형식으로 지정하며 , , errnoerrno 의 값의 의 값의 필요 여부를 지정필요 여부를 지정

진단에 도움이 되는 옵션진단에 도움이 되는 옵션 LIST: -qlistLIST: -qlist 로 지정하며로 지정하며 , , 컴파일러에게 목적 코드 리스트를 만들도록 지시컴파일러에게 목적 코드 리스트를 만들도록 지시 REPORT (Fortran): -qreport[=smplist] REPORT (Fortran): -qreport[=smplist] 형식으로 지정하며형식으로 지정하며 , , 옵티마이저에게 루프 언롤링옵티마이저에게 루프 언롤링 , , 자동 병렬화 등의 코드의 변형을 묘사하는 자동 병렬화 등의 코드의 변형을 묘사하는 주석과 함께 의사주석과 함께 의사 ((pseudo) Fortran pseudo) Fortran 코드를 포함하는 리포트를 만들도록 코드를 포함하는 리포트를 만들도록 지시지시 . . 리포트에는 데이터 의존성 및 다른 최적화 방해물에 관한 정보도 리포트에는 데이터 의존성 및 다른 최적화 방해물에 관한 정보도 포함포함

Page 89: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 8989

컴파일러를 이용한 최적화 컴파일러를 이용한 최적화 (15/15)(15/15) INITAUTO: -qinitauto=XX INITAUTO: -qinitauto=XX 형식으로 지정하며형식으로 지정하며 , , 모든 자동모든 자동 ((automatic) automatic)

스택 변수들을 주어진 값으로 초기화하는 코드를 만들도록 지시스택 변수들을 주어진 값으로 초기화하는 코드를 만들도록 지시

추천 컴파일 옵션추천 컴파일 옵션 --O3 -qarch=pwr4 -qtune=pwr4O3 -qarch=pwr4 -qtune=pwr4

추가 최적화 옵션추가 최적화 옵션 -O4 -qarch=pwr4 -qtune=pwr4 \-O4 -qarch=pwr4 -qtune=pwr4 \

--qcache=level=1:type=i:size=64:line=128:assoc=0:cost=13 \qcache=level=1:type=i:size=64:line=128:assoc=0:cost=13 \-qcache=level=1:type=d:size=32:line=128:assoc=2:cost=11 \-qcache=level=1:type=d:size=32:line=128:assoc=2:cost=11 \-qcache=level=2:type=c:size=1440:line=128:assoc=8:cost=125-qcache=level=2:type=c:size=1440:line=128:assoc=8:cost=125

Page 90: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9090

튜닝을 위한 컴파일러 지시어 튜닝을 위한 컴파일러 지시어 (1/1)(1/1)

PREFETCHPREFETCH PREFETCH_BY_LOAD (variable_list): issue dummy loads to PREFETCH_BY_LOAD (variable_list): issue dummy loads to

cause the given variables to be prefetched into cache - useful on cause the given variables to be prefetched into cache - useful on Power machines or to activate Power 3 hardware prefetchPower machines or to activate Power 3 hardware prefetch

PREFETCH_FOR_LOAD (variable_list): issue a dcbt instruction PREFETCH_FOR_LOAD (variable_list): issue a dcbt instruction for each of the given variables.for each of the given variables.

PREFETCH_FOR_STORE (variable_list): issue a dcbtst PREFETCH_FOR_STORE (variable_list): issue a dcbtst instruction for each of the given variables.instruction for each of the given variables.

UNROLLUNROLL Specified as [NO]UNROLL [(n)]Specified as [NO]UNROLL [(n)] Used to activate/deactivate compiler unrolling for the following Used to activate/deactivate compiler unrolling for the following

loop.loop. Can be used to give a specific unroll factor.Can be used to give a specific unroll factor.

Page 91: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9191

성능 향상을 위한 코딩 팁 성능 향상을 위한 코딩 팁 (1/5)(1/5)

Compiler-friendly programmingCompiler-friendly programming Compiler-friendly programming idioms can be as useful to Compiler-friendly programming idioms can be as useful to

performance as any of the options or directivesperformance as any of the options or directives Do not excessively hand-optimize your code (e.g. unrolling, Do not excessively hand-optimize your code (e.g. unrolling,

inlining) - this often confuses the compiler (and other inlining) - this often confuses the compiler (and other programmers!) and makes it difficult to optimize for new programmers!) and makes it difficult to optimize for new machinesmachines

Avoid unnecessary use of globals and pointers - when using Avoid unnecessary use of globals and pointers - when using them in a loop, load them into a local before the loop and store them in a loop, load them into a local before the loop and store them back after.them back after.

Avoid breaking your program into too many small functions. If Avoid breaking your program into too many small functions. If you must use small functions, seriously consider using -qipa.you must use small functions, seriously consider using -qipa.

Use register-sized integers (long in C/C++ and INTEGER*4 or Use register-sized integers (long in C/C++ and INTEGER*4 or INTEGER*8 in Fortran) for scalars. For large arrays of integers, INTEGER*8 in Fortran) for scalars. For large arrays of integers, consider using 1 or 2 byte integers or bitfields in C or C++.consider using 1 or 2 byte integers or bitfields in C or C++.

Page 92: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9292

성능 향상을 위한 코딩 팁 성능 향상을 위한 코딩 팁 (2/5)(2/5)

Use the smallest floating point precision appropriate to your Use the smallest floating point precision appropriate to your computation. Use 'long double', 'REAL*16' or 'COMPLEX*32' computation. Use 'long double', 'REAL*16' or 'COMPLEX*32' only when extremely high precision is required.only when extremely high precision is required.

Obey all language aliasing rules (try to avoid -qassert=nostd in Obey all language aliasing rules (try to avoid -qassert=nostd in Fortran and -qalias=noansi in C/C++)Fortran and -qalias=noansi in C/C++)

Use locals wherever possible for loop index variables and Use locals wherever possible for loop index variables and bounds. In C/C++, avoid taking the address of loop indices and bounds. In C/C++, avoid taking the address of loop indices and bounds.bounds.

Keep array index expressions as simple as possible. Where Keep array index expressions as simple as possible. Where indexing needs to be indirect, consider using the indexing needs to be indirect, consider using the PERMUTATION directive.PERMUTATION directive.

Consider using the highly tuned MASS and ESSL libraries rather Consider using the highly tuned MASS and ESSL libraries rather than custom implementations or generic librariesthan custom implementations or generic libraries

Page 93: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9393

성능 향상을 위한 코딩 팁 성능 향상을 위한 코딩 팁 (3/5)(3/5)

Fortran programming tipsFortran programming tips Use the '[mp]xlf90[_r]' or '[mp]xlf95[_r]' driver invocations where Use the '[mp]xlf90[_r]' or '[mp]xlf95[_r]' driver invocations where

possible to ensure portability. If this is not possible, consider possible to ensure portability. If this is not possible, consider using the -qnosave option.using the -qnosave option.

When writing new code, use module variables rather than When writing new code, use module variables rather than common blocks for global storage.common blocks for global storage.

Use modules to group related subroutines and functions.Use modules to group related subroutines and functions. Use INTENT to describe usage of parameters.Use INTENT to describe usage of parameters. Limit the use of ALLOCATABLE arrays and POINTER variables Limit the use of ALLOCATABLE arrays and POINTER variables

to situations which demand dynamic allocation.to situations which demand dynamic allocation. Use CONTAINS only to share thread local storage.Use CONTAINS only to share thread local storage. Avoid the use of -qalias=nostd by obeying Fortran alias rules.Avoid the use of -qalias=nostd by obeying Fortran alias rules. When using array assignment or WHERE statements, pay close When using array assignment or WHERE statements, pay close

attention to the generated code with -qlist or -qreport.attention to the generated code with -qlist or -qreport.

Page 94: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9494

성능 향상을 위한 코딩 팁 성능 향상을 위한 코딩 팁 (4/5)(4/5)

If performance is inadequate, consider using -qhot or rewriting If performance is inadequate, consider using -qhot or rewriting array language in loop form.array language in loop form.

C/C++ Programming TipsC/C++ Programming Tips Use the xlc[_r] invocation rather than cc[_r] when possible.Use the xlc[_r] invocation rather than cc[_r] when possible. Always include string.h when doing string operations and Always include string.h when doing string operations and

math.h when using the math library.math.h when using the math library. Pass large class/struct parameters by address or reference, Pass large class/struct parameters by address or reference,

pass everything else by value where possible.pass everything else by value where possible. Use unions and pointer type-casting only when necessary and Use unions and pointer type-casting only when necessary and

try to follow ANSI type rules.try to follow ANSI type rules. If a class or struct contains a 'double', consider putting it first in If a class or struct contains a 'double', consider putting it first in

the declaration. If this is not possible, consider using -the declaration. If this is not possible, consider using -qalign=naturalqalign=natural

Page 95: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9595

성능 향상을 위한 코딩 팁 성능 향상을 위한 코딩 팁 (5/5)(5/5)

Avoid virtual functions and virtual inheritance unless required Avoid virtual functions and virtual inheritance unless required for class extensibility. These are costly in object space and for class extensibility. These are costly in object space and function invocation performance.function invocation performance.

Use 'volatile' only for truly shared variables.Use 'volatile' only for truly shared variables. Use 'const' for globals, parameters and functions whenever Use 'const' for globals, parameters and functions whenever

possible.possible. Do limited hand-tuning of small functions by defining them as Do limited hand-tuning of small functions by defining them as

'inline' in a header file.'inline' in a header file.

Page 96: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9696

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (1/10)(1/10)

공유 메모리 병렬 작업 흐름공유 메모리 병렬 작업 흐름

Page 97: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9797

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (2/10)(2/10)

SMP SMP 관련 환경 변수관련 환경 변수 AIXTHREAD_SCOPE = S or P (default = P)AIXTHREAD_SCOPE = S or P (default = P) OMP_DYNAMIC = FALSE or TRUE (default = TRUE)OMP_DYNAMIC = FALSE or TRUE (default = TRUE) SPINLOOPTIME=n (default = 40)SPINLOOPTIME=n (default = 40) YIELDLOOPTIME = n (default = 0)YIELDLOOPTIME = n (default = 0) MALLOCMULTIHEAP (default = not set)MALLOCMULTIHEAP (default = not set) SMP stack size (default = 4 MB/thread)SMP stack size (default = 4 MB/thread)

커널커널 // 유저 스레드유저 스레드 스레드 스레드 : : 스케줄의 대상이 되는 단위스케줄의 대상이 되는 단위 커널 스레드커널 스레드

커널에 의해 스케줄커널에 의해 스케줄 시스템 스케줄러가 담당시스템 스케줄러가 담당

유저 스레드유저 스레드 사용자에 의해 스케줄사용자에 의해 스케줄 스레드 라이브러리가 담당스레드 라이브러리가 담당

Page 98: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9898

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (3/10)(3/10)

M:1 M:1 스레드 모델스레드 모델

Page 99: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 9999

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (4/10)(4/10)

1:1 1:1 스레드 모델스레드 모델

Page 100: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 100100

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (5/10)(5/10)

M:N M:N 스레드 모델스레드 모델

Page 101: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 101101

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (6/10)(6/10)

스레드 환경 변수스레드 환경 변수 AIXTHREAD_MNRATIO=p:kAIXTHREAD_MNRATIO=p:k

k: k: 커널 스레드 수커널 스레드 수 p: runnable pthread p: runnable pthread 수수

AIXTHREAD_SLPRATIO=k:pAIXTHREAD_SLPRATIO=k:p k: k: 커널 스레드 수커널 스레드 수 p: sleeping pthread p: sleeping pthread 수수

AIXTHREAD_MINKTHREADS=nAIXTHREAD_MINKTHREADS=n n: n: 최소 커널 스레드 수최소 커널 스레드 수

자동 자동 SMP SMP 병렬화병렬화 자동 병렬화 컴파일자동 병렬화 컴파일

xlf90_r -c -qsmp=auto -qnohot -qreport=smplist -O3 -qarch=pwr4 -xlf90_r -c -qsmp=auto -qnohot -qreport=smplist -O3 -qarch=pwr4 -qtune=pwr4 -qfixed sub.fqtune=pwr4 -qfixed sub.f

OpenMP OpenMP 컴파일컴파일 xlf90_r -c -qsmp=omp -O3 -qarch=pwr4 -qtune=pwr4 -qfixed sub.fxlf90_r -c -qsmp=omp -O3 -qarch=pwr4 -qtune=pwr4 -qfixed sub.f

Page 102: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 102102

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (7/10)(7/10)

루프 루프 AA

루프 루프 BB

DO J = 1, NXDO J = 1, NX Q(J) = E(J) + F2*Q(J)Q(J) = E(J) + F2*Q(J)ENDDOENDDO

DO J = 1, NXDO J = 1, NX I1 = IL(1,J)I1 = IL(1,J) I2 = IL(2,J)I2 = IL(2,J) I3 = IL(3,J)I3 = IL(3,J) I4 = IL(4,J)I4 = IL(4,J) I5 = IL(5,J)I5 = IL(5,J) I6 = IL(6,J)I6 = IL(6,J)

E(J) = Y3(J)*Q(J) - ( \E(J) = Y3(J)*Q(J) - ( \ Q2(1,J)*Q(I1) + Q2(2,J)*Q(I2) + \Q2(1,J)*Q(I1) + Q2(2,J)*Q(I2) + \ Q2(3,J)*Q(I3) + Q2(4,J)*Q(I4) + \Q2(3,J)*Q(I3) + Q2(4,J)*Q(I4) + \ Q2(5,J)*Q(I5) + Q2(6,J)*Q(I6))Q2(5,J)*Q(I5) + Q2(6,J)*Q(I6)) F3 = F3 + Q(J)*E(J)F3 = F3 + Q(J)*E(J)ENDDOENDDO

Page 103: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 103103

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (8/10)(8/10)

루프 루프 CC

환경 변수 지정환경 변수 지정 export AIXTHREAD_SCOPE=Sexport AIXTHREAD_SCOPE=S export SPINLOOPTIME=100000export SPINLOOPTIME=100000 export YIELDLOOPTIME=40000export YIELDLOOPTIME=40000 export OMP_DYNAMIC=falseexport OMP_DYNAMIC=false export MALLOCMULTIHEAP=1export MALLOCMULTIHEAP=1

DO J = 1, NXDO J = 1, NX Z0(J) = Z0(J) + X2*Q(J)Z0(J) = Z0(J) + X2*Q(J) B1(J) = B1(J) - X2*E(J)B1(J) = B1(J) - X2*E(J) T1 = B1(J)T1 = B1(J) E(J) = T1*DBLE(C1(J))E(J) = T1*DBLE(C1(J)) F1 = F1 + T1*E(J)F1 = F1 + T1*E(J) F4 = F4 + ABS(T1)F4 = F4 + ABS(T1)ENDDOENDDO

Page 104: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 104104

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (9/10)(9/10)

실행 결과 실행 결과 ((NX=1000000)NX=1000000) 루프 루프 AA

루프 루프 BB

Page 105: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 105105

병렬 프로그래밍 테크닉 병렬 프로그래밍 테크닉 (10/10)(10/10) 루프 루프 CC

Page 106: 고 급   병 렬 프 로 그 래 밍

제 제 IIIIII 장장

병렬 프로그래밍 관련 도구병렬 프로그래밍 관련 도구 디버깅 도구디버깅 도구

성능분석 도구성능분석 도구

Page 107: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 107107

디버깅 도구 디버깅 도구 (1/1)(1/1)

병렬 디버거 병렬 디버거 pdbxpdbx MPI MPI 어플리케이션의 병렬 디버거어플리케이션의 병렬 디버거 dbxdbx 의 의 poe poe 어플리케이션어플리케이션 각 프로세서 노드에서 각 프로세서 노드에서 dbx dbx 실행실행 dbxdbx 의 명령어와 유사의 명령어와 유사 Normal mode: pdbxNormal mode: pdbx Attach mode: pdbx –a <poe pid>Attach mode: pdbx –a <poe pid>

pdbx pdbx 디폴트 엘리어스디폴트 엘리어스 l list, s step, n next, c cont, p print, st stop, t where, h helpl list, s step, n next, c cont, p print, st stop, t where, h help m map, d delete, j status, x registers, q quit, th thread, mu m map, d delete, j status, x registers, q quit, th thread, mu

mutex, cv condition, attr attributemutex, cv condition, attr attribute

Page 108: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 108108

성능분석 도구 성능분석 도구 (1/37)(1/37)

XLF Fortran XLF Fortran 타이밍 서브루틴타이밍 서브루틴 rtc(), irtc(), dtime_(), etime_(), mclock(), timef() rtc(), irtc(), dtime_(), etime_(), mclock(), timef() 등은 등은 IBMIBM 의 의 XLF XLF

Fortran Fortran 라이브러리에 포함된 라이브러리에 포함된 timertimer 루틴들루틴들 HPM ToolkitHPM Toolkit

HPM(Hardware Performance Monitor) ToolkitHPM(Hardware Performance Monitor) Toolkit 은 물리적인 은 물리적인 프로세서내의 하드웨어 이벤트 카운터에서 사용자가 필요한 정보를 프로세서내의 하드웨어 이벤트 카운터에서 사용자가 필요한 정보를 얻을 수 있도록 하는 라이브러리와 유틸리티의 모음얻을 수 있도록 하는 라이브러리와 유틸리티의 모음

HPM ToolkitHPM Toolkit 은 은 hpmcount, libhpm, hpmviz hpmcount, libhpm, hpmviz 등으로 구성되어 등으로 구성되어 있으며 다음과 같은 다양한 하드웨어 이벤트들을 측정할 수 있음있으며 다음과 같은 다양한 하드웨어 이벤트들을 측정할 수 있음 clock cyclesclock cycles instructions completed instructions completed L1 load/store misses L1 load/store misses L2 load/store misses L2 load/store misses TLB missesTLB misses

Page 109: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 109109

성능분석 도구 성능분석 도구 (2/37)(2/37) FPU/FXU activity FPU/FXU activity number of branches number of branches branch mispredictions branch mispredictions loads/stores completed loads/stores completed FMAs executed FMAs executed

POWER4 POWER4 프로세서에서는 프로세서에서는 POWER3 POWER3 프로세서에서와 마찬가지로 프로세서에서와 마찬가지로 하드웨어 이벤트 카운터에서 동시에 하드웨어 이벤트 카운터에서 동시에 88 가지의 정보를 측정할 수 있음가지의 정보를 측정할 수 있음

IBMIBM 에서는 사용자가 사용하기에 편리하도록 하드웨어 이벤트 에서는 사용자가 사용하기에 편리하도록 하드웨어 이벤트 카운터 정보를 카운터 정보를 88 개씩 묶어 개씩 묶어 00 부터 부터 6060까지 총 까지 총 6161 개의 그룹을 제공개의 그룹을 제공((POWER3POWER3 의 경우는 의 경우는 44 개의 그룹 제공개의 그룹 제공 ), ), 디폴트로 사용되는 그룹은 디폴트로 사용되는 그룹은 6060번번

각 그룹에서 다루는 정보들에 대해서는 각 그룹에서 다루는 정보들에 대해서는 IBM AIX IBM AIX 시스템의 시스템의 //usr/pmapi/lib/POWER4.gpsusr/pmapi/lib/POWER4.gps 에 그 내용이 있음에 그 내용이 있음

사용자가 프로그램의 성능분석에 자주 이용하는 정보를 담은 몇 개의 사용자가 프로그램의 성능분석에 자주 이용하는 정보를 담은 몇 개의 그룹들그룹들

Page 110: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 110110

성능분석 도구 성능분석 도구 (3/37)(3/37) 그룹 그룹 60 : 60 : cycles, instructions, FP cycles, instructions, FP 연산연산 (( 나누기나누기 , , FMA, FMA, 로드로드 , , 저장 저장

포함포함 ) ) 회수 등회수 등 그룹 그룹 59 : 59 : cycles, instructions, TLB cycles, instructions, TLB 미스미스 , , 로드로드 , , 저장저장 , , L1 L1 미스 회수 미스 회수

등등 그룹 그룹 5 : 5 : L2, L3, L2, L3, 그리고 메모리로부터의 로드 회수그리고 메모리로부터의 로드 회수 .. 그룹 그룹 58 : 58 : cycles, instructions, L3cycles, instructions, L3 로부터의 로드로부터의 로드 , , 메모리부터의 로드 메모리부터의 로드 회수 등회수 등

그룹 그룹 53 : 53 : cycles, instructions, cycles, instructions, 고정소수점 연산고정소수점 연산 , , FP FP 연산연산 (( 나누기나누기 , , SQRT, FMA, and FMOV or FEST SQRT, FMA, and FMOV or FEST 포함포함 ) ) 회수 등회수 등

Page 111: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 111111

성능분석 도구 성능분석 도구 (4/37)(4/37)

hpmcounthpmcount hpmcounthpmcount 는 사용자가 작성한 프로그램의 실제 실행 시간과 는 사용자가 작성한 프로그램의 실제 실행 시간과

하드웨어 카운터에 관련된 정보하드웨어 카운터에 관련된 정보 , , 사용 자원 등의 전반적인 성능을 사용 자원 등의 전반적인 성능을 제공하는 커맨드라인 유틸리티제공하는 커맨드라인 유틸리티

Sequential programs on AIX: Sequential programs on AIX: $hpmcount [-o <filename>] [-n] [-g <group>] <program> $hpmcount [-o <filename>] [-n] [-g <group>] <program>

Parallel programs (MPI) on AIX:Parallel programs (MPI) on AIX: $$poe hpmcount [-o <filename>] [-n] [-g <group>] <program>poe hpmcount [-o <filename>] [-n] [-g <group>] <program>

--o <filename> : o <filename> : 출력화일 출력화일 <<filename>.<pid> filename>.<pid> 생성옵션생성옵션 . . 병렬 프로그램에서는 프로세스마다 하나의 파일이 병렬 프로그램에서는 프로세스마다 하나의 파일이 생성되며생성되며 , , 디폴트는 표준출력디폴트는 표준출력 ..

--n : n : 표준출력을 하지 않고 파일로만 출력표준출력을 하지 않고 파일로만 출력 . –. –oo옵션과 같이 옵션과 같이 사용됨사용됨 . .

--g <group> : (POWER4 only) 0g <group> : (POWER4 only) 0 에서 에서 6060까지 그룹 지정 까지 그룹 지정 가능하며가능하며 , , 디폴트는 디폴트는 60.60.

Page 112: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 112112

성능분석 도구 성능분석 도구 (5/37)(5/37)

hpmcount hpmcount 사용 예제와 실행결과사용 예제와 실행결과

$ $ hpmcount -o hpmtest -n –g 60 a.outhpmcount -o hpmtest -n –g 60 a.out Seconds elapsed: 20.1621870994567871Seconds elapsed: 20.1621870994567871$ vi hpmtest_0000.384218$ vi hpmtest_0000.384218   hpmcount (V 2.4.3) summaryhpmcount (V 2.4.3) summary   Total execution time (wall clock time): 3.890695 secondsTotal execution time (wall clock time): 3.890695 seconds   ######## Resource Usage Statistics ######## ######## Resource Usage Statistics ########    Total amount of time in user mode : 3.800000 secondsTotal amount of time in user mode : 3.800000 seconds Total amount of time in system mode : 0.060000 secondsTotal amount of time in system mode : 0.060000 seconds Maximum resident set size : 23564 KbytesMaximum resident set size : 23564 Kbytes Average shared memory use in text segment : 3088 Kbytes*secAverage shared memory use in text segment : 3088 Kbytes*sec Average unshared memory use in data segment : 9007560 Kbytes*secAverage unshared memory use in data segment : 9007560 Kbytes*sec Number of page faults without I/O activity : 5893Number of page faults without I/O activity : 5893

Page 113: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 113113

성능분석 도구 성능분석 도구 (6/37)(6/37) Number of page faults with I/O activity : 0Number of page faults with I/O activity : 0 Number of times process was swapped out : 0Number of times process was swapped out : 0 Number of times file system performed INPUT : 0Number of times file system performed INPUT : 0 Number of times file system performed OUTPUT : 0Number of times file system performed OUTPUT : 0 Number of IPC messages sent : 0Number of IPC messages sent : 0 Number of IPC messages received : 0Number of IPC messages received : 0 Number of signals delivered : 0Number of signals delivered : 0 Number of voluntary context switches : 4Number of voluntary context switches : 4 Number of involuntary context switches : 3Number of involuntary context switches : 3   ####### End of Resource Statistics ############### End of Resource Statistics ########   PM_FPU_FDIV (FPU executed FDIV instruction) : 0PM_FPU_FDIV (FPU executed FDIV instruction) : 0 PM_FPU_FMA (FPU executed multiply-add instruction) : PM_FPU_FMA (FPU executed multiply-add instruction) : 10000023291000002329 PM_FPU0_FIN (FPU0 produced a result) : 627844244PM_FPU0_FIN (FPU0 produced a result) : 627844244 PM_FPU1_FIN (FPU1 produced a result) : 1377820044PM_FPU1_FIN (FPU1 produced a result) : 1377820044 PM_CYC (Processor cycles) : 3758316603PM_CYC (Processor cycles) : 3758316603 PM_FPU_STF (FPU executed store instruction) : PM_FPU_STF (FPU executed store instruction) : 10034080331003408033 PM_INST_CMPL (Instructions completed) : 4143170873PM_INST_CMPL (Instructions completed) : 4143170873

Page 114: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 114114

성능분석 도구 성능분석 도구 (7/37)(7/37)

위의 실행결과에서 수집된 정보위의 실행결과에서 수집된 정보 Utilization rate = User time / Wall clock timeUtilization rate = User time / Wall clock time Load and store operations = Loads + Stores(Total LS) Load and store operations = Loads + Stores(Total LS)

2002211584 + 1003408033 = 3005619617 = 3005.620 2002211584 + 1003408033 = 3005619617 = 3005.620 MM

PM_LSU_LDF (LSU executed Floating Point load instruction) : PM_LSU_LDF (LSU executed Floating Point load instruction) : 20022115842002211584 Utilization rate : 74.306 %Utilization rate : 74.306 % Load and store operations : 3005.620 MLoad and store operations : 3005.620 M Instructions per load/store : 1.3786Instructions per load/store : 1.3786 MIPS : 1064.892MIPS : 1064.892 Instructions per cycle : 1.102Instructions per cycle : 1.102 HW Float points instructions per Cycle : 0.534HW Float points instructions per Cycle : 0.534 Floating point instructions + FMAs : 2002.259 MFloating point instructions + FMAs : 2002.259 M Float point instructions + FMA rate : 514.627 Mflip/sFloat point instructions + FMA rate : 514.627 Mflip/s FMA percentage : 99.887 %FMA percentage : 99.887 %Computation intensity : 0.666Computation intensity : 0.666

Page 115: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 115115

성능분석 도구 성능분석 도구 (8/37)(8/37) Instructions per load/store = Instructions completed / Total LS Instructions per load/store = Instructions completed / Total LS

4143170873 / 3005619617 = 1.37864143170873 / 3005619617 = 1.3786 MIPS = 0.000001 * Instructions completed / Wall clock timeMIPS = 0.000001 * Instructions completed / Wall clock time

0.000001 * 4143170873 / 3.890695 = 1064.8920.000001 * 4143170873 / 3.890695 = 1064.892 Instructions per cycle = Instructions completed / CyclesInstructions per cycle = Instructions completed / Cycles

4143170873 / 3758316603 = 1.1024143170873 / 3758316603 = 1.102 HW Float points instructions per Cycle = ( FPU 0 + FPU 1 ) / CyclesHW Float points instructions per Cycle = ( FPU 0 + FPU 1 ) / Cycles

(627844244 + 1377820044) / 3758316603 = 0.534(627844244 + 1377820044) / 3758316603 = 0.534 Floating point instructions + FMAs (flip) = FPU 0 instructions + FPU Floating point instructions + FMAs (flip) = FPU 0 instructions + FPU

1 instructions + FMAs executed – FPU Stores (POWER4)1 instructions + FMAs executed – FPU Stores (POWER4)627844244 + 1377820044 + 1000002329 – 1003408033 = 20627844244 + 1377820044 + 1000002329 – 1003408033 = 20

02258584 = 2002.259 02258584 = 2002.259 MM Float point instructions + FMA rate = 0.000001 * flip / Wall clock time Float point instructions + FMA rate = 0.000001 * flip / Wall clock time

(Mflip/s)(Mflip/s)0.000001 * 2002258584 / 3.890695 = 514.627 0.000001 * 2002258584 / 3.890695 = 514.627 Mflip/s Mflip/s

Page 116: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 116116

성능분석 도구 성능분석 도구 (9/37)(9/37) FMA percentage = 100 * FMAs executed * 2 / flipFMA percentage = 100 * FMAs executed * 2 / flip

100 * 1000002329 * 2 / 2002258584 = 99.887 %100 * 1000002329 * 2 / 2002258584 = 99.887 % Computation intensity = flip / Total LSComputation intensity = flip / Total LS

2002258584 / 3005619617 = 0.666 2002258584 / 3005619617 = 0.666

특히특히 , , 주의 깊게 봐야 할 값은 코드에 의해 수행된 부동소수점 연산의 주의 깊게 봐야 할 값은 코드에 의해 수행된 부동소수점 연산의 효율을 나타내는 효율을 나타내는 Mflip/s(Millions of FLoat Instructions Per Second)Mflip/s(Millions of FLoat Instructions Per Second)

이 값은 초당 수행된 부동 소수점 연산의 회수를 나타내며 이 값은 초당 수행된 부동 소수점 연산의 회수를 나타내며 MflopsMflops 와 와 동일한 정보를 제공함동일한 정보를 제공함

Page 117: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 117117

성능분석 도구 성능분석 도구 (10/37)(10/37)

XprofilerXprofiler PE PE 제품군에 속한 병렬 프로파일링 도구제품군에 속한 병렬 프로파일링 도구 프로그램을 컴파일할 때 –프로그램을 컴파일할 때 – pgpg옵션을 주고 컴파일하여 실행을 하면 옵션을 주고 컴파일하여 실행을 하면

xprofilerxprofiler 를 이용하여 프로그램의 어떤 서브루틴에서 시간이 얼마나 를 이용하여 프로그램의 어떤 서브루틴에서 시간이 얼마나 걸렸으며걸렸으며 , , 각 서브루틴들에서 걸린 시간이 전체 계산시간에서 각 서브루틴들에서 걸린 시간이 전체 계산시간에서 어떻게 분포가 되는지 등에 대한 여러가지 정보들을 그래픽 환경에서 어떻게 분포가 되는지 등에 대한 여러가지 정보들을 그래픽 환경에서 확인해 볼 수 있음확인해 볼 수 있음

실행파일이 실행파일이 md_small.xmd_small.x 이고 실행시킨 후 생성된 파일이 이고 실행시킨 후 생성된 파일이 gmon.outgmon.out이라고 할 때 다음과 같이 실행하면 된다이라고 할 때 다음과 같이 실행하면 된다 ..$ $ xprofiler md_small.x gmon.outxprofiler md_small.x gmon.out

Page 118: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 118118

성능분석 도구 성능분석 도구 (11/37)(11/37)

Xprofiler GUI Xprofiler GUI 창창 여기서 여기서 librarylibrary 에 해당되는 부분을 숨기려면 메뉴에서 에 해당되는 부분을 숨기려면 메뉴에서 Filter -> Hide All Filter -> Hide All

Library CallsLibrary Calls 를 클릭를 클릭

Page 119: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 119119

성능분석 도구 성능분석 도구 (12/37)(12/37)

클러스터 노드 메뉴 클러스터 노드 메뉴 : : 녹색의 사각 박스의 회색부분에 오른쪽 녹색의 사각 박스의 회색부분에 오른쪽 마우스를 클릭마우스를 클릭

Page 120: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 120120

성능분석 도구 성능분석 도구 (13/37)(13/37)

Remove Cluster BoxRemove Cluster Box 를 클릭하면 를 클릭하면 md_smallmd_small..xx 에 해당되는 부분이 에 해당되는 부분이 확대 됨확대 됨

Page 121: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 121121

성능분석 도구 성능분석 도구 (14/37)(14/37)

찾고자 하는 부분 확대 찾고자 하는 부분 확대 : : 메뉴에서 메뉴에서 View -> Overview View -> Overview 를 클릭 를 클릭 Overview WindowOverview Window 를 띄운 다음 파란색의 사각형을 작게 축소하면 를 띄운 다음 파란색의 사각형을 작게 축소하면 그 부분에 해당되는 부분을 전체 화면에서 확대해 볼 수 있음그 부분에 해당되는 부분을 전체 화면에서 확대해 볼 수 있음

Page 122: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 122122

성능분석 도구 성능분석 도구 (15/37)(15/37)

각 창의 그림에서 크고 작은 크기의 녹색 사각형이 나타나는데 이 각 창의 그림에서 크고 작은 크기의 녹색 사각형이 나타나는데 이 녹색 사각형 바로 밑에 녹색 사각형 바로 밑에 A x B A x B 형태로 계산 시간이 적혀 있고형태로 계산 시간이 적혀 있고 , , 다시 다시 그 밑에 서브루틴의 이름이 적혀 있음그 밑에 서브루틴의 이름이 적혀 있음

A x B A x B 형태로 적힌 계산 시간에서 형태로 적힌 계산 시간에서 BB 에 해당하는 시간은 순수하게 그 에 해당하는 시간은 순수하게 그 서브루틴에서 걸린 시간을 나타내고서브루틴에서 걸린 시간을 나타내고 , , AA 에 해당하는 시간은 하위 에 해당하는 시간은 하위 서브루틴에서 걸린 시간과 서브루틴에서 걸린 시간과 BB 에 해당하는 시간을 합친 그 루틴의 에 해당하는 시간을 합친 그 루틴의 전체 계산시간을 나타냄전체 계산시간을 나타냄

또한또한 , , 녹색 사각형에서 가로의 길이는 위의 녹색 사각형에서 가로의 길이는 위의 AA 에 해당하는 시간을 에 해당하는 시간을 나타내고 세로의 길이는 위의 나타내고 세로의 길이는 위의 BB 에 해당하는 시간을 나타냄에 해당하는 시간을 나타냄

순차코드를 병렬화 할 때 위와 같이 프로파일링을 한 후 녹색으로 순차코드를 병렬화 할 때 위와 같이 프로파일링을 한 후 녹색으로 표시된 사각형의 면적이 넓은 곳을 찾아서 효율적으로 병렬화를 할 수 표시된 사각형의 면적이 넓은 곳을 찾아서 효율적으로 병렬화를 할 수 있음있음

Page 123: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 123123

성능분석 도구 성능분석 도구 (16/37)(16/37)

Report Report 메뉴를 통해 다양한 프로파일링 정보를 확인해 볼수 있으며메뉴를 통해 다양한 프로파일링 정보를 확인해 볼수 있으며 , , 특히 특히 Report -> Flat profileReport -> Flat profile 를 이용하여 플랫 프로파일링 정보를 를 이용하여 플랫 프로파일링 정보를 확인할 수 있음확인할 수 있음

Page 124: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 124124

성능분석 도구 성능분석 도구 (17/37)(17/37)

Flat profile Flat profile 창의 창의 Code Display -> Show Source Code Code Display -> Show Source Code 메뉴를 메뉴를 통해 선택한 서브루틴의 소스코드를 확인해 볼 수 있음통해 선택한 서브루틴의 소스코드를 확인해 볼 수 있음

Page 125: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 125125

성능분석 도구 성능분석 도구 (18/37)(18/37)

MPI trace MPI trace 라이브러리라이브러리 //usr/lib usr/lib 밑에 밑에 libmpitrace.a libmpitrace.a 라이브러리 형태로 존재라이브러리 형태로 존재 MPIMPI 의 메시지 패싱과 관련된 메시지 패싱 프로파일링 정보 제공의 메시지 패싱과 관련된 메시지 패싱 프로파일링 정보 제공 MPI MPI 병렬 프로그램을 컴파일할 때 라이브러리 링크 옵션 병렬 프로그램을 컴파일할 때 라이브러리 링크 옵션 --lmpitracelmpitrace 추가추가$ $ mpxlf -O3 -qstrict -lmpitrace -o pi pi.fmpxlf -O3 -qstrict -lmpitrace -o pi pi.f

컴파일 후 컴파일 후 MPI MPI 프로그램을 실행하면 프로그램을 실행하면 MPI MPI 작업의 테스크 수 만큼 작업의 테스크 수 만큼 mpi_profile.* MPI mpi_profile.* MPI 프로파일 파일 생성프로파일 파일 생성 만약 테스크 수를 만약 테스크 수를 66 개로 하면 개로 하면 mpi_profile.0 ~ mpi_profile.5mpi_profile.0 ~ mpi_profile.5 의 의 66 개 개

MPI MPI 프로파일 파일 생성프로파일 파일 생성 각각의 파일에는 각각의 파일에는 MPI MPI 작업의 각 작업의 각 task, task, 즉 프로그램이 실행되면서 즉 프로그램이 실행되면서

부여되는 각 테스크에 해당하는 정보 포함부여되는 각 테스크에 해당하는 정보 포함 예를 들어예를 들어 , , mpi_profile.0 mpi_profile.0 파일에는 파일에는 rank=0rank=0 인 테스크의 정보가 인 테스크의 정보가

포함되어 있고포함되어 있고 , , mpi_profile.5mpi_profile.5 파일에는 파일에는 rank=5rank=5 인 프로세스의 정보가 인 프로세스의 정보가 포함되어 있음포함되어 있음

Page 126: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 126126

성능분석 도구 성능분석 도구 (19/37)(19/37)

mpi_profile.* mpi_profile.* 파일에 포함된 정보파일에 포함된 정보

--------------------------------------------------------------------------------------------------------------------------------MPI Routine #calls avg. bytes me(sec)MPI Routine #calls avg. bytes me(sec)--------------------------------------------------------------------------------------------------------------------------------MPI_Comm_size 1 0.0 0.000MPI_Comm_size 1 0.0 0.000MPI_Comm_rank 1 0.0 0.000MPI_Comm_rank 1 0.0 0.000MPI_Reduce 1 8.0 0.000MPI_Reduce 1 8.0 0.000--------------------------------------------------------------------------------------------------------------------------------total communication time = 0.000 seconds.total communication time = 0.000 seconds.total elapsed time = 3.033 seconds.total elapsed time = 3.033 seconds.user cpu time = 1.580 seconds.user cpu time = 1.580 seconds.system time = 0.250 seconds.system time = 0.250 seconds.maximum memory size = 3148 KBytes.maximum memory size = 3148 KBytes.--------------------------------------------------------------------------------------------------------------------------------Message size distributions:Message size distributions:MPI_Reduce #calls avg. bytes time(sec)MPI_Reduce #calls avg. bytes time(sec) 1 8.0 0.0001 8.0 0.000

Page 127: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 127127

성능분석 도구 성능분석 도구 (20/37)(20/37)

PE BenchmarkerPE Benchmarker PE BenchmarkerPE Benchmarker 는 는 IBM AIX Parallel Environment IBM AIX Parallel Environment 환경에서 구동 환경에서 구동

되는 프로그램들의 성능을 분석할 수 있는 응용프로그램과 도구들로 되는 프로그램들의 성능을 분석할 수 있는 응용프로그램과 도구들로 구성된 툴셋이며구성된 툴셋이며 , , 크게 다음 세가지로 이루어져 있음크게 다음 세가지로 이루어져 있음

PCT(Performance Collection Tool) : PCT(Performance Collection Tool) : 하나 혹은 그 이상의 하나 혹은 그 이상의 응용프로그램 프로세스로부터 응용프로그램 프로세스로부터 MPI MPI 이벤트 트레이스 데이터 혹은 이벤트 트레이스 데이터 혹은 하드웨어하드웨어 // 운영체제 성능 데이터를 수집운영체제 성능 데이터를 수집 . . 커맨드라인 인터페이스 커맨드라인 인터페이스 모드와 그래픽 사용자 인터페이스모드와 그래픽 사용자 인터페이스 ((GUI) GUI) 모드로 실행 가능모드로 실행 가능 ..

UTE(Unified Trace Environment) UTE(Unified Trace Environment) 도구 모음 도구 모음 : : PCTPCT 를 이용해 수집된 를 이용해 수집된 MPI MPI 이벤트 트레이스 정보를 저장해둔 이벤트 트레이스 정보를 저장해둔 AIX AIX 트레이스 파일들을 트레이스 파일들을 UTE UTE interval interval 파일로 변환시키고파일로 변환시키고 , , 변환된 파일로부터 성능분석 테이블을 변환된 파일로부터 성능분석 테이블을 생성생성 . . 다음과 같은 다음과 같은 UTE UTE 도구들이 있으며 커맨드라인 인터페이스 도구들이 있으며 커맨드라인 인터페이스 모드로 실행모드로 실행 uteconvert : AIX uteconvert : AIX 이벤트 트레이스 파일을 이벤트 트레이스 파일을 UTE interval UTE interval 파일로 변환파일로 변환 utemerge : utemerge : 여러 개의 여러 개의 UTE interval UTE interval 파일을 하나의 파일을 하나의 interval interval 파일로 합침파일로 합침

Page 128: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 128128

성능분석 도구 성능분석 도구 (21/37)(21/37) utestats : UTE interval utestats : UTE interval 파일로부터 얻은 정보에 대한 통계 테이블을 파일로부터 얻은 정보에 대한 통계 테이블을 생성생성

slogmerge : Argonne slogmerge : Argonne 국립 연구소의 국립 연구소의 MPI MPI 프로그램 성능분석 도구인 프로그램 성능분석 도구인 JumpshotJumpshot 을 이용할 수 있도록 을 이용할 수 있도록 UTE interval UTE interval 파일들을 파일들을 SLOG(Scalable logfile) SLOG(Scalable logfile) 파일 포맷으로 변환시키고 합침파일 포맷으로 변환시키고 합침

PVT(Performance Visualization Tool) : PCTPVT(Performance Visualization Tool) : PCT 를 이용해 하드웨어를 이용해 하드웨어 //운영체제 성능 데이터를 수집하면운영체제 성능 데이터를 수집하면 , , 각 프로세스별로 수집된 각 프로세스별로 수집된 프로파일 정보는 프로파일 정보는 netCDF(network Common Data Form) netCDF(network Common Data Form) 파일로 파일로 저장저장 . . PVTPVT 는 는 netCDF netCDF 파일로부터 프로파일 정보를 읽고 요약해 파일로부터 프로파일 정보를 읽고 요약해 사용자에게 보여줌사용자에게 보여줌 . . 커맨드라인 모드와 커맨드라인 모드와 GUI GUI 모드로 실행 가능모드로 실행 가능 ..

PE Benchmarker PE Benchmarker 툴셋을 이용한 프로그램의 성능분석은 툴셋을 이용한 프로그램의 성능분석은 PCTPCT 와 와 PVTPVT 를 이용한 하드웨어를 이용한 하드웨어 // 운영체제 성능분석과 운영체제 성능분석과 PCTPCT 와 와 UTE UTE 혹은 혹은 PCTPCT 와 와 UTE UTE 그리고그리고 , , JumpshotJumpshot 을 이용한 을 이용한 MPI MPI 프로그램 프로그램 성능분석으로 나누어 볼 수 있음성능분석으로 나누어 볼 수 있음

Page 129: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 129129

성능분석 도구 성능분석 도구 (22/37)(22/37)

PCT/UTE PCT/UTE 사용사용

Page 130: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 130130

성능분석 도구 성능분석 도구 (23/37)(23/37)

PCT/PVT PCT/PVT 사용사용

Page 131: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 131131

성능분석 도구 성능분석 도구 (24/37)(24/37) PCT : XPCT : X윈도 윈도 GUI/GUI/ 명령어 방식명령어 방식

Page 132: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 132132

성능분석 도구 성능분석 도구 (25/37)(25/37) PVT : XPVT : X윈도 윈도 GUI/GUI/ 명령어 방식명령어 방식

Page 133: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 133133

성능분석 도구 성능분석 도구 (26/37)(26/37)

MPI MPI 프로그램 프로파일을 위한 프로그램 프로파일을 위한 PCT PCT 사용사용 PCTPCT 는 커맨드라인 인터페이스와 는 커맨드라인 인터페이스와 GUIGUI 를 모두 지원를 모두 지원 JumpshotJumpshot 을 이용한 을 이용한 MPI MPI 프로그램 성능분석을 위하여프로그램 성능분석을 위하여 , , 분석에 분석에

사용될 사용될 MPI MPI 트레이스 파일을 트레이스 파일을 PCTPCT 를 이용하여 생성를 이용하여 생성 이를 위해 성능분석이 필요한 프로그램을 컴파일하기 전에 먼저 이를 위해 성능분석이 필요한 프로그램을 컴파일하기 전에 먼저

필요한 라이브러리를 링크하기 위해필요한 라이브러리를 링크하기 위해 환경변수 환경변수 MP_UTEMP_UTE 를 를 yesyes 로 설정로 설정 이렇게 설정된 이렇게 설정된 MP_UTE MP_UTE 환경변수를 통해 환경변수를 통해 UTE UTE 라이브러리를 추가할 수 라이브러리를 추가할 수

있도록 하기위해서는 컴파일 스크립트를 반드시 “있도록 하기위해서는 컴파일 스크립트를 반드시 “ __r” r” 버전을 사용버전을 사용 환경변수 설정환경변수 설정

$ $ export MP_UTE=yesexport MP_UTE=yes 프로그램 컴파일프로그램 컴파일

성능분석을 위한 성능분석을 위한 MPI MPI 프로그램을 스레드 사용 가능한프로그램을 스레드 사용 가능한 ((thread-enabled) thread-enabled) 컴파일 스크립트컴파일 스크립트 (_(_r)r) 를 이용하여 컴파일를 이용하여 컴파일

$ $ mpxlf_r –o pipelined pipelined.fmpxlf_r –o pipelined pipelined.f

Page 134: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 134134

성능분석 도구 성능분석 도구 (27/37)(27/37)

PCT PCT 실행실행 사용자의 시스템에서 사용자의 시스템에서 PCTPCT 를 를 GUIGUI 로 사용하기 위해서는 적절한 로 사용하기 위해서는 적절한 XX윈도우 윈도우

환경이 우선적으로 설정되어 있어야 함환경이 우선적으로 설정되어 있어야 함$ $ pctpct

Load a new applicationLoad a new application 선택선택 , , OKOK 클릭클릭 ((Load Application Load Application 윈도우 열윈도우 열림림 ) )

Page 135: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 135135

성능분석 도구 성능분석 도구 (28/37)(28/37) Load Application Load Application 윈도우에서 윈도우에서

SPMD parallelSPMD parallel 을 선택하고 을 선택하고 Executable name Executable name 필드에서 필드에서 Browse Browse 버튼을 이용하여 버튼을 이용하여 성능분석이 필요한 프로그램을 성능분석이 필요한 프로그램을 선택선택

POE Arguments POE Arguments 필드에 필드에 적절한 적절한 POE POE 실행 옵션 기입실행 옵션 기입 . . 예를 들면예를 들면 , , 병렬실행에 병렬실행에 참여하는 프로세스 개수참여하는 프로세스 개수 (–(–procs n) procs n) 등을 기입등을 기입

Load Load 버튼을 클릭하여 버튼을 클릭하여 프로그램을 로드프로그램을 로드 ((Probe Data Probe Data Selection Selection 윈도우 열림윈도우 열림 ))

Page 136: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 136136

성능분석 도구 성능분석 도구 (29/37)(29/37)

수집을 원하는 데이터의 타입을 선택하는데 지금과 같이 수집을 원하는 데이터의 타입을 선택하는데 지금과 같이 MPI MPI 프로그램 프로그램 성능분석을 위해서는 성능분석을 위해서는 MPI and user event tracesMPI and user event traces 를 선택해야 하지만 를 선택해야 하지만 만약 하드웨어만약 하드웨어 // 운영체제 성능 데이터를 원한다면 운영체제 성능 데이터를 원한다면 Hardware and Hardware and operating system profilesoperating system profiles 를 선택해야 함를 선택해야 함

출력파일이 생성될 디렉터리와 기본파일명을 적어주고 출력파일이 생성될 디렉터리와 기본파일명을 적어주고 OKOK 를 클릭를 클릭 ((메인 윈도우가 열림메인 윈도우가 열림 ))

Page 137: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 137137

성능분석 도구 성능분석 도구 (30/37)(30/37)

메인 윈도우 메인 윈도우 Process Process Select All Connected, Source Tree Select All Connected, Source Tree 에서 에서 pipelined.fpipelined.f 선택선택

Probe Selection Probe Selection 영역에서 영역에서 All MPI EventsAll MPI Events 를 선택를 선택 Add Add 버튼을 클릭해 필요한 정보 수집을 위한 탐침버튼을 클릭해 필요한 정보 수집을 위한 탐침 ((probe)probe) 을 설치을 설치 메뉴 바에서 메뉴 바에서 Application Application Start Start 를 선택해 프로그램을 실행를 선택해 프로그램을 실행 프로그램의 실행 완료후 프로그램의 실행 완료후 PCTPCT 종료종료

Page 138: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 138138

성능분석 도구 성능분석 도구 (31/37)(31/37) 위와 같은 과정을 거쳐 성공적으로 메시지 패싱에 대한 데이터를 위와 같은 과정을 거쳐 성공적으로 메시지 패싱에 대한 데이터를

수집했다면 수집했다면 AIX AIX 트레이스 파일이 생성트레이스 파일이 생성 이 트레이스 파일은 각 노드마다 하나씩 생성되는데이 트레이스 파일은 각 노드마다 하나씩 생성되는데 , , 위의 예에서 위의 예에서

사용한 네 개의 프로세스 모두를 하나의 노드에서 실행되도록 했다면 사용한 네 개의 프로세스 모두를 하나의 노드에서 실행되도록 했다면 트레이스 파일은 트레이스 파일은 mytrace.#mytrace.# 의 형식으로 하나가 생성의 형식으로 하나가 생성

여기서 여기서 ## 은 프로세스가 네 개이므로 은 프로세스가 네 개이므로 00 부터 부터 33까지의 값 중 임의의 값을 까지의 값 중 임의의 값을 하나 가지게 됨하나 가지게 됨

uteconvert uteconvert 실행실행 생성된 생성된 AIX AIX 트레이스 파일을 트레이스 파일을 uteconvertuteconvert 를 이용하여 를 이용하여 UTE interval UTE interval

파일로 변환파일로 변환 기본적으로 트레이스 파일의 이름을 그대로 가져와 기본적으로 트레이스 파일의 이름을 그대로 가져와 mytrace.ute.# mytrace.ute.#

파일이 생성되지만 –파일이 생성되지만 – o o 옵션을 이용하여 원하는 이름을 지정해 줄 수 옵션을 이용하여 원하는 이름을 지정해 줄 수 있음있음

$ $ uteconvert mytrace.1uteconvert mytrace.1$ $ uteconvert –o tracefile.ute mytrace.1uteconvert –o tracefile.ute mytrace.1

Page 139: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 139139

성능분석 도구 성능분석 도구 (32/37)(32/37)

slogmerge slogmerge 실행실행 수집한 정보를 수집한 정보를 JumpshotJumpshot 에서 볼 수 있도록 에서 볼 수 있도록 slogmergeslogmerge 를 이용해 를 이용해

UTE interval UTE interval 파일을 파일을 SLOG SLOG 파일로 변환파일로 변환 기본적으로 기본적으로 ((UTE UTE 파일 이름파일 이름 ).).slog slog 파일이 생성되지만 역시 –파일이 생성되지만 역시 – o o 옵션을 옵션을

이용하면 원하는 이름을 지정해 줄 수 있음이용하면 원하는 이름을 지정해 줄 수 있음$ $ slogmerge mytrace.ute.1slogmerge mytrace.ute.1$ $ slogmerge –o tracefile.slog tracefile.uteslogmerge –o tracefile.slog tracefile.ute

Page 140: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 140140

성능분석 도구 성능분석 도구 (33/37)(33/37)

JumpshotJumpshot JumpshotJumpshot 은 은 PE Benchmarker PE Benchmarker 툴셋에 포함된 프로그램이 아니며 툴셋에 포함된 프로그램이 아니며

이는 미국 이는 미국 Argonne Argonne 국립 연구소에서 개발한 공개 국립 연구소에서 개발한 공개 MPI MPI 구현 구현 패키지인 패키지인 MPICH/MPEMPICH/MPE 에 포함된 자바기반의 성능분석 가시화 툴에 포함된 자바기반의 성능분석 가시화 툴

KISTI IBM KISTI IBM 시스템의 시스템의 //applic/bin applic/bin 디렉토리에 디렉토리에 jumbshotjumbshot 이라는 이라는 이름으로 설치되어 있으며 인터넷에서 받아 개별적으로 설치해 이름으로 설치되어 있으며 인터넷에서 받아 개별적으로 설치해 사용할 수도 있음사용할 수도 있음

GUI GUI 기반의 기반의 JumpshotJumpshot 도 도 PCTPCT 와 마찬가지로 실행하기 전에 와 마찬가지로 실행하기 전에 적절한 적절한 XX윈도우 설정이 필요윈도우 설정이 필요

Page 141: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 141141

성능분석 도구 성능분석 도구 (34/37)(34/37)

Jumpshot Jumpshot 실행실행$ /$ /applic/bin/jumpshotapplic/bin/jumpshot

메뉴 바에서 메뉴 바에서 File File Select Logfile Select Logfile 을 이용해 만들어둔 을 이용해 만들어둔 SLOG SLOG 파일을 파일을 로드로드 ( ( View and Frame Selector View and Frame Selector 윈도우가 열림윈도우가 열림 ))

View and Frame Selector View and Frame Selector 윈도우에는 윈도우에는 Event Count vs. TimeEvent Count vs. Time 의 의 그래프가 나타남그래프가 나타남

프로그램의 진행시간에 따른 적절한 프레임을 선택하고 프로그램의 진행시간에 따른 적절한 프레임을 선택하고 View OptionsView Options에서 에서 MPI-ProcessMPI-Process 를 선택한 후 를 선택한 후 Display Display 버튼을 클릭하면 버튼을 클릭하면 Time line Time line 윈도우를 볼 수 있음윈도우를 볼 수 있음

Page 142: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 142142

성능분석 도구 성능분석 도구 (35/37)(35/37) View & Frame Selector View & Frame Selector 윈도우윈도우

Page 143: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 143143

성능분석 도구 성능분석 도구 (36/37)(36/37) Time Lines Time Lines 윈도우윈도우

Page 144: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 144144

성능분석 도구 성능분석 도구 (37/37)(37/37) Time Line Time Line 윈도우의 윈도우의 XX축은 프로그램의 진행시간을 축은 프로그램의 진행시간을 YY축은 프로세스 축은 프로세스 랭크를 표시랭크를 표시

MPI MPI 서브루틴은 하나의 서브루틴은 하나의 boxbox 로 표현되고 함수 내부 혹은 함수 사이의 로 표현되고 함수 내부 혹은 함수 사이의 통신은 화살표로 표시통신은 화살표로 표시

상단의 상단의 Zoom OperationsZoom Operations 에서 에서 In/Out In/Out 버튼을 이용하여 선택한 버튼을 이용하여 선택한 프레임의 프레임의 MPI MPI 이벤트 발생을 좀더 자세히 살펴볼 수 있음이벤트 발생을 좀더 자세히 살펴볼 수 있음

사용자는 사용자는 Time Line Time Line 윈도우의 윈도우의 MPI MPI 프로그램 진행상황과 통신특성 프로그램 진행상황과 통신특성 등을 살펴보고 자신의 프로그램에 대한 성능분석을 한 후 적절한 최적화 등을 살펴보고 자신의 프로그램에 대한 성능분석을 한 후 적절한 최적화 방안을 마련할 수 있음방안을 마련할 수 있음

Page 145: 고 급   병 렬 프 로 그 래 밍

제 제 IVIV 장장

참고 자료 및 부록참고 자료 및 부록 참고 자료참고 자료

Page 146: 고 급   병 렬 프 로 그 래 밍

Supercomputing Center Supercomputing Center 146146

참고 자료 참고 자료 (1/1)(1/1)

IBM Redbook (http://www.redbooks.ibm.com)IBM Redbook (http://www.redbooks.ibm.com) The POWER4 Processor Introduction and Tuning GuideThe POWER4 Processor Introduction and Tuning Guide

IBM Software PublicationsIBM Software Publications IBM Parallel Environment for AIX: Hitchhiker's GuideIBM Parallel Environment for AIX: Hitchhiker's Guide

HPC HPC 기술서 기술서 ((http://www.supercomputing.re.kr)http://www.supercomputing.re.kr) IBM IBM 기술서 기술서 11권 권 (2002(2002년 년 99월월 )) IBM IBM 기술서 기술서 33권 권 (2003(2003년 년 33월월 )) IBM IBM 기술서 기술서 44권 권 (2003(2003년 년 55월월 ))