최신환경에서의 HPC 구축 방법 및 BMT 방법

####   New Version MPI 환경 구성

작성일 : 2008년 2월 21일

작성자 : 서진우

  1. intel v10 compiler + mkl v10 환경 구축 하기
  • Intel CC, FC는 기존 설치 방법과 동일 함.
  • Intel MKL 설치 하기.

설치 방법은 동일. 추가 환경 설정 방법은 다음과 같다.

cd /engrid/enhpc/intel/mkl/tools/environment/

cp mklvarsem64t.* /etc/profile.d/

/engrid/enhpc/intel/mkl/benchmarks 에 Intel에 최적화된 HPL 등이 존재 한다.

이걸 이용하면 쉽게 HPL 테스트를 할 수 있다.

  1. mpich2 + intel 환경 구축 하기

export FC=ifort

export F77=ifort

export F90=ifort

export CC=icc

export CXX=icpc

export RSHCOMMAND=/usr/bin/rsh

./configure –prefix=/engrid/enhpc/mpich2/intel –enable-timing=runtime –enable-f77 –enable-f90 –enable-cxx –enable-romio –enable-threads=multiple –enable-mpe –with-thread-package=pthreads

make && make install

cd ~

vi .mpd.conf


MPD_SECRETWORD=password


chmod 600 .mpd.conf

ensync .mpd.conf

vi /etc/mpd.hosts


node00:8

node01:4

node02:4

node03:4

node04:4


mpdboot -r /usr/bin/rsh -n 5 –ncpus=8 -f /etc/mpd.hosts

-r : 통신프로토콜명령

-n : 노드수

–ncpus : Master 서버  Core 수

-f : 노드와 core 리스트 파일

;; –ncpus 와 -f 사용 시 -f 로 불려오는 노드와 core 리스트 파일에 등록된 정보를 기본으로 클러스터 작업 노드 구성을

하게 되는데 mpdboot를 실행하는 노드의 코어 수가 다를 경우 –ncpus를 이용하여 별도로 코어수를 다르게 지정할 수 있다.

즉 node00의 core수가 8이고 나머지는 4개일 경우 ..

node00에서 “mpdboot -r rsh -n 5 -f /etc/mpd.hosts” 라고 실행한 후 “mpiexec -n 20″을 실행하면 코어 배열이 모든 서버

가 동일하게 4개씩 활당이 된다. 하지만 “mpdboot -r rsh -n 5 -f /etc/mpd.hosts –ncpus=8” 이라고 실행한 후…

“mpiexec -n 20” 을 실행하면 node00 에서 core 8개가 활당되고, 나머지 노드에서는 core 3개씩 활당이 되어진다.

mpdtrace : mpdboot 로 구성된 클러스터 작업 구성을 보여 준다.

mpdrun -l -n 8 hostname : mpdboot 로 구성된 서버 프로세서에게 hostname 명령을 배열대로 실행 시킨다.

mpdallexit : mpdboot 로 구성된 클러스터 구성을 해제한다.

  1. mpich2 and mkl 제공 기본 BMT 사용하기
  • MKL 제공 HPL 사용하기

mkl v10 에서 제공하는 benchmark를 이용하여 쉽게 HPL을 실행할 수 있다.

cd /engrid/enhpc/intel/mkl/benchmarks/mp_linpack

vi Make.em64t


.

.

CC      = mpicc  # 해당 mpicc 경로를 적어 주면 된다.


make arch=em64t install

cd bin/em64t

vi HPL.dat -> 환경에 맞게 수정

mpiexec -n 10 ./xhpl

이 밖에 MKL에 기본적으로 컴파일이 되어 있는 xhpl 이 있다.

/engrid/enhpc/intel/mkl/benchmarks/mp_linpack/bin_intel 밑에 서버 아키텍처별로 디렉토리가 생성되어 있다.

이것을 이용해서 테스트 해도 된다. 성능은 직접 컴파일한 거 보다 좋게 나온다. ^^;;

  • MPICH2 제공 BMT 프로그램 사용하기

cd /engrid/enhpc/mpich2/intel/share/

