사용자 프로그래밍 환경

가. 프로그래밍 도구 설치 현황

  • 컴파일러 및 라이브러리 모듈

    • Abaqus는 2023년 8월 9일로 서비스 재개되었음

구분

아키텍처

구분 모듈

∙ craype-mic-knl

∙ craype-x86-skylake

컴파일러

∙ intel/17.0.5

∙ intel/18.0.1

∙ intel/18.0.3

∙ intel/19.0.1

∙ intel/19.0.4

∙ intel/19.0.5 ∙ intel/19.1.2 ∙ intel/oneapi_21.2

∙ cce/8.6.3

∙ gcc/6.1.0

∙ gcc/7.2.0

∙ gcc/8.3.0

∙ pgi/18.10

∙ pgi/19.1

컴파일러 의존

라이브러리

∙ hdf4/4.2.13

∙ hdf5/1.10.2

∙ lapack/3.7.0

∙ ncl/6.7.0

∙ ncview/2.1.7

∙ NCO/4.7.4

∙ netcdf/4.6.1

MPI

∙ impi/17.0.5

∙ impi/18.0.1

∙ impi/18.0.3

∙ impi/19.0.1

∙ impi/19.0.4

∙ impi/19.0.5 ∙ impi/19.1.2 ∙ impi/oneapi_21.2

∙ mvapich2/2.3

∙ mvapich2/2.3.1

∙ openmpi/3.1.0

∙ mvapich-verbs/2.2.ddn1.4

∙ ime/mvapich-verbs/2.2.ddn1.4

MPI 의존

라이브러리

∙ fftw_mpi/2.1.5

∙ fftw_mpi/3.3.7

∙ hdf5-parallel/1.10.2

∙ netcdf-hdf5-parallel/4.6.1

∙ parallel-netcdf/1.10.0

∙ pio/2.3.1

상용 소프트웨어

∙ Abaqus/6.14-6

∙ Abaqus/2016

∙ Abaqus/2017

∙ Abaqus/2018

∙ Abaqus/2019

∙ Abaqus/2020

∙ Abaqus/2021

∙ Abaqus/2022

∙ Abaqus/2023

∙ gaussian/g16.a03

∙ gaussian/g16.a03.linda

∙ gaussian/g16.b01.linda

∙ gaussian/g16.c01.linda

∙ cfx/v145 ∙ cfx/v170 ∙ cfx/v181 ∙ cfx/v191 ∙ cfx/v192 ∙ cfx/v195 ∙ cfx/v201 ∙ cfx/v202

∙ cfx/v212 ∙ cfx/v221 ∙ cfx/v222 ∙ cfx/v231

∙ cfx/v232 ∙ fluent/v145 ∙ fluent/v170 ∙ fluent/v181 ∙ fluent/v191 ∙ fluent/v192 ∙ fluent/v195 ∙ fluent/v201 ∙ fluent/v202

∙ fluent/v212 ∙ fluent/v221 ∙ fluent/v222

∙ fluent/v231 ∙ fluent/v232

응용 소프트웨어

∙ cp2k/5.1.0

∙ cp2k/6.1.0

∙ ferret/7.4.3

∙ forge/18.1.2

∙ grads/2.2.0

∙ gromacs/2016.4

∙ gromacs/2018.6

∙ gromacs/2020.2

∙ gromacs/5.0.6

∙ lammps/12Dec18

∙ lammps/8Mar18 ∙ lammps/3Mar20

∙ namd/2.12

∙ namd/2.13

∙ PETSc/3.8.4

∙ python/2.7.15

∙ python/3.7

∙ python/3.9.5

∙ qe/6.1

∙ qe/6.4.1

∙ qe/6.6

∙ R/3.5.0

∙ R/4.2.1

∙ siesta/4.0.2

∙ siesta/4.1-b3

가상화 모듈

∙ singularity/3.6.4

∙ singularity/3.9.7

∙ conda/pytorch_1.0

∙ conda/tensorflow_1.13

∙ conda/intel_caffe_1.1.5

Intel

디버깅 모듈

∙ advisor/17.0.5

∙ advisor/18.0.1

∙ advisor/18.0.3

∙ advisor/18.0.3a

