• 검색 결과가 없습니다.

∙ 코드 지원 개요

- 슈퍼컴퓨터에서 빌드 환경 및 설정에 따른 VASP(Vienna Ab initio Simulation Package)의 성능을 비교 테스트. 이를 통해 최적화 빌드 방법을 제공

∙ 수행방법

- 테스트 시스템 : 타키온2 - 버전 : VASP 5.3.5 - 테스트 계산 모델

탄소나노튜브(6,6)의 SCF(Self Consistent Field) 1회 계산 Unit-cell에 72개의 탄소 원자 포함

288개의 전자(core electron 제외, pseudo potential 방법 적용) 튜브 축 방향 8개 k-point 계산

Energy cutoff 는 400 eV로 설정

<그림> 탄소나노튜브(6,6) Unit-cell 구조

- 빌드방법

* VASP 빌드를 위해서는 컴파일러와 수치 라이브러리가 필요함. 타키온2 시스 템에는 여러 종류의 컴파일러와 수치 라이브러리가 설치되어 있으며 이 중 적 절한 조합을 선택하여 빌드해야 함

* 추천 컴파일러 및 라이브러리

· 타키온2 시스템에서 사용 가능한 컴파일러는 Intel, PGI, GNU 컴파일러 있 다. 설치된 버전 중 최신 버전을 기준으로 비교하였을 때 PGI 컴파일러를 사 용한 경우가 성능이 좋음. 하지만 최적화 라이브러리를 사용하는 경우에는 전 반적으로 Intel 컴파일러를 사용하였을 때의 성능이 가장 좋음. 따라서 VASP 빌드 시 Intel 컴파일러의 최신 버전을사용하는 것을 권장. Intel 컴파일러를 사 용한 경우가 GNU 대비 약 1.38배 좋은 성능을 나타내고 있음

· VASP에 사용되는 라이브러리는 Linear algebra (LAPACK), FFT (FFTW3),

“makefile.linux_ifc_p4” 파일을 복사하여 Makefile로 사용. 다른 컴파일러에 대 한 Makefile 예제도 포함되어 있으니 다음과 같이 복사하여 사용할 수 있음

의 경우 결과에 영향을 줄 수 있으나, 심각하게 영향을 주는 옵션은 발견되지 않음

O0 O1 O2 O3 O2_opt O3_opt

LOOP POTLOK 2.43 2.04 1.74 1.83 1.81 1.66

LOOP+EDIFF 657.67 610.02 606.82 598.28 597.81 591.81 Elapsed time 710.84 660.89 660.10 648.51 648.13 639.47

<표> Intel 2013 컴파일러 옵션 별 성능 (Opt option : -O3 -ip –ftz -xSSE4.2)

O0 O1 O2 O3 O4 O3_opt O4_opt

LOOP POTLOK 3.31 3.12 2.11 2.10 2.10 2.07 2.11

SETDIJ 0.17 0.16 0.22 0.27 0.19 0.14 0.17

EDDAV 459.29 433.71 315.98 309.03 310.74 309.23 305.68

DOS 0.01 0.14 0.13 0.09 0.14 0.07 0.10

EDIFF CHARG

E 26.95 23.97 11.36 11.11 11.41 11.43 11.29

FORLO

C 1.23 1.13 1.15 1.12 1.15 1.13 1.13

FORNL 84.26 75.17 37.15 37.18 36.79 37.38 36.70

STRESS 254.52 227.85 113.85 113.27 112.66 115.28 111.82 FORHA

R 2.89 1.80 1.60 1.61 1.58 1.55 1.60

MIXING 0.12 0.08 0.11 0.13 0.12 0.12 0.15

OFIELD 0.00 0.01 0.00 0.00 0.01 0.00 0.00

LOOP+EDIF

F 832.75 767.14 483.66 475.91 476.89 478.40 470.75

Elapsed

time 894.61 827.29 527.90 520.38 521.21 522.69 514.29

<표> PGI 2014 컴파일러 옵션 별 성능

* 캐쉬 사이즈

· 내장된 FFT 루틴에서 사용하는 캐시 크기로 외부 FFT 라이브러리를 사용할 경 우에는 적용되지 않음. 테스트 결과 캐시 크기에 따라 큰 성능 차이는 나타지 않으나, 8096 정도로 설정했을 경우에 가장 좋은 성능을 나타냄

O0 O1 O2 O3

LOOP POTLOK 4.72 2.05 1.92 1.71

SETDIJ 0.21 0.25 0.21 0.14

EDDAV 912.61 481.88 458.49 442.16

DOS 0.01 0.07 0.10 0.01

EDIFF CHARGE 61.66 12.47 10.32 8.89

FORLOC 1.94 0.87 0.87 0.75

FORNL 192.84 45.91 40.29 34.77

STRESS 581.35 138.76 109.89 104.28

FORHAR 3.01 1.35 1.17 1.14

MIXING 0.15 0.05 0.05 0.05

OFIELD 0.00 0.01 0.00 0.00

LOOP+EDIFF 1758.50 683.67 623.31 593.90

Elapsed time 1875.81 746.44 681.32 649.70

<표> GNU 컴파일러 (4.4.6) 옵션 별 성능

<그림> 컴파일러 별 성능 비교 (PGI가 제일 좋음)

<그림> 캐쉬 크기에 따른 컴파일러 별 성능 비교

* 최적화 라이브러리