밑에 다양한 BMT 툴이 있다 .해당 디렉토리에 가서 make 하고 mpiexec를 실행하면 된다.

  1. Netpipe 테스트 하기

tar xzvf NetPIPE.x.x.x.tar.gz

cd NetPIPE-x.x.x

vi makefile


CC         = cc

CFLAGS     = -O

SRC        = ./src

해당 MPICC 의 PATH 를 적어 넣는다

MPICC       = /engrid/enhpc/mpich2/intel/bin/mpicc

.

.

MPI2CC   = /engrid/enhpc/mpich2/intel/bin/mpicc

MPI2_LIB = /engrid/enhpc/mpich2/intel/lib

MPI2_INC = /engrid/enhpc/mpich2/intel/include

.


make tcp

make mpi

  • tcp 테스트

tcp bendwitch 테스트는 두대 서버간의 네트워크 패킷 크기별 전송 대역폭과 응답속도를 측정해 준다.

먼저 source 서버에서 NPtcp 데몬을 실행하고, 원격 서버에서 NPtcp -h hostname 으로 실행하면 된다.

local > ./NPtcp

remote > ./NPtcp -h local


Now starting the main loop

0:       1 bytes   1602 times –>      0.12 Mbps in      62.45 usec

1:       2 bytes   1601 times –>      0.24 Mbps in      62.45 usec

2:       3 bytes   1601 times –>      0.37 Mbps in      62.45 usec

3:       4 bytes   1067 times –>      0.28 Mbps in     110.50 usec

.

.

120: 6291459 bytes      3 times –>    895.89 Mbps in   53577.82 usec

121: 8388605 bytes      3 times –>    896.60 Mbps in   71380.81 usec

122: 8388608 bytes      3 times –>    896.65 Mbps in   71377.16 usec

123: 8388611 bytes      3 times –>    896.60 Mbps in   71380.85 usec


  • mpi 테스트

mpi 테스트는 mpi를 실행할 두대 서버간의 mpi 통신 시 네트워크 대역폭을 측정하는 것이다.

vi mpdhosts


node00

node01


mpdboot -n 2 -r rsh -f mpdhosts

mpiexec -n 2 ./NPmpi


0: node00

1: node01

Now starting the main loop

0:       1 bytes   1602 times –>      0.12 Mbps in      62.46 usec

1:       2 bytes   1600 times –>      0.24 Mbps in      62.46 usec

2:       3 bytes   1600 times –>      0.24 Mbps in      94.28 usec

3:       4 bytes    707 times –>      0.49 Mbps in      62.46 usec

.

.

118: 6291453 bytes      3 times –>    894.53 Mbps in   53659.32 usec

119: 6291456 bytes      3 times –>    891.74 Mbps in   53827.64 usec

120: 6291459 bytes      3 times –>    894.61 Mbps in   53654.99 usec

121: 8388605 bytes      3 times –>    894.83 Mbps in   71521.80 usec

122: 8388608 bytes      3 times –>    894.85 Mbps in   71520.01 usec

123: 8388611 bytes      3 times –>    894.82 Mbps in   71522.51 usec


  1. HPL 테스트 하기

v10대 Mkl 이용시 HPL makefile 정의 내용 중 변경 사항이 있다.

기존의 Make.MPI-INTEL 파일 내용을 아래와 같이 변경한다.


LAdir        = /engrid/enhpc/intel/mkl/lib/em64t

LAinc        =

LAlib        = $(LAdir)/libmkl_intel_lp64.a $(LAdir)/libmkl_intel_thread.a \

$(LAdir)/libmkl_core.a $(LAdir)/libguide.a -lpthread

.

CC           = $(MPP_HOME)/bin/mpicc

CCNOOPT      = $(HPL_DEFS) -O0 -w

CCFLAGS      = $(HPL_DEFS) -O3 -axP -w

.

LINKER       = $(MPP_HOME)/bin/mpicc

LINKFLAGS    = $(CCFLAGS) -static_mpi


make arch=MPI-INTEL install