∙ vtune/17.0.5

∙ vtune/18.0.1

∙ vtune/18.0.2

∙ vtune/18.0.3

Cray 모듈

∙ cdt/17.10

∙ cray-ccdb/3.0.3

∙ cray-cti/1.0.6

∙ cray-fftw/3.3.6.2

∙ cray-fftw_impi/3.3.6.2

∙ cray-impi/1.1.4

∙ cray-lgdb/3.0.7

∙ cray-libsci/17.09.1

∙ craype/2.5.13

∙ craypkg-gen/1.3.5

∙ chklimit/1.0

∙ vapich2_cce/2.2rc1.0.3_noslurm

∙ vapich2_gnu/2.2rc1.0.3_noslurm

∙ papi/5.5.1.3

∙ perftools/6.5.2

∙ perftools-bas/6.5.2

∙ perftools-lite/6.5.2

∙ PrgEnv-cray/1.0.2

∙ libfabric/1.7.0

∙ pbs/trace

∙ pbs/tools

etc

∙ cmake/3.12.3

∙ cmake/3.17.4

∙ cmake/3.26.2

∙ common/memkind-1.9.0

∙ git/1.8.3.4

∙ git/2.35.1

∙ IGPROF/5.9.16

∙ ImageMagick/7.0.8-20

∙ perl/5.28.1

∙ qt/4.8.7

∙ qt/5.9.6

∙ subversion/1.7.19

∙ subversion/1.9.3

  • apps/Modules/modulefiles/test 은 test 모듈임

  • ANSYS 사용이 가능한 사용자 그룹은 대학교, 산업체(중소기업), 출연연구소에 한함.

    • 사용 가능 사용자 그룹이 아니거나 사용 신청을 하지 않은 타 기관 사용자에 의한 ANSYS 사용은 ANSYS 사에 의해 법적 제재를 당할 수 있음에 유의하시기 바랍니다.

  • Abaqus 사용이 가능한 사용자 그룹은 대학교, 산업체(중소기업), 출연연구소에 한함

    • 사용 가능 사용자 그룹이 아니거나 사용 신청을 하지 않은 타 기관 사용자에 의한 Abaqus 사용은 다쏘시스템코리아에 의해 법적 제재를 당할 수 있음에 유의하시기 바랍니다.

  • Gaussian은 helpdesk 계정담당자(account@ksc.re.kr)를 통해 사용권한 신청 후 사용 가능함

  • 공통 라이브러리(예: cairo, expat, jasper, libpng, udunits 등) 설치 현황은 [별첨 5]을 참조

나. 컴파일러 사용법

1. 컴파일러 및 MPI 환경설정(modules)

1) 기본 필요 모듈

사용할 계산 노드에 해당되는 모듈 하나를 반드시 추가해야 한다.

사용할 계산 노드

KNL

SKL

모듈명

craype-mic-knl

craype-x86-skylake

$ module load craype-mic-knl
혹은
$ module load craype-x86-skylake

2) 모듈 관련 기본 명령어

  • 사용 가능한 모듈 목록 출력

    사용할 수 있는 컴파일러, 라이브러리 등의 모듈 목록을 확인할 수 있다.

$ module avail
혹은 
$ module av
  • 사용할 모듈 추가

    사용하고자 하는 컴파일러, 라이브러리 등의 모듈을 추가할 수 있다.

    사용할 모듈들을 한번에 추가할 수 있다.

$ module load [module name] [module name] [module name] …
혹은
$ module add [module name] [module name] [module name] …

예)
$ module load intel/19.1.2 impi/19.1.2 python/3.7
  • 사용 모듈 삭제

    필요 없는 모듈을 제거한다. 이 때 한번에 여러 개의 모듈을 삭제할 수 있다.

$ module unload [module name] [module name] [module name] ...
혹은
$ module rm [module name] [module name] [module name] ...
  • 사용 모듈 목록 출력

    현재 설정된 모듈 목록을 확인할 수 있다.

$ module list
혹은
$module li
  • 전체 사용 모듈 일괄 삭제

$ module purge

이 경우, 기본 필요 모듈도 일괄 삭제되므로, 모듈 재사용 시 기본 필요 모듈을 다시 추가해야 한다.

  • 기타 module 활용 예시

    • module help 명령 (도움말 보기)

