http://www.ubuntu-kr.org/viewtopic.php?f=2&t=16175
내 용
발표 1 우분투로 슈퍼컴 만들기 = 김성윤
발표 2 geogebra (수학 그래프+도형 툴) = 미남imsu(구임수)
자기 소개 및 자유 이야기
발표 3 : 우분투에서 임베디드 리눅스 개발 환경 구축하기 = 뻔뻔강사(유명환)
4. 컴퓨터 속도의 한계
일반적으로 컴퓨터의 속도를 결정짓는 이론적인 요인
- 컴퓨터의 CPU clock 속도
- 단위 clock당 수행할 수 있는 instruction의 개수
보통 CPU clock 속도는 Hz로 표시
- 1초당 진동하는 진동수를 의미
연산 성능 척도 => MFlops, GFlps
1Gflops = 초당 10억번의 실수 연산 능력
Pentium III 800Mhz 의 이론 성능은 800Mhz * 1 CPU = 800 MFlops 가 됨
Pentium Xeon 2.4 의 이론성능은 2.4Ghz *2(SSE2) = 4.8 GFlops 가 됨
Ia64 1.4 GHz의 이론성능은 1.4 X 2 X 2 = 5.6 Gflops 가 됨
-> 실제 성능치는 이론성능의 58~60% 정도의 효울을 보임
5. 1980년대~1990년대 초반
당시 슈퍼 컴퓨터들은 고성능의 단일 CPU를 탑재 하거나 벡터 레지스터(Vector register) 기능을 포함
해 CPU성능 향상을 통해 고성능 연산 능력을 제공하는 벡터형 SMP(Symmetric Multi Processor)가 주류
입출력 성능과 벡터 레지스터를 이용한 CPU의 계산 능력은 우수하였으나 가격이 매우 비싸다는 문제와
차후 시스템 확장성에 대한 한계를 가짐
- SMP의 경우, 시스템이 하나의 운영체제를 이용해 여러 개의
CPU를 작업량에 맞게 효율적으로 활용하는 기능으로써 여러
개의 CPU를 이용해 별다른 연결장치 없이 내부적으로 memory
를공유해 효율적인 성능을 높일 수 있었다.
- 2~4개의 프로세서를 갖는 SMP 시스템은 아주 간단하게
구축할 수 있지만, 그 이상의 프로세서를 갖는 시스템의 경우
에는 문제가 모든 프로세서가 모든 I/O 및 메모리 자원을 엑세
스할 수 있어야 하기 때문 자치 공유 자원이 병목 현상에 빠지
기 시작하며, CPU를 더 추가 할 경우 반환률이 감소 될 수도 있
다
6. 1994년 ~1997년
- CPU 에 대 한 단 가 가 저 렴 해 졌 기 때 문 에 다 수 의 일 반 적 인 CPU(4 ~ 1024CPUs) 를 이 용 하 는
MPP(Massively Parallel Processor)형 병렬 슈퍼컴퓨터가 등장한 시기
- MPP란 프로그램을 여러 부분으로 나누어 여러 프로세서가 각 부분을 동시에 수행
- 각 프로세서는 운영체계와 메모리를 따로 가지며 프로세서간에는 message passing로 통신
- 상용 소프트웨어들의 부재와 병렬 시스템을 사용하는 사용자
들이 병렬화라는 특수한 개념의 프로그램 기법을 습득 해야 한
다는 치명적인 단점을 지님
- 사용자 측면의 단위 계산 성능 향상을 추구 할 때에는 다른 머
신 보다도 훨씬 좋은 성능을 병렬화를 통하여 보일 수 있음
- 사용자들이 병렬 슈퍼컴퓨터 시스템에 탑재되어 있는 CPU 수
만큼의 웍스테이션들이라고 생각 할 수 있어 작업량이 많을 때
는 여러 대의 웍스테이션들을 보유하고 있는 것처럼 Through-
Put(단위 시간당 작업 소화 능력)개념으로 확대해 사용할 수 있
다는 점.
7. 1998년 ~ 현재
- 현 재 는 CC-NUMA(Cache Coherent Non-Uniform Memory Access) 라 는 DSMP(Distributed Shared
Memory Processor)구조의 슈퍼컴퓨터들이 인기를 끌며 주류를 이루고있음
-CC-NUMA 아키텍쳐의 슈퍼 컴퓨터는 손쉽게 작업 성능을 향상 시켜 줄 수 있는 SMP 구조와 최대 성능
을 보장해 줄수 있는 MPP 구조로 되어 있음
- 1996년부터 불어오기 시작한 리눅스 열풍은 기초과학 분야
및 연구소등에서 값비싼 슈퍼컴퓨터들을 구입해 활용하기보다
저비용으로 고성능을 보일 수 있는 리눅스 기반의 PC 클러스터
시스템이 등장하게됨
-클러스터(Cluster)는 MPP 보다 좀더 관리자 면에서 효율적인
운영체제가 필요한 시스템임,
-사용자가 직접 machine를 관리/통제(병렬프로그래밍)해야 한
다는 점이 MPP와 같다. 시스템들은 서로 memory를 제공 할 수
있는 연결 장치가 사용자의 기호(비용)에 맞게 구축 될 수 있으
며, 문제가 발생한 machine은 바로 교체가 가능하며 low
machine과 High machine을 혼합하여 사용할 수 있다는 특징이
있다.
15. •486DX4 100Mhz X 16node
•Each processor had 16M of 60ns DRAM.
•Each node had a 540M or 1G EIDE disk.
•Three 10Mbs bus-master ethernet cards
Beowulf
- Beowulf 는 1994 년 미 항 공 우 주 국 NASA 산 하 연 구 소 인
CESDIS(Center of Excellence in Space Data and information
Science)에서 Super 컴퓨터 Cray의 임대기간 종료에 대비하기 위
해 새로운 병렬처리 용 Super 컴퓨터의 개발을 시작하였고 16 노
드의 클러스터를 이용하여 만든 병렬 컴퓨터의 프로젝트명
- 베어울프는 8세기 영국의 서사시의 주인공
- 도날드 베커, 토머스 스털링
- Beowulf는 PC를 Ethernet과 같은 LAN으로 연결하여 만든 PC
Cluster에서 병렬처리 한 프로그램을 실행시켜서 Gflops급의
Super 컴퓨터를 구현것이다.
-1994 년 16 대 의 66MHz Intel 80486 + 10Mbps Ethernet ->
100MHz 486DX4 업그레이드 (74MFLOPS)
34. Key 복사
cp ssh_host_rsa_key.pub ssh_known_hosts2
ssh_known_host2 파일 수정
of,192.168.100.250 ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDIWbfwXYNe04NtEYqhEP+LzN9a3VxfFX0SQ6m
03dqjF1q1vf168EE5XhH6My6bso7I60FbfnAkjpaRukXaWam8C3aRgrykNXU5qP+ejWRK
5D54PQDIxzfTDvyLXabZwfA/dSL4BV1gjB/8BUPbCipRnqOPOJCeaoBOJMkh1eE3WkCI7x
uZwzXi5B7XT/SkIYUuTpX9OkEnhxRImQlSD1VDcT/yBtwWBKqzaFJ629X0uQHnshatVdM
60DVJVHvhj2j3CkIuquY4InSnUDLdOZmbpJfL8If1pkL8Mel67EIfF6a25TuTH605d6xzd0N
JNNuE9wth1sQ1HJzj//o1aolx root@openform
ssh_known_host2 파일 안에 다른 노드의 키 추가
SSH
58. MPI(Message Passing Interface)는 병령 실행 프로그램에서 노드에 분산된 프로세스
사이에 정보를 교환하는 메시지를 전달하는 방법을 정의한 규약 중 하나이다.
MPICH 는 MPI 표준규약이 적용된 프리, 오픈소스이다. 이 프로그램은 Argonne
National Lab 과 Mississippi State University 에서 작성하였으며 MPI-1.1을 따른
MPICH 와 MPI-2 에 따른 MPICH2 가 있다.
http://www-unix.mcs.anl.gov/mpi/mpich/
configure –prefix=/home/share/mpich -cc=gcc -fc=f77
$ make
$ make install
MPICH
59. 1. SUM
다음 프로그램은 1부터 100까지 더하는 프로그램으로 Broadcast 연산과 Reduce 연산을 하도록 되어 있고 프로
그램 흐름은 다음과 같다.
위 그림과 같이 node01 은 ( 1,3 5,7, 9.... 99)까지 합을 node02 는 ( 2,4,6,8,10 ... 100)가지의 합을 구하게 되어
이를 합하게 되는 구조이다.
MPICH
61. int main (int argc, char *argv[])
{
int done = 0;
int number = 0;
int sum;
int mysum = 0;
int iproc;
int nproc;
int i;
MPI_Init (&argc, &argv);
MPI_Comm_size (MPI_COMM_WORLD, &nproc);
MPI_Comm_rank (MPI_COMM_WORLD, &iproc);
MPICH
62. while (!done)
{
if (iproc == 0)
{
if (number == 0) number = 100;
else number = 0;
START_TIMER;
}
MPI_Bcast (&number, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPICH
63. if (number == 0) done = 1;
else
{
for (i = iproc + 1; i <= number; i+= nproc) mysum += i;
MPI_Reduce (&mysum, &sum, 1, MPI_INTEGER, MPI_SUM, 0, MPI_COMM_WORLD);
if (iproc == 0)
{
STOP_TIMER;
printf ("sum is %dn", sum);
printf ("elapsed time is %.3fmsn", ELAPSED_TIME);
}
}
}
MPI_Finalize ();
}
MPICH
64. MPICH
컴파일 방법 :
기존
cc -o ksy sumcc
MPI 사용시
mpicc -o ksy sum.c
실행 방법 : mpirun -np {프로세서 수} 실행 파일
Mpirun -np 12 ksy
65. 실제 이 프로그램을 CPU 1개가 있는 노드 2개에 실행을 하여 보면 다음과 같다.
1 CPU 사용 시
[baron@node01 TEST]$ mpirun -np 1 SUM
sum is 5050
elapsed time is 0.061ms
2 CPU 사용 시
[baron@node01 TEST]$ mpirun -np 2 SUM
sum is 5050
elapsed time is 3.547ms
문제 :
병렬 처리에도 불구 하고 이 결과가 나오는 이유는 무엇인가?
MPICH
66. 답 :
이유는, 실제 계산을 보면, 2CPU로 나누어 계산은 빠르나 이를 합하는 과정에서
네트워크 사용에 의한 트래픽 결과 이다. 이 때문에 1 CPU 보다 늦은 결과가 나온
다. 그러나 만일 100 가지 합이 아니라 1억까지 합이라면 그 결과는 달라진다.
결론 :
병렬 처리를 할 경우 다양한 문제에 대한 정확한 접근이 필요로 한다.
위 예제에서 보여 주듯 문제에 대한 정확한 이해와 그 성능에 대한 정확한 이해가
필요로 한다.
MPICH