[클러스터] LamMPI 를 설치하여 병렬프로그램을 실행하자

1) MPI

   컴퓨터들간의 메시지를 편리하게 주고받기 위해 많은 병렬 라이브러리들이 등장하게 되었고,

  이중 MPI가 국제표준으로 자리잡게 되었다. MPI 자체는 병렬 라이브러리들에 대한 표준규약이

  다. 이들 MPI를 따르는 병렬 라이브러리로는 Ohio supercomputer center 에서 개발한 LamMPI

  와 Argonne National Laboratory 에서 개발한 MPICH가 널리 사용되고 있다.

2) LamMPI 설치

  LamMPI의 홈페이지는 http://www.lam-mpi.org/ 이다.

  http://www.lam-mpi.org/download/ 에서는 각 버전별 소스 및 rpm을 제공한다. 이곳에서 자신에

  게 맞는 적당한 소스를 받는다.

  

  압축을 풀고

  ./configure –prefix=/usr/local/lam-mpi

  make

  make install

  하면 /usr/local/lam-mpi 에 LamMPI가 설치된다.

  그리고 LamMPI는 root 로 실행하는 것을 권장하지 않으므로 모든 node 에 lam 계정을 만들고

  홈디렉토리는 /common 으로 하고, 모든 노드의 uid , gid 를 동일하게 한다. 즉 /etc/passwd,

  /etc/group 의 id 번호를 모든 노드가 동일하게 한다.

  아래는 관리노드에만 만들면 NFS 로 연결된 모든 노드가 동일시 된다.

  1) /common 에 .rhosts 를 만들고 안에 모든 노드명을 다 적어준다.

  2) /common 에 .bashrc 안에 다음을 추가한다.

     export PATH=/usr/local/lam-mpi/bin:$PATH

     export LAMHOME=/usr/local/lam-mpi

  3) /common 에서 cp .rhosts lamhosts 를 실행하여 lamhosts를 만든다.

  4) root 계정으로 chown -R lam:lam /common

  

  이제 설치는 끝났다. LamMPI 모듈을 띄워보자.

3. LamMPI 데몬을 띄우기

  lam 계정으로 관리노드에 로그인하여

[lam@smart /common]$ lamboot -v lamhosts

LAM 6.5.6/MPI 2 C++/ROMIO – University of Notre Dame

Executing hboot on n0 (node0 – 1 CPU)…

Executing hboot on n1 (node1 – 1 CPU)…

Executing hboot on n2 (node2 – 1 CPU)…

Executing hboot on n3 (node3 – 1 CPU)…

Executing hboot on n4 (node4 – 1 CPU)…

topology done      

[lam@smart /common]$    

   위와 같은 메시가 나오면 성공 !!!!

  (내가 만난 에러처리 방법으로 모든노드에 chmod 666 /dev/null 와 chmod 777 /tmp)

4. 프로그램 테스트

  병렬프로그램 컴파일

  http://www.alpha11.com/cluster/mpi/util/parall_add.c 을 /common 에 저장하고 다음과 같이

  실행하면 parall_add 실행파일이 생성된다.

  [lam@smart /common]$ hcc -o parall_add parall_add.c -lmpi

  [lam@smart /common]$ lamboot -v lamhosts 가 실행되어 있는 상태에서

  [lam@smart /common]$ mpirun -np 5 ./parall_add 를 실행 (5는 총노드수)

*****************************************************

          Notice !!

If input is not enough large,

    Parallel method is not efficient.

This program will add from 1 to your input.

*****************************************************

Input integer number : 10000000

    Parallel SUM = 2290707264,   Wall clock time = 0.075050

    Serial Sum = 2290707264,   Wall clcok time = 0.144484

    SPEED UP = 1.925171

Goodbye! : )

    위의 결과로 병렬처리한 것이 두배 정도 빠르다.

서진우

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

You may also like...

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