mkl 에서 제공하는 HPL 과 비슷한 성능을 나타낸다.

  1. IMB 테스트 하기

IMB 는 Intel MPI Benchmark 툴로서 MPI 실행 시 프로세서의 네트워크 간의 통신 성능을 측정하는

BMT 툴이다.

cd IBM_3.1/src

vi make_mpich


MPI_HOME= /engrid/enhpc/mpich2/intel  <- MPI 환경에 맞게 수정

.

.


make -f make_mpich

그럼 IBM_MPI1 실행파일이 생성된다.

mpdboot -n 5 -r rsh -f ~mpd.hosts

mpiexec -n 10 ./IMB-MPI1 > ~/IMB_test_result.txt

cat ~/IMB_test_result.txt


#—————————————————

#    Intel (R) MPI Benchmark Suite V3.1, MPI-1 part

#—————————————————

Date                  : Fri Feb 22 02:18:29 2008

Machine               : x86_64

System                : Linux

Release               : 2.6.9-55.ELsmp

Version               : #1 SMP Fri Apr 20 16:36:54 EDT 2007

MPI Version           : 2.0

MPI Thread Environment: MPI_THREAD_MULTIPLE

Calling sequence was:

./IMB-MPI1

Minimum message length in bytes:   0

Maximum message length in bytes:   4194304

#

MPI_Datatype                   :   MPI_BYTE

MPI_Datatype for reductions    :   MPI_FLOAT

MPI_Op                         :   MPI_SUM

#

#

List of Benchmarks to run:

PingPong

PingPing

Sendrecv

Exchange

Allreduce

Reduce

Reduce_scatter

Allgather

Allgatherv

Gather

Gatherv

Scatter

Scatterv

Alltoall

Alltoallv

Bcast

Barrier

#—————————————————

Benchmarking PingPong

#processes = 2

( 8 additional processes waiting in MPI_Barrier)

#—————————————————

#bytes #repetitions      t[usec]   Mbytes/sec

.

4194304           10     35973.11       111.19

#—————————————————

Benchmarking PingPing

#processes = 2

( 8 additional processes waiting in MPI_Barrier)

#—————————————————

#bytes #repetitions      t[usec]   Mbytes/sec

.

4194304           10     42797.59        93.46

#—————————————————————————–

Benchmarking Sendrecv

#processes = 2

( 8 additional processes waiting in MPI_Barrier)

#—————————————————————————–

#bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]   Mbytes/sec

.

4194304           10     41784.69     41796.92     41790.81       191.40

#—————————————————————————–

Benchmarking Sendrecv

#processes = 4

( 6 additional processes waiting in MPI_Barrier)

#—————————————————————————–

#bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]   Mbytes/sec

.

4194304           10     37605.91     37795.21     37721.81       211.67

#—————————————————————————–

Benchmarking Sendrecv

#processes = 8

( 2 additional processes waiting in MPI_Barrier)

#—————————————————————————–

#bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]   Mbytes/sec

.

4194304           10     37590.60     37884.59     37688.60       211.17

#—————————————————————————–

Benchmarking Sendrecv

#processes = 10

#—————————————————————————–

#bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]   Mbytes/sec

.

4194304           10     37523.60     37732.20     37627.89       212.02

#—————————————————————————–

Benchmarking Exchange

#processes = 2

( 8 additional processes waiting in MPI_Barrier)

#—————————————————————————–

#bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]   Mbytes/sec

.

4194304           10     86003.80     86012.60     86008.20       186.02

.

.

#—————————————————

Benchmarking Barrier

#processes = 2

( 8 additional processes waiting in MPI_Barrier)

#—————————————————

#repetitions  t_min[usec]  t_max[usec]  t_avg[usec]

1000        62.45        62.45        62.45

#—————————————————

Benchmarking Barrier

#processes = 4

( 6 additional processes waiting in MPI_Barrier)

#—————————————————

#repetitions  t_min[usec]  t_max[usec]  t_avg[usec]

1000       166.50       166.62       166.57

#—————————————————

Benchmarking Barrier

#processes = 8

( 2 additional processes waiting in MPI_Barrier)