$ module help [module name]
  • module show 명령 (설정 환경변수 확인)

$ module show [module name]

2. 순차 프로그램 컴파일

순 프로그램은 병렬 프로그램 환경을 고려하지 않은 프로그램을 말한다. 즉, OpenMP, MPI와 같은 병렬 프로그램 인터페이스를 사용하지 않는 프로그램으로써, 하나의 노드에서 하나의 프로세서만 사용해 실행되는 프로그램이다. 순차 프로그램 컴파일 시 사용되는 컴파일러별 옵션은 병렬 프로그램을 컴파일 할 때도 그대로 사용되므로, 순차 프로그램에 관심이 없다 하더라도 참조하는 것이 좋다.

1) Intel 컴파일러

Intel 컴파일러를 사용하기 위해서 필요한 버전의 Intel 컴파일러 모듈을 추가하여 사용한다. 사용 가능한 모듈은 module avail로 확인할 수 있다.

$ module load intel/18.0.3

※ 프로그래밍 도구 설치 현황 표를 참고하여 사용가능 버전 확인

  • 컴파일러 종류

컴파일러

프로그램

소스 확장자

icc / icpc

C / C++

.C, .cc, .cpp, .cxx,.c++

ifort

F77/F90

.f, .for, .ftn, .f90, .fpp, .F, .FOR, .FTN, .FPP, .F90

  • 컴파일러 옵션

컴파일러 옵션

설명

-O[1|2|3]

오브젝트 최적화. 숫자는 최적화 레벨

-ip, ipo

프로시저 간 최적화

-qopt_report=[0|1|2|3|4]

벡터 진단 정보의 양을 조절

-xCORE-AVX512 -xMIC-AVX512

512bits 레지스터를 가진 CPU를 지원 (SKL 노드 사용 계산의 경우) 512bits 레지스터를 가진 MIC를 지원 (KNL노드 사용 계산의 경우)

-fast

-O3 -ipo -no-prec-div -static, -fp-model fast=2 매크로

-static/-static-intel/ -i_static

공유 라이브러리를 링크하지 못하게 함

-shared/-shared-intel/ -i_dynamic

공유 라이브러리를 링크를 함

-g -fp

디버깅 정보를 생성

-qopenmp

OpenMP 기반의 multi-thread 코드 사용

-openmp_report=[0|1|2]

OpenMP 병렬화 진단 레벨 조절

-ax -axS

특정 프로세서에 최적화된 코드를 생성 SIMD Extensions4(SSE4) 벡터라이징 컴파일러와 미디어 가속 명령어들을 활용하는 특화된 코드를 생성

-tcheck

스레드 기반의 프로그램의 분석을 활성화 함

-pthread

멀티스레딩 지원을 받기 위해 pthread 라이브러리를 추가 함

-msse<3,4.1>,-msse3

Streaming SIMD Extensions 3 지원

-fPIC,fpic

PIC (Position Independent Code)가 되도록 컴파일

-p

프로파일링 정보를 생성(gmon.out)

-unroll

unroll활성화, 은 최대 횟수 (64비트만 지원)

-mcmodel medium

2GB이상의 memory allocation이 필요한 경우 사용

-help

옵션 목록 출력

  • Intel 컴파일러 사용 예제 다음은 KNL 계산노드에서 test 예제파일을 intel 컴파일러로 컴파일하여 실행파일 test.exe를 만드는 예시임

$ module load craype-mic-knl intel/18.0.3
$ icc –o test.exe –O3 –fPIC –xMIC-AVX512 test.c
혹은
$ ifort -o test.exe -O3 -fPIC -xMIC-AVX512 test.f90
$ ./test.exe

※ /apps/shell/home/job_examples 에서 작업제출 test 예제파일을 복사하여 사용 가능

  • 권장 옵션

계산노드

권장옵션

SKL

-O3 –fPIC –xCORE-AVX512

KNL

-O3 -fPIC -xMIC-AVX512

SKL & KNL

-O3 –fPIC -xCOMMON-AVX512

2) GNU 컴파일러