· LinearAlgebra의 성능은 Intel 컴파일러 에서는 MKL, PGI와 GNU 컴파일러에 서는 ATLAS가 우수하다. 특히 해당 GNU 컴파일러로 빌드한 ATLAS의 성능 이 가장 우수함. 또한 VASP 내부의 FFT 루틴 보다는 FFTW3를 링크하여 사용 하는 것이 더 좋은 성능을 나타냄. Intel 컴파일러의 경우 MKL과 FFTW3 라이 브러리를 사용하지 않는 경우에 성능이 매우 떨어짐. 따라서 최적화 라이브러 리를 하나씩 적용하였을 때는 PGI나 GNU 컴파일러의 성능이 더 좋게 나오는 반면, MKL과 FFTW3 라이브러리를 모두 적용하였을 때는 Intel 컴파일러의 성 능이 가장 우수한 것으로 나타남

· IntelFFTW3interface루틴을 사용한 경우 FFTW3를 사용한 경우보다 성능이 좋 지 않음. 하지만 병렬 버전의 경우는 Intel FFTW3 interface가 조금 더 좋음

<그림> Linear Algebra 라이브러리(LAPACK, ATLAS, MKL) 별 성능

<그림> FFT (Interal, FFTW3) 라이브러리별 성능

<그림> 컴파일러 별 최적화 라이브러리 성능 비교

· GOTOBLAS의 경우는 링크하여 사용할 경우 결과 값이 달라짐

· 행렬 계산을 벡터 계산으로 치환하는 옵션은 컴파일러나 BLAS 라이브러리 종류에 관계없이 성능에 거의 영향을 주지 않음을 확인 (-DRPROMU_DGEMV, -DRACCMU_DGEMV)

* 쓰레드 병렬화

· Thread 병렬을 지원하는 라이브러리를 사용하여 8 CPU에서 계산을 수행할 수 있음. MKL은 OpenMP thread 보다는 Intel에서 제공하는 MKL thread를 사용하는 것이 성능이 더 좋음. FFT 라이브러리의 thread 병렬화는 성능향상에 도움이 되지 않고, ATLAS의 thread 병령 성능이 MKL 보다 더 좋음

· 하지만 기대보다는 성능향상이 미미한 수준이어서 hybrid 계산에 의한 병렬 계산은 효율이 떨어질 것으로 예상. 다만, 메모리 문제로 MPI 프로레스를 노드

에 전부 할당하지 못하는 경우에는 여유 CPU 자원을 활용하는 방법으로 사용 이 가능

<그림> 라이브러리 별 thread 병렬 성능 비교 (IFFT : Intel FFTW3 interface)

<그림> MKL thread 병렬 성능

* MPI 병렬화

· 결과는 mvapich2의 성능이 openmpi 보다 좋음. MPI 병렬 계산 (mvapich2)에 서는 FFT 라이브러리는 큰 차이는 없으나 intel FFT를 사용하는 것이 성능이 나음

· mvapich2, openmpi

Linear Algebra는 MPI 병렬과 무관하므로 가장 성능이 좋은 MKL에 대하여 테 스트

<그림> Intel 컴파일러의 라이브러리 별 성능 (PFFTW3 : 병렬버전의 FFTW3, Intel FFT : Intel FFTW3 interface)

· SCALAPACK

LAPACK의 MPI 버전인 SCALAPACK 성능을 테스트. LAPACK 보다 MKL, ATLAS 등의 최적화 라이브러리의 성능이 월등히 좋기 때문에 SCALAPACK 은 성능향상에 도움이 되지 않음

<그림> SCALAPACK 병렬 성능

· VASP 병렬 설정

VASP 입력 값 중에 병렬 계산과 관련된 설정들이 존재. NCORE, NPAR, KPAR 등의 값을 직접 입력할 수 있음. 이 값들의 의미는 VASP 매뉴얼에 나와있어 권장하는 값으로 설정하는 것이 나음. 노드 당 코어수로 설정하도록 권장하는 NCORE 값에 대하여 테스트한 결과 8로 설정했을 때 성능이 가장 좋음

<그림> NCORE 값에 따른 계산 시간 비교

- 결론

* SCF 계산은 동일한 계산을 반복하여 수렴시키는 것으로 반복 계산은 동시에 계산이 불가능. 따라서 본 문서에서는 하나의 반복 계산에 대한 성능을 기준으 로 작성. 테스트 모델은 매우 잘 알려진 나노 구조 (탄소나노튜브)에 대하여 수행하였고, 계산 파라미터는 실제 연구에서 사용하는 일반적은 값들로 정함

* 최적화 라이브러리를 사용하지 않은 순차계산은 PGI 컴파일러를 사용한 경 우 성능이 가장 좋지만 MKL과 FFTW3를 사용하면 인텔 컴파일러를 사용하는 경우가 순차계산 성능이 가장 좋게 나옴. Thread 병렬화된 라이브러리를 사용 하는 경우 약간의 성능향상 효과를 얻을 수 있지만 사용하는 CPU 자원에 비 해 효율이 떨어짐. 부득이하게 메모리 문제로 MPI 프로세스를 전부 할당하지 못하는 경우 추가로 성능향상을 얻는 정도로 사용하는 것이 좋음

* MPI 병렬 성능은 openmpi 보다는 mvapich2 라이브러리를 사용하는 경우가 성능이 더 좋음. 또한 병렬계산 성능은 Intel 컴파일러, MKL,IntelFFT를 사용하 는 경우 최대 성능. 또한 FFT 라이브러리는 병렬 계산의 경우 thread나 mpi 병렬 버전의 성능이 좋지 않음. SCALAPACK은 최적화 라이브러리 (MKL, ATLAS) 등을 사용하는 것에 비하여 병렬화 효과가 크지 않아 성능 향상에 도 움이 되지 않음. 다만 코어를 매우 많이 사용하는 경우에는 도움이 될 여지가 남아 있음

* VASP 입력 값 중에 병렬화에 관련된 값들이 있음. 이 값들을 매뉴얼에 나온 권장 값으로 설정하는 것이 성능에 도움이 됨

관련 문서