슈퍼컴퓨터 4호기 IBM 2차 시스템 사용자 지침서 슈퍼컴퓨팅센터 2011년 6월 슈퍼컴퓨터인프라팀
1 슈퍼컴퓨터 4호기 IBM 대용량 2차 시스템 개요 가. 4호기 2차 시스템 구성 3 나. POWER6 프로세서 사양 4 2 사용자 환경 가. 계정발급 5 나. 로그인 5 다. 사용자 쉘 변경 7 라. 홈 디렉터리 7 마. 스크래치 7 바. 데이터 아카이빙 8 사. 제공 시간 8 3 프로그램 컴파일 및 실행 가. 기본 컴파일러 및 옵션 9 나. Serial 코드 10 다. OpenMP 코드 11 라. MPI 코드 12 마. 수학 라이브러리 사용법 16 바. 소프트웨어 설치 현황 17 4 작업 실행 준비 가. 슈퍼컴 4호기 큐 정책 19 나. 작업 class 확인 20 다. Job Command File 주요 키워드 20 라. Job command file 작성 25 5 LoadLeveler를 통한 작업 실행 가. 작업 submit 28 나. 작업 상태 조회 28 다. 노드별 가용 CPU 알아보기 29 라. 클래스별 상태 조회 29 마. 작업 취소 30 6 지원 가. 사용자 지원 인력 30 나. 홈 페이지 30
1. 슈퍼컴퓨터 4호기 IBM 대용량 2차 시스템 개요 가. 4호기 2차 시스템 구성 KISTI 슈퍼컴퓨터 4호기 IBM 대용량 2차 시스템은 총 24대의 컴퓨팅 시스템과 2대의 로 그인 시스템으로 구성된다. 구 분 컴퓨팅 시스템 로그인 시스템 시스템 명 Power 595, 64way Power 560, 8way 노드수 24 2 C P U 프로세서 명 POWER6 [5.0GHz] POWER6 [3.6GHz] 전체 개수(개) 1536 [64/노드] 16 [8/노드] Rpeak 30.72TFLOPS [1280GFLOPS/노드] 230.4GFLOPS [115.2GFLOPS/노드] 주기억장치 용량(GB) 8704GB [256GB 18,512GB 4,1024GBx2] 64GB [32GB/노드] < IBM 대용량 2차 시스템 구성도 > - 3 -
나. POWER6 프로세서 사양 Clock Speed 이론 최고 성능 단일 칩 당 내장 Core 수 5.0GHz 20GFlops / Core 2개 Cache 구조 +L1 Cache 64/32KB(I/D) / core +L2 Cache 4MB / core +L3 Cache 32MB / chip <POWER6 칩 구조> - 4 -
2. 사용자 환경 가. 계정발급 - KISTI 슈퍼컴퓨팅센터 홈페이지(http://www.ksc.re.kr) 사이트의 사용자지원->사용안내 메뉴를 참고하여 사용자계정을 발급받는다. - 계정신청 안내 및 계정신청 http://www.ksc.re.kr/new2009/03consumer/01_consumer.php 나. 로그인 - 사용자가 컴퓨팅 노드로 바로 접속은 불가능하고 로그인 노드로만 접속이 가능함. - 기본 로그인 노드는 gaiad.ksc.re.kr(150.183.146.24)이며, 만약 gaiad.ksc.re.kr 시스템에 접속이 불가능할 경우 gaiae.ksc.re.kr(150.183.146.25)를 이용하여 접속. - telnet을 통한 접속은 불가능하며 ssh를 통해서만 접속이 가능함. - 파일 전송은 sftp, ftp를 통해 가능 l Unix, Linux 시스템에서 로그인하는 방법 1 shell 터미널에서 다음과 같이 ssh 명령을 입력한다. $ ssh -l 사용자ID 150,183.146.24(or 150.183.146.25) 2 처음 수행시 다음과 같은 메시지가 나오는데 "yes"를 입력하면 된다. The authenticity of host '150.183.146.24 (150.183.146.24)' can't be established. RSA key fingerprint is 7a:8b:a5:1f:1d:5b:68:bb:a6:0c:a1:3a:ac:7e:65:f3. Are you sure you want to continue connecting (yes/no)? Warning: Permanently added '150.183.146.24' (RSA) to the list of known hosts. my_user_id@150.183.146.24's password: l Windows 시스템에서 로그인하는 방법 1 putty 프로그램을 설치 후 접속(프로그램은 인터넷을 통해 무료로 다운받을 수 있음) - putty 프로그램 다운로드 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html - putty 프로그램 수행 - 5 -
처음 수행시 다음과 같은 메시지가 나오는데 예(Y)를 클릭하면 된다. 아래 화면이 나오면 사용자 id와 password를 입력하여 접속한다. 2 putty 프로그램에 대한 자세한 내용은 putty 홈페이지를 참조 http://www.chiark.greenend.org.uk/~sgtatham/putty/ 3 이밖에 SSH Secure Shell Client 프로그램을 사용할 수 있다. 웹 검색 사이트에서 ssh secure shell download 검색하여 download 할 수 있다. - 6 -
다. 사용자 쉘 변경 - 기본 쉘은 Korn shell(ksh)을 사용한다. - 쉘 변경은 다음과 같이 chsh 명령을 이용한다. $ chsh Current available shells: /bin/sh /bin/bsh /bin/csh /bin/ksh /bin/tsh /bin/bash /bin/tcsh /bin/ksh93 /usr/bin/rksh /usr/bin/rksh93 /usr/sbin/uucp/uucico /usr/sbin/sliplogin /usr/sbin/snappd /usr/bin/csh my_user_id's current login shell: /bin/ksh Change (yes) or (no)? > 라. 홈 디렉터리 - 사용자 홈 디렉터리의 기본 quota는 구좌 당 6GB로 제한되어 있다. - 사용자 홈 디렉터리는 소규모 데이터 저장용으로 이용할 수 있으며, 대형 I/O를 일으키는 작업은 스크래치 디렉터리를 이용하도록 한다. - 사용자 홈 디렉터리는 KISTI 백업 정책에 따라 정기적으로 백업된다. [주의] - 현재 시간으로부터 그달 1일까지는 1일 단위로 복구 가능. 예를 들어 1월 29일에서 복구 가능 한 데이터는 1월 1일 1부터 29일까지 일 단위로 복구 가능 - 1일 이전은 1개월 단위 12개월까지 복구 가능 - 보다 자세한 사항은 슈퍼컴터인프라팀으로 문의 마. 스크래치 - 스크래치 용도로 병렬 공유 파일시스템으로 구성된 /gpfs1(28tb), /gpfs2(28tb), /gpfs3(28tb), /gpfs4(28tb) 디렉터리를 사용할 수 있으며, 사용자 작업을 이 디렉터리에 서 수행할 수 있다. - 스크래치 디렉터리의 쿼타는 계정 당 500GB로 제한되어 있다. - 7 -
사용자 계정 혹은 구좌당 quota 현황은 다음과 같이 quotaprint command로 확인이 가능하다. $ quotaprint [ USER DISK USAGE IN THE HOME & SCRATCH DIR ] ================================================================ GROUP_ID DIR QUOTA_LIMIT USED_DISK AVAIL_DISK ================================================================ mygroup /home01 6144MB 3470MB 2674MB mygroup /gpfs1 524288MB 28MB 524260MB mygroup /gpfs2 524288MB 10MB 524278MB mygroup /gpfs3 524288MB 0MB 524288MB mygroup /gpfs4 524288MB 0MB 524288MB ---------------------------------------------------------------- DEFAULT DISK QUOTA : HOME 3 GB, GPFS[1-4] 500GB ---------------------------------------------------------------- - 최종 수정 후 120시간(5일) 경과 시 자동 삭제 [주의] - 스크래치 디렉토리의 경우 120시간이 경과된 파일들에 대해 별도의 통보 없이 자동 삭제 정책이 진행되기 때문에 스크래치 디렉토리에서 작업 수행 후 보관해야 할 파일들은 SAM-QFS 아카이빙 시스템을 이용하여 backup이 될 수 있도록 미리 조치를 취해야 한다. 바. 데이터 아카이빙 - SAM-QFS 아카이빙 시스템 사용 가능 - SAM-QFS 아카이빙 시스템 사용에 대한 자세한 사항은 SAM-QFS 사용자 지침서 참조 SAM-QFS 사용자지침서 : http://www.ksc.re.kr/new2009/02resource/04_consumer08.php 사. 제공 시간 - 구좌 당 2,500 CPU time(100 SRU) - Queue Charging factor에 따른 실제 사용 가능한 CPU 시간 (1차 시스템만 해당됨) Queue charging 큐 factor class.1-2 1.0 사용시간 Machine charging factor class.2-32 1.0 2,500 0.04 class.32plus 1.0 special 2 [참조] Queue charging factor Machine charging factor CPU time = 100 [주의] - 상세 큐 구성은 4-가. 슈퍼컴 4호기 큐 정책 을 참조 - 8 -
3. 프로그램 컴파일 및 실행 가. 기본 컴파일러 및 옵션 - 기본 컴파일러 IBM 대용량 시스템에는 Fortran, C, C++ 컴파일러가 다음과 같이 설치되어 있는데, 사용 자 프로그램 언어(C, C++, Fortran 77, Fortran 90, 등) 및 종류(serial, OpenMP, MPI, 등)에 따라 알맞게 선택해서 사용하게 되어 있다. 언어 Serial OpenMP MPI OpenMP+MPI C xlc xlc_r mpcc mpcc_r C++ xlc, xlc++ xlc_r, xlc++_r mpcc mpcc_r Fortran 77 xlf, f77 xlf_r mpxlf mpxlf_r Fortran 90 xlf90, f90 xlf90_r mpxlf90 mpxlf90_r Fortran 95 xlf95, f95 xlf95_r mpxlf95 mpxlf95_r Fortran 2003 xlf2003, f2003 xlf2003_r mpxlf2003_r mpxlf2003_r - 컴파일 옵션 옵션 -o 실행파일 생성되는 실행파일의 이름을 지정, 지정하지 않으면 default로 a.out이 생성됨 -c 실행파일은 만들지 않고,.o 확장자를 가진 object 파일만 만듦 -q32 / -q64 설명 32bit 실행파일 및 64bit 실행파일을 만듦, 지정하지 않으면 default로 32bit 실행파일을 생성, 이 옵션은 data precision과는 상관없고, 단지 메모리 addressing 범위를 지정하는데 사용됨. -q32 옵션으로 컴파일 하면 최대 2GB의 메모리를 사용할 수 있고, -q64 옵션으로 컴파일하면 그 이상의 물리적 메모리 한계까지 사용할 수 있음. -qsuffix=f=f90 소스파일의 default 확장자를.f 대신.f90으로 지정 fortran 소스 코드가 fixed format임을 지정 -qfixed=right_margin으로 지정할 경우 right margin을 최소 72부터 최대 132까지 지정할 -qfixed[=right_margin] 수 있음. xlf, xlf_r, mpxlf, mpxlf_r 컴파일러에 대해서는-qfixed=72가 default임. fortran 소스 코드가 free format임을 지정 -qfree[=f90] xlf90, xlf95, xlf90_r, xlf95_r, mpxlf90, mpxlf90_r, mpxlf95, mpxlf95_r 컴파일러에 대해서는 -qfree=f90이 default임 -g debug 정보를 생성하여 소스코드를 디버깅할 수 있도록 함 -pg 프로파일링이 가능하도록 object file을 생성 - 환경 변수 환경변수 OBJECT_MODE 환경변수를 이용하여 32bit 바이너리 혹은 64bit 바이너리를 생성할 수 있도록 지정할 수 있음. -q32 혹은 -q64 옵션 대신 사용할 수 있음. OBJECT_MODE ex. OBJECT_MODE=32 :32bit 바이너리 생성 OBJECT_MODE=64 :64bit 바이너리 생성 환경변수는 사용하는 쉘에 따라 다음과 같이 export 혹은 setenv 명령을 통해 적용할 수 있다. $ export OBJECT_MODE=32 : ksh, bash % setenv OBJECT_MODE 32 : csh 설명 - 9 -
옵션 설명 -bmaxdata:<bytes> 프로그램의 data segment(주로 head 메모리)를 위한 공간을 할당, 32bit에서 최대 2GB까지 사용할 수 있도록 지정할 수 있음. 32bit로 컴파일한 프로그램에 대해 이 옵션을 사용하지 않을 경우 최대 256MB의 data 메모리를 사용할 수 있음. ex) -bmaxdata:0x10000000 -> 256MB 사용가능 -bmaxdata:0x80000000 -> 2GB(256MB x 8) 사용가능. 최대크기 일반적으로 -q32 컴파일 옵션을 사용하는 32bit에서 사용하고, -q64 컴파일 옵션을 사용하는 64bit에서는 사용하지 않음. -bmaxstack:<bytes> -L path -l libname 프로그램의 stack segment를 위한 공간을 할당. 32bit 프로그램의 경우 하나의 프로세스내의 모든 thread에 대해 총 stack size는 256MB를 초과할 수 없음. 64bit 프로그램은 이에 대한 제한이 없음. 시스템 기본 library를 사용하기 이전에 먼저 search해야 하는 디렉터리 위치를 지정, 여러 개의 -L 옵션을 사용하여 적용할 수 있으며, 이 경우의 왼쪽에서 오른쪽으로 순서로 search하게 됨. 프로그램에서 참조하는 external 루틴에 대한 library명을 지정. 예를 들어 libname.a 파일의 library를 링크하고자 한다면 -l name 이라고 정의하면 됨. - 링크 옵션 예를 들어 /applic/local/lib/liblapack-pwr5.a 및 /applic/local/lib/libtmglib-pwr5.a 이브러리를 링크하고자 할 경우 다음과 같이 추가하면 된다. 라 -L/applic/local/lib -llapack-pwr5 -ltmglib-pwr5 - 코드 최적화 옵션 옵션 -O[n] -qarch=pwr6 -qtune=pwr6 -qhot 설명 최적화 레벨을 지정, n은 2,3,4,5중 하나로 지정될 수 있음. POWER6 칩에서 수행되는 instruction을 포함하는 object 코드를 생성 POWER6 칩에 최적화된 object 코드를 생성 loop의 효율을 최대화할 수 있도록 high-order transformation을 수행, 경우에 따라 프로그램의 semantics를 약간 변경할 수 있는데, -qstrict 옵션을 사용하여 막을 수 있음. 그 밖의 컴파일러 옵션은 다음 사이트에 설명되어 있다. XL Fortran AIX, V12.1 : Summary of compiler options : http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp?topic=/com.ibm. xlf121.aix.doc/compiler_ref/ruoptlst.html XL C/C++ for AIX, V10.1 : Summary of compiler options : http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp?topic=/com.ibm. xlcpp101.aix.doc/compiler_ref/ruoptlst.html 나. Serial 코드 - 기본적인 컴파일 방법 - 10 -
Fortran 77 : xlf [컴파일 옵션] [-o 실행파일] source_file C : xlc [컴파일 옵션] [-o 실행파일] source_file C++ : xlc [컴파일 옵션] [-o 실행파일] source_file 여기서 source_file 부분에는 소스 파일 혹은 object(.o 확장자) 파일이 들어가고, 컴파일 옵 션 부분에는 위에 정리되어 있는 여러 가지 다양한 컴파일 옵션, 링커옵션 및 최적화 옵션 들을 추가할 수 있다. - Serial 코드에 대한 추천 컴파일 옵션 Fortran 77 : xlf -O3 -qarch=pwr6 -qtune=pwr6 -o serial.f.exe serial_f_code.f C : xlc -O3 -qarch=pwr6 -qtune=pwr6 -o serial.c.exe serial_c_code.c C++ : xlc -O3 -qarch=pwr6 -qtune=pwr6 -o serial.cpp.exe serial_cpp_code.c - Serial 코드의 수행 예 $./serial.f.exe $./serial.c.exe $./serial.cpp.exe Serial 코드의 경우 일반적인 명령어 수행하듯이 수행하면 된다. [주의] - 위와 같은 interactive 작업 수행은 로그인 노드에서만 허용하고 있으며, 계산노드에서는 불가능하다. - 로그인 노드에서의 interactive 작업은 CPU time 기준으로 최대 10분으로 제한하고 있으며, 간단한 테스트 및 디버깅 목적으로 사용할 수 있다. - 10분 이상의 실제 작업 수행은 Loadleveler를 통해서만 가능하며, job command file을 작성하여 제출해야 한다. 다. OpenMP 코드 - 기본적인 컴파일 방법 Fortran 77 : xlf_r -qsmp=omp [컴파일 옵션] [-o 실행파일] source_file C : xlc_r -qsmp=omp [컴파일 옵션] [-o 실행파일] source_file C++ : xlc_r -qsmp=omp [컴파일 옵션] [-o 실행파일] source_file 여기서 source_file 부분에는 소스 파일 혹은 object(.o 확장자) 파일이 들어가고, 컴파일 옵 션 부분에는 위에 정리되어 있는 여러 가지 다양한 컴파일 옵션, 링커옵션 및 최적화 옵션 들을 추가할 수 있다. - OpenMP 컴파일 옵션 옵션 설명 -qsmp=omp OpenMP Directive($OMP)가 지정된 곳에 대해 공유메모리 병렬화가 가능하도록 함. -qsmp -qsmp=auto와 같은 옵션으로 공유메모리 모델이 적용되는 곳에 대해 OpenMP Directive가 없더라도 자동으로 mulit-thread 코드 병렬화가 가능하도록 함, -qhot옵션이 포함됨 - OpenMP 링크 옵션 - 11 -
옵션 -qsmp 설명 thread를 사용하는 경우 지정함. 즉 OpenMP로 작성된 소스코드를 컴파일하여 생성된 object 파일들을 링크하여 실행파일을 만들 때 적용해 주어야함. - OpenMP 환경 변수 환경변수 OMP_NUM_THREADS OpenMP thread 수를 지정 OMP_SCHEDULE OMP_DYNAMIC=FALS E or TRUE (default=true) AIXTHREAD_SCOPE= S or P (default=p) XLSMPOPTS (IBM Fortran Runtime Library) 설명 schedule 타입과 chunk size등을 지정, ex) OMP_SCHEDULE="static,10" 병렬화된 부분을 수행할 때 가용한 thread 수를 dynamic하게 adjustment할 것인지를 지정. Dynamic thread adjustment를 활성화(TRUE)하면 약간의 overhead가 추가됨. user thread를 시스템의 프로세서에 1대1로 매핑할 것인지를 지정. S로 지정할 경우 1대1로 매핑됨. 일반적인 과학연산프로그램의 경우 S로 지정하는 것이 유리하고, 시스템의 프로세서 수보다 더 많은 thread를 수행하는 경우에는 P로 지정하는 것이 유리. l parthds=n : OMP_NUM_THREADS와 마찬가지로 OpenMP thread 수를 지정 (n=openmp thread 수) l spins=0:yields=0 : 각 thread들이 master thread로 join된 후에도 나머지 thread들이 sleep으로 가지 못하게 하면서 강제적으로 busy-wait 상태에서 대기하도록 함. 일반적으로 많은 CPU time을 사용하면서 좀 더 성능이 개선됨. l stack=bytes(smp stack size, default=4mb/thread) thread 하나의 stack size를 지정할 수 있음. 32bit 프로그램의 경우 하나의 프로세스내의 모든 thread에 대해 총 stack size는 256MB를 초과할 수 없음. 64bit 프로그램은 이에 대한 제한이 없음. ex) export XLSMPOPTS=stack=32000000 -> thread 하나의 stack size를 32MB로 지정 export XLSMPOPTS="parthds=4:spins=0:yields=0:stack=32000000" - OpenMP 코드에 대한 추천 컴파일 옵션 Fortran 77 : xlf_r -qsmp=omp -O3 -qarch=pwr6 -qtune=pwr6 -o openmp.f.exe openmp_f_code.f C : xlc_r -qsmp=omp -O3 -qarch=pwr6 -qtune=pwr6 -o openmp.c.exe openmp_c_code.c C++ : xlc_r -qsmp=omp -O3 -qarch=pwr6 -qtune=pwr6 -o openmp.cpp.exe openmp_cpp_code.c - OpenMP 코드의 수행 예 $ export OMP_NUM_THREADS=4 : thread수 지정 $./openmp.f.exe 위의 환경변수 외에 다양한 OpenMP코드 관련 환경변수를 적용하여 성능을 비교해 볼 수 있다. $ export XLSMPOPTS= stack=32000000 : stack size를 32MB로 지정 $ export AIXTHREAD_SCOPE=S : user thread와 system thread를 1대1로 매핑 $ export OMP_DYNAMIC=FALSE : Dynamic thread adjustment를 비활성화 $ export XLSMPOPTS="spins=0:yields=0:stack=32000000" [주의] - 위와 같은 interactive 작업 수행은 로그인 노드에서만 허용하고 있으며, 계산노드에서는 불가능하다. - 로그인 노드에서의 interactive 작업은 CPU time 기준으로 최대 10분으로 제한하고 있으며, 간단한 테스트 및 디버깅 목적으로 사용할 수 있다. - 10분 이상의 실제 작업 수행은 Loadleveler를 통해서만 가능하며, job command file을 작성하여 제출해야 한다. 라. MPI 코드 - 12 -
- 기본적인 컴파일 방법 Fortran 77 : mpxlf [컴파일 옵션] [-o 실행파일] source_file C : mpcc [컴파일 옵션] [-o 실행파일] source_file C++ : mpcc [컴파일 옵션] [-o 실행파일] source_file 여기서 source_file 부분에는 소스 파일 혹은 object(.o 확장자) 파일이 들어가고, 컴파일 옵 션 부분에는 위에 정리되어 있는 여러 가지 다양한 컴파일 옵션, 링커옵션 및 최적화 옵션 들을 추가할 수 있다. - MPI 코드에 대한 추천 컴파일 옵션 Fortran 77 : mpxlf -O3 -qarch=pwr6 -qtune=pwr6 -o mpi.f.exe mpi_f_code.f C : mpcc -O3 -qarch=pwr6 -qtune=pwr6 -o mpi.c.exe mpi_c_code.c C++ : mpcc -O3 -qarch=pwr6 -qtune=pwr6 -o mpi.cpp.exe mpi_cpp_code.c - MPI 코드의 수행을 위한 선행 작업 1 홈디렉터리에.rhosts 파일 추가 $ cat ~/.rhosts gaia my_user_id gaiab my_user_id gaiac my_user_id gaiad my_user_id gaiae my_user_id gaia01 my_user_id gaia02 my_user_id gaia03 my_user_id gaia04 my_user_id gaia05 my_user_id gaia06 my_user_id gaia07 my_user_id gaia08 my_user_id gaia09 my_user_id gaia10 my_user_id gaia11 my_user_id gaia12 my_user_id gaia13 my_user_id gaia14 my_user_id gaia15 my_user_id gaia16 my_user_id gaia17 my_user_id gaia18 my_user_id gaia19 my_user_id gaia20 my_user_id gaia21 my_user_id gaia22 my_user_id gaia23 my_user_id gaia24 my_user_id gaia25 my_user_id gaia26 my_user_id gaia27 my_user_id gaia28 my_user_id gaia29 my_user_id gaia30 my_user_id gaia31 my_user_id gaia32 my_user_id gaia33 my_user_id gaia34 my_user_id - 13 -
위와 같이 사용자의 홈디렉터리에 IBM 4호기 시스템의 로그인 노드 및 계산 노드의 호스트 명과 사용자 ID가 정의된.rhosts 파일을 만들어서 추가해 준다..rhosts 파일이 있어야 rsh 명령을 수행할 수 있으며, 또한 LoadLeveler 및 interactive로 MPI 작업을 수행할 수 있다. 2 작업 수행 디렉터리에 host.list 파일 작성 $ cat./host.list gaiad gaiad gaiad gaiad gaiae gaiae gaiae gaiae 작업을 수행하는 디렉터리에 MPI task(process)가 실행될 노드의 호스트명(hostname)들이 정의된 host.list 파일을 만들어 준다. 이때 한 노드에서 수행될 MPI task(process)가 여러 개일 경우 MPI task(process) 수만큼 해당 노드의 호스트명을 추가해 준다. MPI 작업 수행 시 MPI task(process)수가 지정되면 host.list 파일에 나열된 호스트명들을 처음부터 하나씩 읽어 와서 MPI rank 순으로 할당한 후 해당 노드에 MPI task(process)를 수행시키게 된다. 그래서 전체적으로 host.list 파일에 나열된 호스트명의 수는 수행하고자 하는 MPI task(process) 수와 같거나 그 이상이어야 한다. 참고로 host.list 파일은 interactive 수행 시에만 필요하며 LoadLeveler를 이용하여 수행할 때에는 LoadLeveler가 알아서 노드를 할당해 주기 때문에 필요가 없다. 또한 interactive 수 행 시에만 필요하기 때문에 위와 같이 interactive 수행이 가능한 로그인 노드의 호스트명만 추가할 수 있다. host.list 파일을 만들 때 각 로그인 노드의 CPU core수를 고려하여 노드 당 최대 8개까지만 사용하는 것이 좋다. - MPI 코드의 수행방법 1 poe command를 통한 MPI 코드 수행 방법 poe mpi_executable [ program input_parameters ] -shared_memory yes # 동일 노드에서의 통신시 Shared Mem 프로토콜을 사용 -hostfile./host.list # host.list 파일 지정 -procs np # MPI task(process) 수를 지정 MPI 코드 수행 시 위와 같이 poe command에 MPI 컴파일러로 컴파일된 MPI 실행파일 및 옵션들을 추가하여 수행할 수 있다. 여기서 poe는 일반적인 MPICH의 mpirun과 비슷한 역 할을 한다고 볼 수 있다. poe command로 MPI 코드를 수행 시 위의 옵션 외에 다음과 같은 다양한 옵션들을 추가 하여 수행시킬 수 있다. - 14 -
-single_thread {yes no} : yes로 설정하게 되면 single thread 프로그램에 대해 mutex lock overhead를 피할 수 있기 때문에 성능에 도움을 줄 수 있음. 단 MPI-IO와 MPI-1SC를 사용할 경우 no로 설정해야함. default는 no -infolevel n : 작업이 수행되면서 표시되는 메시지 level을 지정, n에 들어가는 수에 따라 다음과 같은 내용을 표시, default는 1 0 : error 1 : warning, error 2 : informational, warning, error 3 : informational, warning, error, diagnostic messages 4,5,6 : informational, warning, error, highlevel, lowlevel diagostic messages -labelio {yes no} : yes로 설정할 경우 MPI 작업이 수행되면서 보여주는 각 MPI task의 standard output 앞에 task id를 표시 default는 no -stdoutmode {unordered ordered task_id} : MPI task의 output을 표시하는 방법 지정, default는 unordered unordered : 모든 MPI task가 output을 순서에 상관없이 asynchronous하게 표시 ordered : 각 MPI task의 output을 buffer에 저장해 두었다가 나중에 MPI task 순서대로 한꺼번에 표시 task_id : 모든 MPI task의 output을 모두 표시하는 것이 아니라 task_id에 해당하는 rank의 output만 표시 -pgmmodel {spmd mpmd} : 프로그래밍 모델을 지정, default는 spmd -cmdfile commands_file : mpi_executable 및 program input_parameters가 정리되어 있는 commands_file을 읽어서 poe 명령을 수행. 즉 mpi_executable [ program input_parameters] 대신에 commands_file을 읽어 들여 poe 명령을 수행하게 됨. 일반적으로 각 task마다 실행파일이 다른 mpmd 모델을 수행할 때 주로 사용. poe command에 대한 자세한 설명 및 그 밖의 옵션에 대해서는 다음 사이트에 자세히 설 명되어 있다. http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/topic/com.ibm.cluster.pe431.opuse 1.doc/am102_poemanpage.html 2 MPI 환경변수를 이용한 MPI 코드 수행 방법 $ export MP_SHARED_MEMORY=yes # 동일 노드에서의 통신시 Shared Mem 프로토콜을 사용 $ export MP_HOSTFILE=./host.list # host.list 파일 지정 $ export MP_PROCS=np # MPI task(process) 수를 지정 $ poe mpi_executable # poe와 함께 mpi 실행파일 실행 위와 같이 MPI 관련 환경변수를 지정한 후 poe와 함께 MPI 실행파일을 실행시켜 MPI 프로 그램을 수행할 수 있다. MPI 환경변수를 이용하여 MPI 코드를 수행 시 위의 환경변수 외에 다양한 환경변수들을 추가하여 수행시킬 수 있다. 위에서 설명된 poe 옵션들은 다음과 같이 MPI 환경변수와 서로 동일한 의미를 포함하고 있 다. -shared_memory -hostfile -procs -single_thread -infolevel -labelio -stdoutmode -pgmmodel -cmdfile poe 옵션 mpi 환경변수 MP_SHARED_MEMORY MP_HOSTFILE MP_PROCS MP_SINGLE_THREAD MP_INFOLEVEL MP_LABELIO MP_STDOUTMODE MP_PGMMODEL MP_CMDFILE - 15 -
- MPI 코드의 수행 예 1 poe command를 통한 MPI 코드 수행 $ poe mpi.f.exe -shared_memory yes -hostfile./host.list -procs 4 $ poe mpi.c.exe -shared_memory yes -hostfile./host.list -procs 6 -single_thread yes $ poe mpi.c.exe -shared_memory yes -hostfile./host.list -procs 8 -labelio yes 2 MPI 환경변수를 이용한 MPI 코드 수행 $ export MP_SHARED_MEMORY=yes $ export MP_HOSTFILE=./host.list $ export MP_PROCS=4 $ poe mpi.f.exe $ export MP_SHARED_MEMORY=yes $ export MP_HOSTFILE=./host.list $ export MP_PROCS=6 $ export MP_SINGLE_THREAD=yes $ poe mpi.c.exe $ export MP_SHARED_MEMORY=yes $ export MP_HOSTFILE=./host.list $ export MP_PROCS=8 $ export MP_LABELIO=yes $ poe mpi.c.exe [주의] - 위와 같은 interactive 작업 수행은 로그인 노드에서만 허용하고 있으며, 계산노드에서는 불가능하다. - 로그인 노드에서의 interactive 작업은 CPU time 기준으로 최대 10분으로 제한하고 있으며, 간단한 테스트 및 디버깅 목적으로 사용할 수 있다. - 10분 이상의 실제 작업 수행은 Loadleveler를 통해서만 가능하며, job command file을 작성하여 제출해야 한다. 마. 수학 라이브러리 사용법 - ESSL ESSL 루틴을 포함한 프로그램의 컴파일은 다음과 같이 할 수 있으며 사용자는 필요한 옵션 을 더 추가해 사용하면 된다. < Serial 코드 > $ xlf -O3 -qarch=pwr6 -qtune=pwr6 -lessl essl_exam.f < SMP 코드 > $ xlf_r -qsmp=omp -O3 -qarch=pwr6 -qtune=pwr6 -lesslsmp essl_exam.f - PESSL PESSL 루틴을 포함한 프로그램의 컴파일은 다음과 같이 할 수 있으며 사용자는 필요한 옵 션을 더 추가해 사용하면 된다. - 16 -
< mpi 코드 > $ mpxlf -O3 -qarch=pwr6 -qtune=pwr6 -lessl -lpessl -lblacs essl_exam.f < mpi+openmp 코드 > $ mpxlf_r -qsmp=omp -O3 -qarch=pwr6 -qtune=pwr6 -lesslsmp -lpesslsmp -lblacssmp essl_exam.f 바. 소프트웨어 설치 현황 시스템 소프트웨어 프로그래밍 도구 구 분 항 목 운영체제 AIX 6.1 시스템 구성 및 관리프로그램 Cluster System Management 1.6 작업관리 LoadLeveler 3.4 병렬 파일 시스템 GPFS 3.2 HPM toolkit PE benchmarker prof 성능 분석 도구 gprof xprofiler tprof dbx 디버거 xldb pdbx Message passing Library PE(Parallel Environment) 5.1 OpenMP XLC/C++, XLF 컴파일러에 기본 포함 병렬지원도구 PE(Parellel Environment) 5.1 MASS ESSL 4.4 PESSL 3.3 blas 수학 Library lapack blacs scalapack fftws VACPP 10.1 컴파일러 XLF 12.1 Abaqus 6.7.6 ~ 6.10-3 NASTRAN R3, R3.1, 20101 상용 애플리케이션 LS-Dyna 9.71_R421 ~ R51 Fluent V6.3, V120, V130 gcc 공개 S/W python perl - 상용 애플리케이션 및 기타 애플리케이션 설치 위치 Abaqus : /applic/applications/abaqus NASTRAN : /applic/applications/nastran/r3.1 LS-Dyna : /applic/applications/lsdyna Fluent : /applic/applications/fluent ANSYS : /applic/applications/ansys AMBER : /applic/applications/amber STARCD : /applic/applications/starcd/star - 17 -
CFX : /applic/applications/cfx CHARMM : /applic/applications/charmm/c35b1r1-qc Gaussian 03 : /applic/applications/g03 Gaussian 09 : /applic/applications/g09 Gaussview : /applic/applications/g03/gaussview, /applic/applications/g09/gv Sysnoise : /applic/applications/sysnoise/5.6 각각의 상용 Application 에 대한 정보 및 Application 지침서는 슈퍼컴퓨팅본부 홈페이 지를 참고하면 된다. http://www.ksc.re.kr/new2009/02resource/02_resource.php 주요 애플리케이션에 대해 LoadLeveler Job Command File 예제들이 /applic/applications/ll_samples/애플리케이션명/ 디렉토리 밑에 저장되어 있으니 이를 참고하여 LoadLeveler로 작업을 수행할 수 있다. [/applic/applications/ll_samples] $ ls ABAQUS/ CFX/ FLUENT/ G03/ G09/ LSDYNA/ NASTRAN/ SYSNOISE/ - Public Domain 애플리케이션 및 라이브러리 설치 위치 대표적인 public domain 애플리케이션 및 라이브러리들이 다음 위치에 설치되어 있으니, 필요한 경우 사용자 홈디렉토리에 설치하기 보다는 이를 그대로 사용하면 된다. 32bit : /applic/local/32bit [/applic/local/32bit] $ ls BISON/ G2LIB/ HDF/ LAPACK/ NAMD/ OOMMF/ VMD/ BLACS/ GHOSTSCRIPT/ IMAGEMAGICK/ LIBDAP/ NCARG/ R/ W3LIB/ CNVGRIB/ GNUMAKE/ JASPER/ LIBICONV/ NCO/ SCALAPACK/ WGRIB2/ FFTW/ GRADS/ JPEG/ LIBPNG/ NCVIEW/ SZIP/ G2CLIB/ GROMACS/ LAMMPS/ M4/ NETCDF/ UDUNITS/ 64bit : /applic/local/64bit [/applic/local/64bit] $ ls NTLR/ G2CLIB/ IMAGEMAGICK/ LIBICONV/ NCO/ UDUNITS/ BISON/ G2LIB/ JASPER/ LIBPNG/ NETCDF/ VMD/ BLACS/ GRADS/ JPEG/ M4/ R/ W3LIB/ CNVGRIB/ GROMACS/ LAMMPS/ MPITRACE/ SCALAPACK/ WGRIB2/ FFTW/ HDF/ LAPACK/ NCARG/ SZIP/ 32bit 및 64bit : /applic/local/bin, /applic/local/lib public domain 애플리케이션 및 라이브러리는 기본적으로 /applic/local/32bit 및 /applic/local/64bit 디렉토리에 설치가 되어 있으며, 32bit와 64bit를 모두 포함하는 몇몇 라이브러리에 대해서는 /applic/local/lib 디렉토리 밑에 설치가 되어 있다. - 18 -
4. 작업 실행 준비 [주의] - 작업 실행은 Loadleveler를 통해서만 실행 할 수 있으며 poe를 통한 인터렉티브 작업 수행은 허용하지 않음 가. 슈퍼컴 4호기 큐 정책 CPU를 많이 사용하는 병렬 작업에 유리하도록 QCF(Queue Charging factor)를 가변적으로 할당 1 CPU 작업과 같은 시리얼 작업은 억제 병렬 작업 oriented한 작업 환경을 위해 wall_clock_time을 48시간 - wall_clock_time을 최대 72시간으로 조정하여 작업 싸이클을 높임으로써 시스템 가용성을 높이고 대형 병렬 작업에 대한 자원 확보를 용의하게 함. 즉 최대 48시간 내에 작업이 모두 종료되므로 대규모 자원 요청 시 보다 빨리 자원 확보가 가능. - 64 CPU 이상의 작업에는 좀 더 혜택을 주도록 함. - 작업 클래스 일반사용자가 사용할 수 있는 class는 사용하는 CPU 수에 따라 class.1-2, class.2-32, class.32plus로 나눔 클래스 구성 Class 명 한작업당 가용 CPU 수 class.1-2 1 ~ 2 class.2-32 2 ~ 32 class.32plus 32 ~ 704 # nodes 1 (gaia11~12) 10 (gaia12, gaia19, gaia20, gaia29, gaia30) 11 (gaia22 ~ gaia25, gaia27, gaia28, gaia31, gaia32, gaia34) 할당 CPU수 Wall_clock_limit 64 72hours 640 72hours 704 72hours 위 class 별 node 와 core 수는 작업 상태에 따라 변경 될 수 있음. 클래스별 용도 - 19 -
class 명 class.1-2 class.2-32 class.32plus 용 도 - 일반 시리얼 작업 - 2개 이하의 CPU를 사용하는 병렬 작업(OpenMP or MPI) - 해당 작업이 gaia11,12 노드에서 수행되며, 전체 가용 CPU수는 128개임 - 노드당 최대 가용 메모리 : 220GB - 2~32개의 CPU를 사용하는 병렬 작업(OpenMP or MPI) - 해당 작업이 gaia11 ~ gaia20, gaia31 노드에서 수행되며, 전체 가용 CPU수는 640개임 - 노드당 최대 가용 메모리 gaia11 ~ gaia20 : 220GB gaia31 : 470GB - 32개 이상의 CPU를 사용하는 병렬 작업(OpenMP or MPI) - 해당 작업이 gaia22 ~ gaia29, gaia32 ~ gaia34 노드에서 수행되며, 전체 가용 CPU수는 704개임 - 노드당 최대 가용 메모리 gaia22 ~ gaia28 : 220GB gaia29, gaia32 : 470GB gaia33, gaia34 : 930GB 사용자별 작업 제한 서비스 Stanza type limit 비고 maxqueued user 10 사용자당 동시 수행(R) 및 대기(I) 가능한 작업 수 나. 작업 class 확인 - Job command file의 변수 값을 얻기 위한 클래스별 상태 조회 class 확인 및 class별 최대 task 수 및 가용 task 수 알아보기 $ llclass Name에 해당하는 항목이 현재 LoadLeveler cluster에서 설정된 class 명이 된다. 각 class 명에 대해 Max Slots에 해당하는 수가 최대 task 수를 의미하고, Free Slots에 해당하는 수 가 현재 가용한 task수를 의미한다. 클래스별 상세 정보 $ llclass -l class명 클래스별 wall_clock_limit 알아보기 $ llclass -l class명 grep Wall [주의] - 각 class의 최대 wall_clock_time : 72:00:00 (3일, 3+00:00:00으로 표시됨) 다. Job Command File 주요 키워드 - 20 -
Job command file 내에서 적절한 키워드를 사용하여 원하는 작업을 위한 자원 할당 방법 을 명시해야 한다. 주요 키워드는 아래와 같으며, 사용자는 이들 중에서 몇 가지만 사용하 여 Job command file을 작성할 수 있다. - job_type 작업의 유형을 지정하며, serial, parallel이 가능하다. 명시하지 않으면 serial로 간주된 다. OpenMP 작업의 경우 process(pid)가 하나인 multithread 작업이기 때문에 원칙적으 로는 serial로 설정해야 하지만 parallel로 설정해서 수행할 수도 있다. - job_name 작업의 이름을 지정하며, 명시하지 않으면 LoadLeveler가 임의로 부여한다. - step_name 작업 파일 내에서 Job Step 이름을 지정하며, 명시하지 않으면 LoadLeveler가 0, 1, 2,...와 같이 Job Command File내의 순서대로 부여한다. - class 작업 수행을 위한 LoadLeveler class를 지정한다. class명은 llclass command로 확인이 가능하며 일반 사용자의 경우 현재 large 및 long class를 목적에 맞게 적용할 수 있다. - input Standard input을 지정한다. - output Standard output을 지정한다. - error Standard error를 지정한다. - initialdir 초기 작업 디렉토리를 지정한다. - wall_clock_limit 예상되는 작업 소요 시간을 의미하며, 실제 예상되는 작업 소요 시간보다 약간 더 길게 - 21 -
설정해 주는 것이 안전하다. 만약 해당 작업이 설정해 둔 wall_clock_limit 시간 내에 종 료되지 않을 경우 wall_clock_limit 시간을 초과하는 시점에 LoadLeveler가 해당 작업을 강제로 종료시키게 된다. 이 키워드는 Job command file에서 반드시 지정되어야 하며, 초단위 또는 시:분:초 형식으로 지정할 수 있다. 사용자가 class의 wall_clock_limit 보다 크게 지정할 경우, class의 wall_clock_limit이 적용된다. - notification 알림 메일을 보낼 조건을 지정. always, error, start, never, complete가 가능하며 일반 적으로 아래와 같이 complete를 많이 사용한다. 예 1) #@ notification = complete 지정하지 않으면 complete로 간주된다. - notify_user 알림 메일을 보낼 이메일 주소를 입력. 지정하지 않을 경우, 작업 제출 노드의 작업 제 출자 주소로 메일이 보내진다. 사용자의 메일 주소를 입력하게 되면, 직접 시스템에 접 속하지 않더라도 사용자의 이메일을 통해 작업의 종료 여부 혹은 수행 상태를 확인할 수 있다. 예 1) #@ notify_user = my_id@kisti.re.kr - resources Consumable resource 종류 및 요구량을 지정하는 키워드로 KISTI IBM 4호기 시스템에 서는 반드시 지정해야만 작업이 정상적으로 수행될 수 있다. 예) #@ resources = ConsumableCpus(4) ConsumableMemory(4gb) 위의 예는 태스크당 16개의 쓰레드 및 4GB의 메모리를 요청하는 것이다. 즉 OpenMP 작업인 경우에는 실제로 사용할 전체 쓰레드(CPU) 개수를 뜻하며, Hybrid(MPI+OpenMP) 작업인 경우에는 각 태스크당 쓰레드 개수이기 때문에 전체 CPU 수는 태스크 수 x 쓰레드 수가 된다. 특히, OpenMP 혹은 Hybrid(OpenMP+MPI) 작업인 경우에는 OMP_NUM_THREADS 또는 XLSMPOPTS=parthds 환경 변수의 값과 ConsumableCpus 값이 같도록 설정해야 하며, 만약 이것이 다르거나 OMP_NUM_THREADS 또는 XLSMPOPTS=parthds 환경 변수가 지정되어 있지 않으면, 다음과 같은 메시지를 뿌리면서 작업이 제출되지 않게 된다. - 22 -
[Your job was exited!!] ================================================================== You have to reset OMP_NUM_THREADS or ConsumableCpus The value of OMP_NUM_THREADS should be same with the value of ConsumableCpus ex) export OMP_NUM_THREADS=XX in ksh or bash setenv OMP_NUM_THREADS XX in csh ================================================================== llsubmit: 2512-052 Submit Filter /LoadL/submit_filter.sh: rc = 1. llsubmit: 2512-056 Unable to process the job command file "my_job_command_file.cmd". llsubmit: 2512-051 This job has not been submitted to LoadLeveler. serial 혹은 순수 MPI 프로그램인 경우에는 ConsumableCpus(1)을 지정하면 되며, 이와 같은 Consumable reosurce의 구성 정보는 llstatus -R' 명령으로 확인할 수 있다. - requirements 할당될 노드가 만족해야할 필수 요구 조건들을 지정한다. 아래의 예는 반드시 gaia34 노 드에서, 혹은 gaia29나 gaia30 노드에서 수행해야함을 지정한 것이다. 예 1) #@ requirements = (Machine == "gaia34") or #@ requirements = (Machine == {"gaia29" "gaia30"}) - node_usage 해당 Job Step이 수행될 때, 같은 노드에서 다른 Job의 수행을 허용할 것인지 지정하는 키워드로 shared와 not_shared가 가능하다. 기본값은 shared이며, 특별한 경우가 아니 라면 shared를 그대로 사용한다. [MPI병렬 프로그램에서 사용되는 키워드] 다음은 MPI 병렬 프로그램을 수행하는데 필요한 키워드들에 대한 설명이다. - node Job Step을 위해 할당할 노드 수를 지정하며, 각 Job Step 마다 지정해 주어야 한다. 노드 수를 하나의 숫자로 지정하거나 범위로 지정할 수 있다. 지정하지 않으면 1로 간주 되며 일반적으로 tasks_per_node 키워드와 같이 많이 사용된다. 예 1) # @ node = 2 # @ tasks_per_node = 16 - blocking 일정한 개수씩 태스크를 분배하는 노드 할당 방법으로, 한번에 분배할 태스크의 개수를 나타낸다. 카드놀이에서 패를 돌리는 카드의 장수와 같은 개념이며, 값은 양의 정수 또 - 23 -
는 unlimited가 가능하다. unlimited인 경우는 한 노드를 가득 채우고 나서 다음 노드를 가득 채워나가는 방식으로 태스크를 분배한다. 일반적으로 total_tasks 키워드와 같이 많 이 사용된다. 예 1) # @ blocking = unlimited # @ total_tasks = 32 예 2) # @ blocking = 4 # @ total_tasks = 32 - tasks_per_node 노드당 태스크 수를 지정하는 것으로 일반적으로 node 키워드와 같이 조합되어 많이 사 용된다. - total_tasks 수행할 전체의 태스크 수를 지정하는 것으로 일반적으로 blocking=unlimited 키워드와 같이 조합되어 많이 사용된다. 참고로 node 키워드와 tasks_per_node 키워드를 사용할 경우 total_tasks 키워드와 blocking=unlimited 키워 드를 사용하는 것보다 Queue에서의 waiting time이 더 길어질 수 있다. 이는 node 키워드와 tasks_per_node 키워드를 사용할 경우 노드당 tasks_per_node 키워드에 정의된 CPU 만큰 확보가 되어야만 작업이 수행될 수 있지만, total_tasks 키워드와 blocking=unlimited 키워드를 사용할 경우 현재 남아 있는 모든 CPU에 작업을 할당할 수 있기 때문에 상대적으로 좀 더 빨리 작업이 idle 상태 에서 Run 상태로 dispatch 될 수 있다. 단 total_tasks 키워드와 blocking=unlimite 키워드를 사용할 경우 남 아 있는 CPU에 따라 매번 수행되는 노드 수 및 각 노드마다의 CPU수가 달라질 수 있기 때문에 해당 작업 의 elapsed time이 매번 서로 다를 수 있다. 즉 예를 들어 8개 task의 작업이 수행된다고 할 때 어떤 경우 에는 한 노드 내에서 수행될 수도 있고 어떤 경우에서는 8개 노드에 걸쳐서 작업이 수행될 수 있기 때문에 서로 network communication 속도의 차이로 인해 elapsed time이 다를 수 있다. - host_file 최근 버전의 LoadLeveler에서 추가된 키워드로 Interactive로 수행하는 것과 같이 LoadLeveler가 host.list 파일을 읽어와 해당 노드에서 작업이 수행될 수 있도록 하는 키 워드이다. 예 1) # @ host_file = /home01/myid/host.list - network 통신 프로토콜, 네트웍 어댑터, 통신 특성 등을 지정하며 각 Job Step마다 명시해야 한 다. 지정 형식은 아래와 같다. #@ network.protocol = network_type [, [usage] [, mode [, comm_level] ] ] 예 1) #@ network.mpi = sn_all.shared,us - 24 -
-> 현재 IBM 4호기 2차 시스템의 경우 기본적으로 위와 같이 사용 라. Job command file 작성 - LoadLeveler에서 배치 작업을 수행하기 위해서는 위에서 설명된 LoadLeveler 키워드들을 사용하여 Job Command File을 작성해야 한다. 예제 파일은 /LoadL/ll_samples 디렉터리 에 코드 종류에 따라 정리되어 있으니, 이를 참조하면 된다. [주의] Job Command File 작성 시 다음 사항에 유의하자 - 반드시 ConsumableCpus, ConsumableMemory 및 wall_clock_limit을 지정해야함. - MPI 작업 수행시 MPI 통신 네트워크 옵션: Network.MPI=sn_all,shared,US - resources 키워드에 정의되는 ConsumableCpus는 한 task당 사용되는 thread수를 의미하고, ConsumableMemory는 한 task당 필요로 하는 Memory요구량을 의미 - Serial 및 순수 MPI 코드에서는 ConsumableCpus를 1로 설정해야 하고, OpenMP, Hybrid(MPI+OpenMP) 코드에서는 ConsumableCpus를 사용하는 thread 개수만큼 설정해 주면 됨 - MPI 코드에서 ConsumableMemory는 하나의 MPI task당 필요로 하는 Memory 요구량을 의미하고, OpenMP 코드에서 ConsumableMemory는 전체 thread가 필요로 하는 Memory 요구량을 의미 (1) Serial 프로그램 : /LoadL/ll_samples/ll_serial.cmd #!/bin/ksh #@ job_type = serial #@ class = class.1-2 #@ error = serial.err #@ output = serial.out #@ notification = complete #@ notify_user = my_email_address(ex. aaa@bbb.co.kr) #@ resources = ConsumableCpus(1) ConsumableMemory(1500mb) #@ wall_clock_limit=01:00:00 #@ queue export MEMORY_AFFINITY=MCM./my_serial_executable job_type은 serial을 선택하고, class는 serial 작업을 수행할 수 있는 class.1-2를 입력한다. 작업이 수행되는 동안 standard error 메시지는 #@ error = serial.err에 있는 것처럼 serial.err 파일에 기록이 되고, standard output 메시지는 #@ output = serial.out에 있는 것처럼 serial.out 파일에 기록이 된다. (2) OpenMP 프로그램 : /LoadL/ll_samples/ll_openmp.cmd - 25 -
#!/bin/ksh #@ job_type = parallel #@ class = class.2-32 #@ error = openmp.err #@ output = openmp.out #@ notification = complete #@ notify_user = my_email_address(ex. aaa@bbb.co.kr) #@ resources = ConsumableCpus(8) ConsumableMemory(1500mb) #@ wall_clock_limit=01:00:00 #@ queue export OMP_NUM_THREADS=8 #export MEMORY_AFFINITY=MCM./my_openmp_executable OpenMP job command file에서는 ConsumableCpus(8)과 OMP_NUM_THREADS=8이 서로 일치해야 한다. OpenMP 쓰레드 개수는 위의 예에서처럼 OpenMP runtime 변수인 OMP_NUM_THREADS로 지정하거나 IBM XL runtime 변수인 XLSMPOPTS="parthds="로 지 정해 준다. 추가적으로 XLSMPOPTS 환경변수에서 'yields=0:spins=0'은 쓰레드 수행 시 busy wait 상태를 유지하여 쓰레드가 sleep 상태로 빠지지 않게 하여 수행 성능은 좋아지 지만 그만큼 전체 CPU 사용 시간은 증가한다. 프로그램 성능과 시스템 사용료 산정 기준을 고려하여 이 옵션을 적절히 사용할 수 있다. Memory affinity 관련 환경변수인 MEMORY_AFFINITY=MCM 은 작업 상황에 따라 적절하게 사용할 수 있다. (3) MPI 프로그램 : /LoadL/ll_samples/ll_mpi.cmd - 26 -
#!/bin/ksh #@ job_type = parallel #@ class = class.2-32 #@ error = mpi.err #@ output = mpi.out #@ notification = complete #@ notify_user = my_email_address(ex. aaa@bbb.co.kr) #@ network.mpi = sn_all,shared,us #@ rset = RSET_MCM_AFFINITY #@ mcm_affinity_options = mcm_mem_req mcm_distribute mcm_sni_none #@ resources = ConsumableCpus(1) ConsumableMemory(1500mb) #@ wall_clock_limit=01:00:00 #@ total_tasks = 16 #@ blocking = unlimited #@ queue export LANG=en_US export MP_SHARED_MEMORY=yes export MP_SINGLE_THREAD=yes export MEMORY_AFFINITY=MCM poe./my_mpi_executable ########################################################### ### KEYWORD for MPI TASKS ##@ node = 1 ##@ tasks_per_node = 16 ##@ host_file =./host.list ########################################################### MPI 작업을 위한 job command file에서는 job_type=parallel로 지정하였고, network.mpi 키워드와 total_tasks, blocking과 같은 노드 할당 키워드를 지정하였다. network.mpi에서 network type은 위에서 설명된 것처럼 기본적으로 KISTI IBM 4호기 2차시스템의 경우 sn_all로 설정하면 되고, shared 와 US 프로토콜을 같이 지정해 주면 된다. rset 및 mcm_affinity_option은 LoadLeveler의 resource set을 사용하여 task affinity, memory affinity, sni affinity 기능을 사용하고자 하는 것인데, 기본적으로 위의 job command file 예제에서 설정된 것처럼 #@ rset = RSET_MCM_AFFINITY 및 #@ mcm_affinity_options = mcm_mem_req mcm_distribute mcm_sni_none 옵션을 그대로 사용하는 것을 권장한다. (4) Hybrid(OpenMP+MPI) 프로그램 : /LoadL/ll_samples/ll_hybrid.cmd - 27 -
#!/bin/ksh #@ job_type = parallel #@ class = class.32plus #@ error = hybrid.err #@ output = hybrid.out #@ notification = complete #@ notify_user = my_email_address(ex. aaa@bbb.co.kr) #@ network.mpi = sn_all,shared,us #@ resources = ConsumableCpus(4) ConsumableMemory(1500mb) #@ wall_clock_limit=01:00:00 #@ total_tasks = 16 #@ blocking = unlimited #@ queue export LANG=en_US export MP_SHARED_MEMORY=yes export OMP_NUM_THREADS=4 #export MEMORY_AFFINITY=MCM poe./my_hybrid_executable ########################################################### ### KEYWORD for MPI TASKS ##@ node = 2 ##@ tasks_per_node = 8 ##@ host_file =./host.list ########################################################### ConsumableCpus(4), OMP_NUM_THREADS=4이므로 각각의 MPI 태스크는 4개의 쓰레드로 수행하겠다는 의미이며, total_tasks = 16이므로 전체적으로 64개의 쓰레드가 필요하게 된 다. Hybrid(OpenMP+MPI) 프로그램에서는 OpenMP가 사용되기 때문에 MPI 작업에서 사용 되는 resource set 관련 키워드를 사용하지 않는다. 또한 Memory affinity 관련 환경변수인 MEMORY_AFFINITY=MCM 은 작업 상황에 따라 적절하게 사용할 수 있다. 5. Loadleveler를 통한 작업 실행 위에서 설명된 것과 같이 LoadLeveler job command file이 작성되면 다음과 같은 LoadLeveler command를 이용하여 작업을 수행할 수 있다. 가. 작업 submit $ llsubmit job_command_file.cmd 작성된 job command file을 이용하여 작업을 제출 나. 작업 상태 조회 $ llq $ llqu 현재 queue에 있는 작업의 상태를 조회해 볼 수 있다. - 28 -
예 1) $ llq Id Owner Submitted ST PRI Class Running on ------------------------ ---------- ----------- -- --- ------------ ----------- gaia34.46765.16 msyeom 5/26 01:34 R 50 class.32plus gaia31 gaia34.60036.0 r632cdi 6/23 17:50 R 50 class.32plus gaia27 gaia34.60493.0 g050hsy 6/24 17:42 R 50 class.1-2 gaia11 gaia16.61426.0 r648jsj 6/24 20:27 R 50 class.32plus gaia28 gaia34.60591.0 k275huh 6/24 22:37 R 50 class.2-32 gaia12 gaia16.61511.0 k275huh 6/24 22:37 R 50 class.2-32 gaia30 gaia22.73279.0 k275huh 6/24 22:38 R 50 class.2-32 gaia12 gaia28.73261.0 k275huh 6/24 22:38 R 50 class.2-32 gaia12 gaia34.60592.0 k275huh 6/24 22:54 R 50 class.2-32 gaia30 gaia22.73363.0 e202kky 6/25 08:00 R 50 class.32plus gaia34 gaia28.73390.0 r622khw 6/25 09:01 R 50 class.2-32 gaia29 gaia34.60763.0 q164noh 6/25 11:28 R 50 class.2-32 gaia30 gaia34.60784.0 q316kml 6/25 13:39 R 50 class.2-32 gaia20 gaia16.61710.0 q316kml 6/25 14:30 R 50 class.2-32 gaia12 gaia22.73521.0 q386kjm 6/25 14:41 R 50 class.2-32 gaia30 gaia16.61759.0 r106kaf 6/25 15:24 R 50 rokaf2 gaia21 gaia22.73527.0 g050hsy 6/25 15:33 R 50 class.1-2 gaia11 gaia28.73509.0 g050hsy 6/25 15:33 R 50 class.32plus gaia25 gaia28.73220.0 x347bjj 6/24 21:17 R 50 class.2-32 gaia19 gaia16.61555.0 msyeom 6/25 04:08 R 50 class.1-2 gaia11 gaia22.73461.0 x347bjj 6/25 12:35 R 50 class.32plus gaia22 gaia34.46765.27 msyeom 5/26 01:34 NQ 50 class.32plus gaia34.46765.17 msyeom 5/26 01:34 NQ 50 class.32plus gaia34.46765.18 msyeom 5/26 01:34 NQ 50 class.32plus ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34 job step(s) in queue, 0 waiting, 0 pending, 21 running, 13 held, 0 preempted 해당 작업에 대한 보다 자세한 정보는 다음과 같이 llq command에 -ls옵션을 사용하여 확 인해 볼 수 있다. $ llq -sl Job_ID 다. 노드별 가용 CPU 알아보기 $ llstatus -R 라. 클래스별 상태 조회 - 클래스별 최대 task 수 및 가용 task 수 알아보기 $ llclass - 29 -
- 글래스별 상세 정보 $ llclass -l 클래스명 - 클래스별 wall_clock_limit 알아보기 $ llclass -l class_name grep Wall 마. 작업 취소 $ llcancel Job_ID 6. 지원 가. 사용자 지원 인력 사용 중 문제가 생기거나 의문사항이 있으시면 아래 연락처로 연락 해 주십시오. 이영주 책임 (KISTI, 슈퍼컴퓨팅센터), 042)869-0538, yjlee@kisti.re.kr 임경빈 차장 (IBM지원팀, 시스템엔지니어), 042)869-0621, kbim@kisti.re.kr 이상경 과장 (IBM지웜팀, 병렬화/최적화 엔지니어), 042)869-0618, popup@kisti.re.kr 나. 홈 페이지 기타 자세한 사항은 아래 홈페이지를 참조 하십시오 http://www.ksc.re.kr http://helpdesk.ksc.re.kr - 30 -