GNU 컴파일러를 사용하기 위해서 필요한 버전의 GNU 컴파일러 모듈을 추가하여 사용한다. 사용 가능한 모듈은 module avail로 확인할 수 있다.

$ module load gcc/7.2.0

※ 프로그래밍 도구 설치 현황 표를 참고하여 사용가능 버전 확인

※ 반드시 "gcc/6.1.0" 이상 버전을 사용

  • 컴파일러 종류

컴파일러

프로그램

소스 확장자

gcc / g++

C / C++

.C, .cc, .cpp, .cxx,.c++

gfortran

F77/F90

.f, .for, .ftn, .f90, .fpp, .F, .FOR, .FTN, .FPP, .F90

  • GNU 컴파일러 옵션

컴파일러 옵션

설명

-O[1|2|3]

오브젝트 최적화. 숫자는 최적화 레벨

-march=skylake-avx512 -march=knl

512bits 레지스터를 가진 CPU를 지원 (SKL 노드 사용 계산의 경우) 512bits 레지스터를 가진 MIC를 지원 (KNL 노드 사용 계산의 경우)

-Ofast

-O3 -ffast-math 매크로

-funroll-all-loops

모든 루프를 unrolling함

-ffast-math

fast floating point model 사용

-mline-all-stringops

더 많은 inlining 허용, memcpy, strlen, memsetdp 의존적인 코드의 성능을 향상 시킴

-fopenmp

OpenMP 기반의 multi-thread 코드 사용

-g

디버깅 정보를 생성

-pg

프로파일링 정보를 생성(gmont.out)

-fPIC

PIC(Position Independent Code)가 생성되도록 컴파일

-help

옵션 목록 출력

  • GNU 컴파일러 사용 예제

다음은 KNL 계산노드에서 test 예제파일을 GNU 컴파일러로 컴파일하여 실행파일 test.exe를 만드는 예시임

$ module load craype-mic-knl gcc/7.2.0
$ gcc –o test.exe -O3 -fPIC -march=knl test.c
혹은
$ gfortran –o test.exe -O3 -fPIC -march=knl test.f90
$ ./test.exe

※ /apps/shell/home/job_examples 에서 작업제출 test 예제파일을 복사하여 사용 가능

  • 권장 옵션

계산노드

권장옵션

SKL

-O3 -fPIC -march=skylake-avx512

KNL

-O3 -fPIC -march=knl

SKL & KNL

-fPIC -mpku

3) PGI 컴파일러

PGI 컴파일러를 사용하기 위해서 필요한 버전의 PGI 컴파일러 모듈을 추가하여 사용한다. 사용 가능한 모듈은 module avail로 확인할 수 있다.

$ module load pgi/18.10

※ 프로그래밍 도구 설치 현황 표를 참고하여 사용가능 버전 확인

  • 컴파일러 종류

컴파일러

프로그램

소스 확장자

pgcc / pgc++

C / C++

.C, .cc, .cpp, .cxx, .c++

pgfortran

F77/F90

.f, .for, .ftn, .f90, .fpp, .F, .FOR, .FTN, .FPP, .F90

  • PGI 컴파일러 옵션

컴파일러 옵션

설명

-O[1|2|3|4]

오브젝트 최적화. 숫자는 최적화 레벨

-Mipa=fast

프로시저 간 최적화

-fast

-O2 -Munroll=c:1 -Mnoframe -Mlre –Mautoinline 의 매크로

-fastsse

SSE, SSE2를 지원하는 최적화

-g, -gopt

디버깅 정보를 생성

-mp

OpenMP 기반의 multi-thread 코드 사용

-Minfo=mp, ipa

OpenMP관련 정보, 프로시저 간 최적화

-pg

프로파일링 정보를 생성(gmon.out)

-Mprof=time

-Mprof=func

-Mprof=lines

PGPROF output file 생성

- time에 기초한 명령어 단위의 프로파일링 정보를 생성, 많이 사용됨

- function 단위의 프로파일링 정보를 생성

- line 단위의 프로파일링 정보를 생성

(-Mprof=lines의 경우 overhead의 증가로 계산시간이 매우 느려질 수 있음)

-mcmodel medium

2GB이상의 memory allocation이 필요한 경우 사용

-tp=skylake

-tp=knl

