혹.. 필요하신 분 있으시다면.. -.-.. 참고하세요.
--------------------------------------------------------
Beowulf-Class Cluster 구성기
1. 시작
2. 설치
3. 이용
4. 끝으로...
이 문서는 http://rainy.sarang.net/docs/cluster.txt 에서
최신버젼을 얻으실수 있습니다.
1. 시작
parallel computing... 개념은 간단하지만 구현은 복잡하다.
개념 - 작업을 parallel 하게 연결된 system 들에게 분산시켜 수행한뒤 결과를 얻는다
이점 - 수학적 문제나 과학적 계산에서 탁월한 성능을 보인다
참고 도서 : Parallel computing : theory and practice / Michael J. Quinn. / McGraw-Hill
2. 설치
동방에 띵굴띵굴 놀고 있는 컴퓨터를 연결해보자는 생각해서 시작하였다. -.-
그래서 기존에 쓰여진 글들에서 보이던 설정들과는 약간 다르게 적혀진다.
가정하길 동방에서 돌고 있는 컴퓨터들은 모두 개별컴퓨터가 인터넷에 연결되어 있는 상
황이고 관리자에게 말하여 겨우 rsh 만 열여달라고 하였다. -.-
rsh 에 의한 보안문제는 ipchains 으로 다른곳에서 들어오는 패킷들은 막아두는걸로 하였다.
1) parallel computing 에 연결될 컴퓨터들을 생각해보고 각각 이름을 붙인다
2) rsh 로 각 컴퓨터들이 연결 가능하게 설정을 해둔다
[rainy@sscc rainy]$ rsh sscc0 "pwd"
/home/rainy
[rainy@sscc rainy]$ rsh sscc1 "pwd"
/home/rainy
3) parallel computing 에 필요한 라이브러리를 선택한다. (여기선 LAM / MPI 를 선택하였다)
http://www.lam-mpi.org/ 에서 LAM을 구할수 있다
rpm을 구할수 있다면 더 편리하게 깔수 있다. 여기서는 rpm을 선택하였다.
http://www.lam-mpi.org/download/files/lam-6.5.4-tcp.1.i386.rpm 4) LAM 을 구동시키면 설치가 끝난다
lamhost 파일은 병렬 컴퓨팅으로 연결할 컴퓨터 들을 적어준다.
[rainy@sscc rainy]$ cat lamhost
sscc0
sscc1 <- sscc1 의 경우 SMP 시스템이라 2개를 적어주었다
sscc1
[rainy@sscc rainy]$ lamboot -v lamhost
LAM 6.5.4/MPI 2 C++/ROMIO - University of Notre Dame
Executing hboot on n0 (sscc0 - 1 CPU)...
Executing hboot on n1 (sscc1 - 2 CPUs)...
topology done
[rainy@sscc rainy]$
이 상태가 parallel computing 을 하기 위한 상태가 구축된것이다.
3. 이용
1) 예제 프로그램을 만들어 돌려본다
#include <stdio.h>
#include <mpi.h>
#include <math.h>
#define N 6000000000
main(int argc, char** argv)
{
int i,node,numtask,iroot;
double sum, sumt, subN;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&node);
MPI_Comm_size(MPI_COMM_WORLD,&numtask);
subN = N/numtask;
sum = 0.0;
sumt = 0.0;
iroot = 0;
for (i = 0; i < subN; i++) sum = sum + (float)(i + 1 + node*subN);
MPI_Reduce(∑,&sumt,1,MPI_DOUBLE,MPI_SUM,iroot,
MPI_COMM_WORLD);
if (node == iroot) printf("total sum = %f",sumt);
MPI_Finalize();
exit(0);
}
이 프로그램은 1-600000000 (6억) 까지의 합을 계산하는 것이다.
체크에 이용된 시스템은 Dual 펜2-400 CPU 컴(sscc1), 펜3-500 CPU 컴(sscc0)
[rainy@sscc /tmp]$ mpicc -o sum1k sum2.c -lm
프로세서 하나의 이용(펜2-400 CPU 컴의 cpu1번)
[rainy@sscc /tmp]$ time mpirun -np 1 ./sum1k
total sum = 180000000300000000.000000
real 0m37.885s
user 0m0.000s
sys 0m0.010s
프로세서 두개의 이용(펜2-400 CPU 컴의 cpu1,2번)
[rainy@sscc /tmp]$ time mpirun -np 2 ./sum1k
total sum = 180000000300000000.000000
real 0m19.233s
user 0m0.010s
sys 0m0.010s
프로세서 세개의 이용(sscc1 + sscc0)
[rainy@sscc /tmp]$ time mpirun -np 3 ./sum1k
total sum = 180000000300000000.000000
real 0m13.001s
user 0m0.000s
sys 0m0.010s
이 때 주의할 점은 sum1k 라는 실행파일이 각 컴퓨터의 같은 디렉토리에 존재하여야 한다.
만약 NFS로 공유디렉토리를 설정하였다면 그 디렉토리 안에서 실행하면 된다.
서로 다른 시스템의 혼합에서는 performance 측면에서는 어느정도 고려해야할 점이 많지만
load balancing 측면은 이 프로그램에서는 고려하지 않는다 -.-
(오직 test 프로그램이다 -.-)
4. 끝으로...
parallel computing 을 위한 환경 구성은 그리 어렵지 않은 편이다.
약간의 Linux 지식만 있다면 구성은 할수 있다.
문제는 이 환경에서 돌아가는 프로그램을 만드는 일이다.
기존의 프로그램을 parallel 환경에서 돌아갈수 있도록 재포팅 하는 작업이 필요할것이다.
프로그램에 도움이 될 만한 책이다. (알고리즘)
참고도서 : Parallel Programming / Barry Wilkinson, Michael Allen / Prentice Hall
--
삽질삽질삽질 -.-