[Windows] [Intel] MPI 컴파일과 실행하기

병렬 계산에서 Message Passing Interface(MPI)는 분산형 컴퓨터에서 많이 쓰이는 툴이다. MPI에는 주로 MPICH와 OpenMPI가 많이 알려져 있는데, 슈퍼컴퓨터 상위 10대중 9대가 MPICH를 채택했다고 한다(2016년 기준). 또한 인텔과 MS의 MPI는 MPICH으로부터 발전된 형태여서, 업계에서는 OpenMPI보다 MPICH가 주로 쓰인다고 말할 수 있다. 이글에서는 인텔에서 쓰이는 MPICH 기준으로 병렬계산 컴파일 방법에 대해서 다루도록 하겠다. 이 글에서 테스트로 사용한 소스코드는 다음과 같다.

program hello_mpi
    use mpi
    implicit none
    integer :: ierr ! error signal variable. Standard Value = 0
    integer :: rank ! the process ID / Number
    integer :: nprocs ! number of processes
    ! Initialize MPI
    call MPI_INIT(ierr)
    ! Setup Communicator Size
    call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierr)
    !Setup Ranks/IDs for each process
    call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
    ! type the main code
    print *, "Hello world! I am process ", rank, "of ", nprocs, "Process(es)"
    ! Finilize MPI
    call MPI_FINALIZE(ierr)
end program hello_mpi

위 소스코드는 각각의의 프로세서로부터 ID / Number 를 받아와서 "Hello world! I am process #ID of #proc Process(es)" 라는 글을 프린팅 하는 코드이다. 이 소스코드를 컴파일하기 위해서 먼저 인텔 컴파일러 세팅을 한다. 환경변수를 설정하거나 인텔에서 제공해주는 커맨드 프롬프트를 실행하면 된다. 인텔 패러렐스튜디오가 설치된 경로에서는 "...\mpi\intel64\bin" 폴더로 가면 여러가지 배치파일들을 찾을 수 있다.


이 배치파일에서 "mpif90.bat", "mpiifort.bat", "mpiicc.bat" 등을 찾을 수 있는데, 이들은 mpi 가 실행될 수 있도록 컴파일 해주는 명령어 세트이다. 예를 들어, 다음과 같은 명령어를 이용하여서 mpi 컴파일하면 다음과 같다.
>>mpiifort hello_mpi.f90



위와 같은 명령어로 컴파일 하면 실행파일이 생성되는데, 이를 "mpiexec.exe"로 실행시켜 줄수있다. 마찬가지로 이 생행파일도 "...\mpi\intel64\bin" 폴더에서 찾아볼 수 있다. 기본적인 실행명령어는 다음과 같다. "-n" 옵션은 실행할 프로세서의 갯수를 나타낸다.
>>mpiexec -n 4 .\hello_mpi.exe

댓글

이 블로그의 인기 게시물

[Linux, AIX] 사용자 계정 생성 및 설정

[AIX] rpm 설치와 rpm 으로 패키지 설치 및 삭제

Ubuntu 에서 Fortran 시작하기