Skylake 아키텍쳐 프로세서 전용 옵션

KNL 아키텍쳐 프로세서 전용 옵션

-fPIC

PIC(Position Independent Code)가 생성되도록 컴파일

-help

옵션 목록 출력

  • PGI 컴파일러 사용 예제

다음은 KNL 계산노드에서 test 예제파일을 PGI 컴파일러로 컴파일하여 실행파일 test.exe를 만드는 예시임

$ module load craype-mic-knl pgi/18.10
$ pgcc –o test.exe -fast –tp=knl test.c
혹은
$ pgfortran –o test.exe -fast –tp=knl test.f90
$ ./test.exe

※ /apps/shell/home/job_examples 에서 작업제출 test 예제파일을 복사하여 사용 가능

  • 권장 옵션

계산노드

권장옵션

SKL

-fast –tp=skylake

KNL

-fast –tp=knl

SKL & KNL

-fast –tp=skylake,knl

4) Cray 컴파일러

Cray 컴파일러를 사용하기 위해서 필요한 버전의 Cray 컴파일러 모듈을 추가하여 사용한다. 사용 가능한 모듈은 module avail로 확인할 수 있다.

$ module load cce/8.6.3

※ 프로그래밍 도구 설치 현황 표를 참고하여 사용가능 버전 확인

  • 컴파일러 종류

컴파일러

프로그램

소스 확장자

cc / CC

C / C++

.C, .cc, .cpp, .cxx,.c++

ftn

F77/F90

.f, .for, .ftn, .f90, .fpp, .F, .FOR, .FTN, .FPP, .F90

  • 컴파일러 옵션

컴파일러 옵션

설명

-O[1|2|3]

오브젝트 최적화. 숫자는 최적화 레벨

-hcpu=mic-knl

512bits 레지스터를 가진 MIC를 지원

-Oipa[0

1

-hunroll[0|1|2]

Unrolling 옵션. Default 2인 경우모든 루프를 unrollinig

-hfp[0|1|2|3|4]

Floating_Point 최적화

-h omp(default)

OpenMP 기반의 multi-thread 코드 사용

-g | -G0

디버깅 정보를 생성

-h pic

2GB이상의 static memory가 필요한 경우 사용(-dynamic 함께 사용)

-dynamic

공유 라이브러리를 링크 함

  • Cray 컴파일러 사용 예제

다음은 KNL 계산노드에서 test 예제파일을 Cray 컴파일러로 컴파일하여 실행파일 test.exe를 만드는 예시임

$ module load craype-mic-knl cce/8.6.3 PrgEnv-cray/1.0.2
$ cc –o test.exe –hcpu=mic-knl test.c
혹은
$ ftn –o test.exe –hcpu=mic-knl test.f90
$ ./test.exe

※ /apps/shell/home/job_examples 에서 작업제출 test 예제파일을 복사하여 사용 가능

  • 권장 옵션

계산노드

권장옵션

SKL

기본값

KNL

-hcpu=mic-knl

SKL & KNL

기본값

※ 테스트를 위한 test.c 및 test.f90등은 /apps/shell/home/job_examples 에서 확인 가능 (사용자 디렉토리로 복사하여 테스트)

※ KNL 최적화 옵션을 사용할 프로그램은 KNL debug 노드로 인터렉티브 작업 제출을 통해 접속한 후 컴파일하는 것을 권장(“스케줄러를 통한 작업실행 → 나. 작업제출 모니터링 → 2) 인터렉티브 작업제출” 참고)

3. 병렬 프로그램 컴파일

1) OpenMP 컴파일

OpenMP는 컴파일러 지시자만으로 멀티 스레드를 활용할 수 있도록 간단하게 개발된 기법으로 OpenMP를 사용한 병렬 프로그램 컴파일 시 사용되는 컴파일러는 순차프로그램과 동일하며, 컴파일러 옵션을 추가하여 병렬 컴파일을 할 수 있는데, 현재 대부분의 컴파일러가 OpenMP 지시자를 지원한다.

컴파일러 옵션

프로그램

옵션

icc / icpc / ifort

C / C++ / F77/F90

-qopenmp

gcc / g++ / gfortran

C / C++ / F77/F90