#—————————————————

#repetitions  t_min[usec]  t_max[usec]  t_avg[usec]

1000       285.03       285.04       285.04

#—————————————————

Benchmarking Barrier

#processes = 10

#—————————————————

#repetitions  t_min[usec]  t_max[usec]  t_avg[usec]

1000       436.79       437.18       437.00


  1. Stream 메모리 테스트

tar xzvf stream_memory.tgz

cd StreamMemory/Code/

gcc -O stream.c -o stream

./stream


This system uses 8 bytes per DOUBLE PRECISION word.


Array size = 2000000, Offset = 0

Total memory required = 45.8 MB.

Each test is run 10 times, but only

the best time for each is used.


Your clock granularity/precision appears to be 1 microseconds.

Each test below will take on the order of 7914 microseconds.

(= 7914 clock ticks)

Increase the size of the arrays if this shows that

you are not getting at least 20 clock ticks per test.


WARNING — The above is only a rough guideline.

For best results, please be sure you know the

precision of your system timer.


Function      Rate (MB/s)   Avg time     Min time     Max time

Copy:        2837.6441       0.0102       0.0113       0.0113

Scale:       2802.5668       0.0103       0.0114       0.0114

Add:         3150.0100       0.0137       0.0152       0.0153

Triad:       3127.2576       0.0138       0.0153       0.0154


Solution Validates


  • Intel 컴파일러로 최적화 컴파일 시 ..

icc -O3 stream.c -o stream

./stream


This system uses 8 bytes per DOUBLE PRECISION word.


Array size = 2000000, Offset = 0

Total memory required = 45.8 MB.

Each test is run 10 times, but only

the best time for each is used.


Your clock granularity/precision appears to be 1 microseconds.

Each test below will take on the order of 6740 microseconds.

(= 6740 clock ticks)

Increase the size of the arrays if this shows that

you are not getting at least 20 clock ticks per test.


WARNING — The above is only a rough guideline.

For best results, please be sure you know the

precision of your system timer.


Function      Rate (MB/s)   Avg time     Min time     Max time

Copy:        3935.5421       0.0073       0.0081       0.0082

Scale:       3874.9813       0.0074       0.0083       0.0083

Add:         4087.8496       0.0106       0.0117       0.0118

Triad:       4088.9289       0.0106       0.0117       0.0118


Solution Validates


최적화 환경에서 메모리 전송률의 차이가 1GB/s 정도 향상이 된다.

  1. NPB 테스트 하기

tar xzvf NPB3.2.tar.gz

cd NPB3.2/NPB3.2-MPI/

cd config/

cp make.def.template make.def

vi make.def


아래 항목을 환경에 맞게 수정함

.

MPIF77 = /engrid/enhpc/mpich2/intel/bin/mpif77

.

FMPI_LIB  = -L/engrid/enhpc/mpich2/intel/lib -lmpi

.

FMPI_INC = -I/engrid/enhpc/mpich2/intel/include

.

MPICC = /engrid/enhpc/mpich2/intel/bin/mpicc

.

CMPI_LIB  = -L/engrid/enhpc/mpich2/intel/lib -lmpi

.


이제 간단한 모델 하나를 컴파일 해 보자

cd ..

make LU NPROCS=2 CLASS=S

cd bin

ls

lu.S.4

정상적으로 컴파일을 했으면 위와 같이 lu.S.4 란 실행파일이 생성 되어 있을 것이다.

이제 필요한 실행 파일을 일괄적으로 컴파일 해 보자

NPB 의 주요 벤치마크 모델에 대한 설명이나 suite.def에 대한 설명은 이전에 배포한 이전 문서를

살펴 보면 된다.

vi config/make.suite


ft      S       8

mg      S       8

sp      S       4

lu      S       8

bt      S       4

is      S       8

ep      S       8

cg      S       8

dt      S       8


make suite

bin

ls

bt.S.4  cg.S.8  dt.S  ep.S.8  is.S.8  lu.S.4  lu.S.8  mg.S.8  sp.S.4

mpiexec -n 8 ./cg.S.8