-fopenmp

cc / CC /ftn

C / C++ / F77/F90

-homp

pgcc / pgc++ / pgfortran

C / C++ / F77/F90

-mp

  • OpenMP 프로그램 컴파일 예시 (Intel 컴파일러)

다음은 KNL 계산노드에서 openMP를 사용하는 test_omp 예제파일을 intel 컴파일러로 컴파일하여 실행파일 test_omp.exe를 만드는 예시임

$ module load craype-mic-knl intel/18.0.3
$ icc -o test_omp.exe -qopenmp -O3 -fPIC –xMIC-AVX512 test_omp.c
혹은
$ ifort -o test_omp.exe -qopenmp -O3 -fPIC –xMIC-AVX512 test_omp.f90
$ ./test_omp.exe
  • OpenMP 프로그램 컴파일 예시 (GNU 컴파일러)

다음은 KNL 계산노드에서 openMP를 사용하는 test_omp 예제파일을 GNU 컴파일러로 컴파일하여 실행파일 test_omp.exe를 만드는 예시임

$ module load craype-mic-knl gcc/7.2.0
$ gcc -o test_omp.exe -fopenmp -O3 -fPIC -march=knl test_omp.c
혹은
$ gfortran -o test_omp.exe -fopenmp -O3 -fPIC -march=knl test_omp.f90
$ ./test_omp.exe
  • OpenMP 프로그램 컴파일 예시 (PGI 컴파일러)

다음은 KNL 계산노드에서 openMP를 사용하는 test_omp 예제파일을 PGI 컴파일러로 컴파일하여 실행파일 test_omp.exe를 만드는 예시임

$ module load craype-mic-knl pgi/18.10
$ pgcc –o test_omp.exe -mp -fast test_omp.c
혹은
$ pgfortran –o test_omp.exe -mp -fast test_omp.f90
$ ./test_omp.exe
  • OpenMP 프로그램 컴파일 예시 (Cray 컴파일러)

다음은 KNL 계산노드에서 openMP를 사용하는 test_omp 예제파일을 Cray 컴파일러로 컴파일하여 실행파일 test_omp.exe를 만드는 예시임

$ module load craype-mic-knl cce/8.6.3 PrgEnv-cray/1.0.2
$ cc -o test_omp.exe -homp -hcpu=mic-knl test_omp.c
혹은
$ ftn -o test_omp.exe -homp -hcpu=mic-knl test_omp.f90
$ ./test_omp.exe

2) MPI 컴파일

사용자는 다음 표의 MPI 명령을 실행할 수 있는데, 이 명령은 일종의 wrapper로써 .bashrc를 통해 지정된 컴파일러가 소스를 컴파일하게 된다.

구분

Intel

GNU

PGI

Cray

Fortran

ifort

gfortran

pgfortran

ftn

Fortran + MPI

mpiifort

mpif90

mpif90

ftn

C

icc

gcc

pgcc

cc

C + MPI

mpiicc

mpicc

mpicc

cc

C++

icpc

g++

pgc++

CC

C++ + MPI

mpiicpc

mpicxx

mpicxx

CC

mpicc로 컴파일을 하더라도, 옵션은 wrapping되는 본래의 컴파일러에 해당하는 옵션을 사용해야 한다.

  • MPI 프로그램 컴파일 예시 (Intel 컴파일러)

다음은 KNL 계산노드에서 MPI를 사용하는 test_mpi 예제파일을 Intel 컴파일러로 컴파일하여 실행파일 test_mpi.exe를 만드는 예시임

$ module load craype-mic-knl intel/18.0.3 impi/18.0.3
$ mpiicc -o test_mpi.exe -O3 -fPIC -xMIC-AVX512 test_mpi.c
혹은
$ mpiifort -o test_mpi.exe -O3 -fPIC -xMIC-AVX512 test_mpi.f90
$ mpirun -np 2 ./test_mpi.exe
  • MPI 프로그램 컴파일 예시 (GNU 컴파일러)

다음은 KNL 계산노드에서 MPI를 사용하는 test_mpi 예제파일을 GNU 컴파일러로 컴파일하여 실행파일 test_mpi.exe를 만드는 예시임

$ module load craype-mic-knl gcc/7.2.0 openmpi/3.1.0
$ mpicc -o test_mpi.exe -O3 -fPIC -march=knl test_mpi.c
혹은
$ mpif90 -o test_mpi.exe -O3 -fPIC -march=knl test_mpi.f90
$ mpirun -np 2 ./test_mpi.exe
  • MPI 프로그램 컴파일 예시 (PGI 컴파일러)

다음은 KNL 계산노드에서 MPI를 사용하는 test_mpi 예제파일을 PGI 컴파일러로 컴파일하여 실행파일 test_mpi.exe를 만드는 예시임

$ module load craype-mic-knl pgi/18.10 openmpi/3.1.0
$ mpicc -o test_mpi.exe -O3 -fPIC -tp=knl test_mpi.c
혹은
$ mpifort -o test_mpi.exe -O3 -fPIC -tp=knl test_mpi.f90
$ mpirun -np 2 ./test_mpi.exe
  • MPI 프로그램 컴파일 예시 (Cray 컴파일러)

다음은 KNL 계산노드에서 MPI를 사용하는 test_mpi 예제파일을 Cray 컴파일러로 컴파일하여 실행파일 test_mpi.exe를 만드는 예시임

$ module load craype-mic-knl cce/8.6.3 PrgEnv-cray/1.0.2
$ cc -o test_mpi.exe -hcpu=mic-knl test_mpi.c
혹은
$ ftn -o test_mpi.exe -hcpu=mic-knl test_mpi.f90
$ mpirun -np 2 ./test_mpi.exe

다. 디버거 및 프로파일러

5호기 누리온 시스템 베타서비스는 사용자의 프로그램 디버깅을 위하여 DDT를 제공한다. 또한 사용자의 프로그램 프로파일링을 위하여 Intel vtune와 CaryPat 두 가지의 프로파일러를 제공한다.

1. 디버거 DDT 사용예제

  • 5호기 시스템에서 DDT를 사용하기 위하여 사용할 아키텍처, 컴파일러, MPI를 선택하고 DDT를 사용하기 위한 모듈까지 선택한다.

$ module load craype-mic-knl or craype-x86-skylake
$ module load intel/17.0.5 impi/17.0.5
$ module load forge/18.1.2
  • 본 예제는 위와 같은 황경에서 테스트 되었다.

  • DDT를 사용하기 전 사전 준비로 컴파일 시 -g -O0 옵션을 넣어 실행파일을 선택한다.

$ mpiicc -o test.x -g -O0 test.c
  • 사용자의 데스크탑에서 xming 실행 및 ssh X환경 설정 완료한 후 ddt 실행 명령을 실행 한다.

$ ddt &
  • 명령을 실행하여 다음과 같은 팝업 실행 창을 확인한다.

  • 위 명령 중 "RUN" 을 선택하여 다음과 같이 디버깅할 파일 선택한 후 다시 새로운 팝업 창의 "RUN" 선택한다.

  • 다음과 같이 선택 된 실행 파일에 대한 디버깅 모드로 진입하여 디버깅을 진행할 수 있다.

2. 프로파일러 Intel vtune Amplifiler 사용예제

  • 본 시스템에서 프로파일러인 vtune을 사용하기 위하여 아키텍처, 컴파일러, MPI를 선택한 후 vtune을 선택하면 프로파일러를 사용 할 수 있다.

$ module load craype-mic-knl or craype-x86-skylake
$ module load intel/17.0.5 impi/17.0.5
$ module load vtune/17.0.5

본 예제는 위와 같은 환경에서 진행되었다.

  • CLI 사용법

    • Intel vtune Amplifier를 CLI 모드로 실행할 때 명령어는 아래와 같은 형식이다.

  • $ amplxe-cl 옵션 분석할 프로그램 실행

$ amplxe-cl -collect hotspots /home01/$USER/test/test.x

amplxe: Using result path '/home01/$USER/test/r000hs'
amplxe: Executing actions 75% Generating a report
Function CPUTime CPUTime:EffectiveTime CPUTime:EffectiveTime:Idle
CPUTime:EffectiveTime:Poor CPUTime:EffectiveTime:Ok CPUTime:EffectiveTime:Ideal
CPUTime:EffectiveTime:Over CPUTime:SpinTime CPUTime:OverheadTime Module Function(full)
SourceFile StartAddress
 