NAS Parallel Benchmarks 3.2 — CG Benchmark

Size:       1400

Iterations:    15

Number of active processes:     8

Number of nonzeroes per row:        7

Eigenvalue shift: .100E+02

iteration           ||r||                 zeta

1       0.14007433599912E-12     9.9986441579140

2       0.22832842650801E-14     8.5733279203222

3       0.20667072504918E-14     8.5954510374058

4       0.20147744607421E-14     8.5969972340737

5       0.20860579382960E-14     8.5971549151767

6       0.19920782216430E-14     8.5971744311608

7       0.19617605550665E-14     8.5971770704913

8       0.20837892722887E-14     8.5971774440630

9       0.19379127563197E-14     8.5971774983942

10       0.19401001173125E-14     8.5971775064409

11       0.18760873052386E-14     8.5971775076486

12       0.18533243795008E-14     8.5971775078318

13       0.19294692914155E-14     8.5971775078598

14       0.18723926834078E-14     8.5971775078641

15       0.18265867152505E-14     8.5971775078648

Benchmark completed

VERIFICATION SUCCESSFUL

Zeta is      0.859717750786E+01

Error is     0.123972559909E-14

CG Benchmark Completed.

Class           =                        S

Size            =                     1400

Iterations      =                       15

Time in seconds =                     0.35

Total processes =                        8

Compiled procs  =                        8

Mop/s total     =                   192.35

Mop/s/process   =                    24.04

Operation type  =           floating point

Verification    =               SUCCESSFUL

Version         =                      3.2

Compile date    =              22 Feb 2008

Compile options:

MPIF77       = /engrid/enhpc/mpich2/intel/bin/mpif77

FLINK        = $(MPIF77)

FMPI_LIB     = -L/engrid/enhpc/mpich2/intel/lib -lmpi

FMPI_INC     = -I/engrid/enhpc/mpich2/intel/include

FFLAGS       = -O3

FLINKFLAGS   = -O3

RAND         = randi8

Please send the results of this run to:

NPB Development Team

Internet: npb@nas.nasa.gov

If email is not available, send this to:

MS T27A-1

NASA Ames Research Center

Moffett Field, CA  94035-1000

Fax: 650-604-3957


NPB 에 대한 부가 설명

NPB 는 모델 유형과 계산 크기, 사용되는 프로세스 수에 따라 실행 파일이 정해 짐. 아래는 모델에 대한 설명임

  • NPB 모델에 대한 설명

BT : Navier-Stokes 라는 물리학 방정식을 푸는 문제. 큰메세지를 조금씩 주고 받으므로 CPU 성능과 큰 크기에 대한

통신 성능을 알수 있음.

CG : 행렬 방정식의 고유해를 구하는 계산. 불규칙적인 큰 크기의 메세지를 조금씩 주고 받음. 큰 크기의 통신 성능을

측정할때 사용함.

EP : 노드마다 서로 상관없는 계산을 함. 서로 통신 하지 않으므로 CPU 성능을 측정할때만 사용함.

FT : FFT라는 방법으로 미분 방정식을 계산함. 계산량이 많기 때문에 큰 크기에서의 통신 성능과 CPU 성능 측정시 사용.

IS : 임의의 정수 수열을 크기대로 정렬하는 계산. 다른 계산은 주로 수소점 계산이지만 이것은 정수 계산만 함.

LU : BT 와 NS 방정식을 다른 방법을 푼다. 작은 크기의 메세지를 많이 주고 받아서 작은 크기의 문제를 테스트할때 사용.

MG : Poisson 방정식이라는 전자기학 방정식 해를 구함. 노드 사이에 배열을 수시로 주고 받음으로 작은 크기의 통신 성능

시험.

SP : BT 와 성격 비슷함.

  • 계산 크기 ..

위의 8가지 유형에 따라 계산 크기는 S, W, A, B, C, D 종류로 나누어짐. 크기는 순서대로 큰 Size의 문제라고 보면됨.

  • 프로세스의 수는 2의 승수로 정해짐 ( 1.2.4.8.16..)

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.