multiply1 21.568s 21.568s 0.176s 21.392s 0s 0s 0s 0s 0s martix.mic multiply1 multiply.c
0x401590
init_arr 0.020s 0.020s 0s 0.020s 0s 0s 0s 0s 0s matrix.mic init_arr matrix.c
0x402384
amplx: Executing actions 100% done
  • 위와 같이 이미 컴파일 된 실행파일을 준비하여 명령어 형식에 맞게 실행 시 r000hs 디렉터리가 생성되는 것을 확인할 수 있다. 디렉터리가 생성된 것을 확인 후 리포트 생성을 위한 명령을 실행하면 아래와 같은 결과를 출력된다.

$ amplxe-cl -report hotspots /home01/$USER/debugger/test/r000hs
amplxe: Using result path `/home01/$USER/debugger/test/r000hs'
amplxe: Executing actions 75 % Generating a report Function CPU Time CPU Time:Effective Time CPU Time:Spin Time CPU Time:Overhead Time Module Function (Full) Source File Start Address
-------- -------- ----------------------- ------------------ ---------------------- ------ --------------- ----------- -------------
amplxe: Executing actions 100 % done 
  • GUI 사용 결과 확인 방법

    • Intel vtune Amplifier는 GUI 모드 역시 지원한다. 여기서는 GUI를 이용한 결과 확인 방법만 설명한다.

    • 사용자의 데스크탑에서 xming 실행

$ amplxe-gui

  • 아래의 화면에서 New Analysis 버튼을 클릭한다.

  • 아래와 같은 화면이 나타나면 cpu수와 체크 확인 후 Start 버튼을 클릭하면 분석이 시작된다.

  • 완료되면 다음과 같이 분석 결과가 여러 개의 탭으로 요약되어 나타난다.

3. 프로파일러 Cary-Pat 사용예제

  • 본 시스템에서 프로파일러인 CaryPat을 사용하기 위하여 아래와 같이 아키텍처 등 환경을 설정한 후 예제를 진행하였다.

$ module load craype-mic-knl or craype-x86-skylake
$ module load perftools-base/6.5.2 perftools/6.5.2
$ module load PrgEnv-cray/1.0.2 cce/8.6.3
  • 먼저 예제에 사용될 test.c 파일을 컴파일 한다.

$ cc test.c
  • 위 실행 결과로 a.out 이라는 실행파일이 생성된다.

  • CaryPat으로 분석을 위하여 pat_build를 이용하여 새로운 실행 파일을 생성한다.

$ pat_build -0 apa a.out
  • 위의 실행 결과로 a.out+pat 라는 파일이 생성된다.

  • 생성된 실행파일은 MPI로 작성된 파일이므로 mpirun으로 실행한다.

$ mpirun -np 4 ./a.out+pat
  • 실행을 완료하면 a.out+pat+378250-3s 디렉터리가 생성되고 디렉터리 안에 xf-files/002812.xf 파일이 생긴다.

$ pat_report a.out+pat+378250-3s
  • 위와 같이 pat_report를 실행하면 a.out+pat+378250-3s 디렉터리 안에 .ap2 파일과 .apa 파일이 생성된다.

$ pat_build -0 a.out+pat+378250-3s/build-options.apa
  • .apa 파일을 이용하여 다시 실행파일을 생성하면 a.out+apa 이름의 파일이 생성된다.

  • 이렇게 생성된 a.out+apa 파일을 실행하면

$ mpirun -np 4 ./a.out+apa
  • a.out+pat+378250-3t에 새로운 xf 파일이 생성된다.

  • pat_report를 다시 사용하여 새로운 데이터를 처리한다.

$ pat_report a.out+apa+378250-3t
  • 위와 같이 실행하여 ap2 파일과 tracing 리포트를 생성한다.

  • 위와 같이 수집된 데이터를 시각화 하는 방법으로 app2를 제공한다.

$ app2 a.out+apa+378250-3t
  • 아래와 같이 시각화가 가능하다.

2023년 6월 30일에 마지막으로 업데이트되었습니다.

Last updated