Parallel Programming -...

59
Parallel Programming 박필성 IT대학 컴퓨터학과

Transcript of Parallel Programming -...

Page 1: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming

박 필 성

IT대학 컴퓨터학과

Page 2: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

목차

Why Parallel?

Parallel Computers

Parallel Processing

Parallel Programming Models

Parallel Programming

OpenMP Standard

MPI Standard

Related Topics & Questions

Page 3: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Why Parallel? (1)

Why parallel computing?• 전통적인 compute-intensive applications

기상 예보, 전산 유체역학, 화학, 천문학, 다양한 공학문제

• 새로운 data-intensive applicationsvideo servers, data mining

• 미래의 high performance applicationsVR, 협업 환경, CAD

• Save time and/or money.

• Solve large problems.

• Provide concurrency.

• Use of non-local resources

• Limits to serial computing

• http://en.wikipedia.org/wiki/Parallel_computer

• http://www.top500.org/

Page 4: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Why Parallel? (2) Atmosphere, Earth, Environment

Physics - applied, nuclear, particle, condensed matter, high pressure, fusion, photonics

Bioscience, Biotechnology, Genetics

Chemistry, Molecular Sciences

Geology, Seismology

Mechanical Engineering - from prosthetics to spacecraft

Electrical Engineering, Circuit Design, Microelectronics

Computer Science, Mathematics

Page 5: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Why Parallel? (3) Databases, data mining

Oil exploration

Web search engines, web based business services

Medical imaging and diagnosis

Pharmaceutical design

Management of national and multi-national corporations

Financial and economic modeling

Advanced graphics and virtual reality, particularly in the entertainment industry

Networked video and multi-media technologies

Collaborative work environments

Page 6: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Why Parallel? (4)

Computer의 물리적 한계(계속)• 현재 CPU의 clock speed는 대략 3GHz

- 발열 문제- 반도체 소자의 문제

• 1 Tera Hz(1 x 10^12 Hz)의 computer는 가능한가?광속 c = 3 x 10^8 m/sec = 3 x 10^11 mm/secCPU와 memory 사이의 거리를 r이라고 하면

r < c / 10^12 = 0.3 mm !!

• 1 Tera byte(=10^6 x 10^6 bytes)의 memory 가지려면1 byte는 3A x 3A 이내에 저장되어야 !!

Computer의 성능 높아질수록 가격은 기하급수적으로 상승

하나의 고가 시스템보다 여러 개의 저가 시스템을 사용하여병렬 처리하는 것이 대안

Page 7: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Why Parallel? (5)

Computer의 물리적 한계(계속)• 2004년까지 SW 개선 없이도 HW 발전에 따라 수혜

• CPU clock의 증가 : 2000년대 초반까지 기하급수적으로 증가

• CPU 실행시간 최적화 : CPU 명령어의 순차실행 최적화(pipeline, 분기예측, out-of-order execution 등)

• Cache 크기 증가

• “The free lunch is over: A fundamental turn toward concurrency in SW” (Hurb Sutter, 2005)• 전력 소모 및 발열 문제 : clock 속도의 제곱(세제곱?)

• Clock 속도 증가 짧은 도선 CPU의 신뢰도 하락

• 2004년부터 CPU 제조사들은 clock 속도 경쟁 포기

• CPU : single core multi-core GPU : many-core

Page 8: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Computers (1)

Parallel computer• 정의

* 다수의 CPU가 다수의 프로그램 혹은 분할된 프로그램을 동시에처리하는 컴퓨터

* 다수의 CPU를 결합하여 단일 CPU 성능의 한계를 극복하기 위한컴퓨터 구조

http://giyyon.tistory.com/44?srchid=BR1http%3A%2F%2Fgiyyon.tistory.com%2F44

• 다양한 분류 방법이 있으나, 메모리 공유에 따른 분류는* SMP(Symmetric Multi Processing)* MPP(Massively Parallel Processing)* NUMA(Non-Uniform Memory Access)

** Cluster computer (workstation, PC, …)- 개인 PC나 소형 server 등을 network 장비를 사용하여 다수 연결하여 구성한

일종의 병렬처리용 supercomputer - 저렴한 가격(상용 supercomputer의 1/10), 확장성, 유연성

Page 9: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Computers (2)

2012년 11월 Top500에 따른 HPC 시장의 구성비 (1993-)

Page 10: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Computers (3)

2012년 11월 Top500에 따른HPC 시장의 구성비 (1993-)

Page 11: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Computers (4)

2012년 11월 Top500에 따른HPC 시장의 구성비 (1993-)

Page 12: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Computers (5)

PC Cluster• 소형 PC나 PC 서버를 수십 대에서 수천 대까지 병렬 네트워크로 연결해

슈퍼컴퓨터에 상응하는 고성능 컴퓨팅(HPC)을 구현하는 기술

• 최초 NASA CESDIS Beowulf : 16-node Intel DX4 processorshttp://www.phy.duke.edu/~rgb/brahma/Resources/beowulf/

Page 13: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Computers (6)

Computer architecture 구분

Page 14: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Processing (1)

병렬 처리(parallel processing)란?• 복수의 처리 장치를 사용하여, 모든 처리 장치가 하나의 프로그램상의

서로 다른 태스크를 동시에 처리함으로써 처리의 부하를 분담하여 처리 속도를 향상시키는 방법

• 여러 개의 프로그램을 동시에 병렬 처리하는 다중 처리( multiprocessing)와는 다름

Page 15: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Processing (2)

병렬 처리의 장단점• 장점

- program의 실제 실행시간(wall-clock time) 감소- 해결할 수 있는 문제의 규모 증대

• 단점- 추가적인 overhead 소요- 프로그래밍이 어려움- 모든 문제에 효율적으로 적용되는 것이 아님

병렬 처리의 예• 일상생활/회사에서의 예

• 벽에 페인트 칠하기 병렬 처리 쉬움

• 고도의 수학 문제 풀기 병렬 처리 어려움/불가능/무의미

Page 16: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Processing (3)

병렬 처리 관련 용어• program

disk에 file로 저장되어 있는 일련의 명령어의 모음

• processor(=CPU)single(1), dual(2), quad(4), hexa(6), octa(8), deca(10), magni(12)

• CPU core : CPU의 핵심 부분

• taskOS 관점에서 본 독립적인 실행 작업의 단위

• process- 실행 가능한 program이 호출되어 OS의 실행제어 상태에 놓인 것.- 각 process는 program code, data, stack, register 등의 독립적인

자원과 주소공간을 가진다.- 일반적으로 하나의 program이 실행될 때 다수의 process 생성.

• thread- OS에서 제어하는 가장 작은 작업 단위의 하나로 process에 포함되어 실행.- 즉 하나의 process 안에서 동일한 text(문맥)을 사용하는 작업 단위- 독립적인 제어의 흐름으로 프로그램에 대한 CPU 시간 할당의 단위가 된다

Page 17: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Processing (4)

process와 thread• processor는 한번에 하나의 process만 사용 가능

• processor를 다른 process에게 넘겨줄 때 context switch(문맥교환)현재 실행중인 process의 상태를 저장하고 다른 process를 실행시키기 위한처리과정이 필요.* task context (process, thread …)

the minimal set of data used by the task that must be saved to allow a task interruption + the configuration of the task

• process는 독립적인 작업 단위로 수행되나 컴퓨터 기술의 발전으로 process는보다 작은 작업 단위인 thread로 분류되어 수행될 수 있게 되었다.

• process scheduling과 thread scheduling- 각 process는 서로 다른 text를 사용하나 thread는 text를 공유- 하나의 process 안에서 각 thread는 모두 동일한 text를 공유하므로

하나의 process 안에서 thread의 교체가 일어나는 경우 text를 교체할필요가 없으므로 보다 빠르게 작업을 교체하여 실행 가능

- 따라서 효율적인 자원할당과 문맥교환으로 인해 thread 단위의 program 실행은 process 단위의 실행보다 더 나은 성능 보인다.

Page 18: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming Models (1)

Why parallel programming model?• 병렬 연산에서는 process(혹은 thread)간에 data 전달 필요.

시스템의 hardware 구조에 따른 적절한 programming model 선택해야

• Shared memory system- 모든 CPU는 메모리를 공유 한 CPU가 다른 CPU에 data를 전달하려면

단순히 공유 메모리에 write 다른 CPU가 read programming이 쉽다.- memory contention CPU 개수에 한계

• Distributed memory system- 모든 CPU는 독립된 메모리 사용 다른 CPU에 data를 전달하려면 명시적인

통신 필요 programming 어렵다.- memory contention 없으므로 시스템 확장 용이

Page 19: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming Models (2)

1) 공유 메모리 병렬 프로그래밍 모델• 하나의 process에 속한 thread들은 시스템 자원을 공유하므로

다중 thread program이 공유 메모리 아키텍쳐에 적합.- POSIX thread(p-thread) : 사용자가 thread 생성 및 작업할당 제어

- OpenMP : source program에 compiler 지시어를 삽입하여 다중 thread 실행 program을 생성

• 단일 thread process와다중 thread process.

Page 20: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming Models (3)

2) Message passing 병렬 프로그래밍 모델• 병렬 시스템을 구성하는 node들이 주소 공간을 공유하지 않는다면

각 process는 다른 process들이 갱신하는 data에 접근하기 위해network을 통해 data를 주고 받아야 한다.- HPF(High Performance FORTRAN)- PVM(Parallel Virtual Machine)

- MPI (Message Passing Interface)

• Message Passing

Page 21: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming Models (4)

3) Hybrid 병렬 프로그래밍 모델• SMP cluster와 분산-공유 메모리 아키텍처를 가지는 시스템에서는 공유 메모리

모델의 특징과 message passing 모델의 특성을 모두 살리는 hybrid 모델이 적합

• 하나의 program 내에서 공유 메모리 모델과 message passing model을 모두이용하여 programming하는 것을 말함

ex. OpenMP + MPI

• 하나의 node에 단일 thread를 가지는 여러 process 생성의 예

Page 22: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming Models (5)

SPMD vs. MPMD• SPMD (Single Program Multiple Data)

병렬 프로그램을 수행하는 모든 process 또는 thread가 동일한 하나의 프로그램을 실행하면서- 프로그램 내의 함수를 서로 다른 data를 가지고 병렬로 실행하거나(domain 분해)- 서로 각기 다른 함수를 맡아 병렬로 실행한다(기능적 분해)

• MPMD (Multiple Program Multiple Data)여러 개의 프로그램으로 구성되며, 각 process 또는 thread가 서로 다른 프로그램을 실행하면서 프로그램이 필요로 하는 data를 통신을 통해 주고 받는다.

SPMD MPMD

Page 23: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming (1)

병렬 프로그래밍에서 고려되어야 할 사항• data 의존성(dependency)의 문제

근본적인 의존성이 있는 경우는 병렬화 불가의존성을 피하며 병렬화

• 교착(deadlock)의 문제

• 확장성(scalability)이 좋도록 작성해야

• 고른 작업 분배가 중요 : 모두가 동시에 작업이 끝나야

• I/O 문제 : 입출력은 하나의 worker가 담당해야

• 모든 worker의 작업 및 진도를 어떻게 control? 동기화(synchronization)의 문제

• 어떻게 worker 간에 정보(즉 data)를 주고 받을 것인가? shared memory vs. distributed memory

• program을 어떻게 작성할 것인가?- SPMD(single program multiple data)- MPMD(multiple program multiple data)

Page 24: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming (2)

병렬 처리 문제 : 1부터 n까지의 합을 구하라.• p : 전체 worker의 수

각 worker는 p와 자신이 몇 번째 worker인지(자신의 “rank”) 알아야.

• Algorithm1. master worker가 n을 입력받는다.2. master worker가 고르게 작업을 나누고

각자 담당할 작업 범위를 slave worker들에게 알린다.3. 각자 주어진 범위의 부분합을 독립적으로 계산한다.4. slave worker는 각기 master worker에게

자신이 계산한 부분합을 보고한다.5. master worker는 자신을 포함한 모든 worker의 부분합을

취합하여 답을 낸다.

2 대신 master worker는 n 값을 slave worker들에게 broadcast하고모든 worker는 각자 자신의 rank에 따라 자신의 작업 범위를 파악한다.

Page 25: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming (3)

SPMD vs. MPMD [1/2]• SPMD(single program multiple data)

worker 모두가 같은 프로그램 사용,단, 각 worker의 rank에 따라 역할을 분류

Algorithm master worker의 rank=0을 가정1. If my rank==0,

n을 입력받고, slave worker들의 작업범위를 결정하고, 각자에게 통보한다.else

master worker로부터 작업 범위를 통보 받는다.(그 때까지 대기)2. 각자 독립적으로 자신이 맡은 범위의 수를 더해 부분합을 구한다.3. If my rank==0,

모든 slave worker로부터 부분합을 전달받아 총 합을 계산한다.else

각자 master worker에게 자신의 부분합을 보고한다.4. If my rank==0,

총합을 출력한다.

Page 26: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Parallel Programming (4)

SPMD vs. MPMD [2/2]• MPMD(multiple program multiple data)

역할에 따라 2개 이상의 프로그램 사용,

Algorithm (master worker)1. n을 입력받고, 각 slave worker의 작업범위를 결정하고, 각자에게 통보한다.2. 자신이 맡은 범위의 수를 더해 부분합을 구한다.3. 모든 다른 worker로부터 부분합을 전달받아 총 합을 계산한다.4. 총합을 출력한다.

Algorithm (slave worker)1. master worker로부터 자신의 작업범위를 통보받는다.2. 각자 독립적으로 자신이 맡은 범위의 수를 더해 부분합을 구한다.3. 각자 master worker에게 자신의 부분합을 보고한다.

Page 27: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (1)

OpenMP란 무엇인가?

공유 메모리 환경에서 다중 thread 병렬 프로그램 작성을 위한API(응용 프로그램 인터페이스)

• 기존의 직렬 프로그램에 병렬화 지시어(directive)를 추가하여 compiler로하여금 병렬화 유도

• 기존의 직렬 프로그램을 그대로 혹은 약간의 변형만으로 병렬화 가능.

• 단지 공유 메모리 시스템에서만 사용 가능

Page 28: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (2)

OpenMP의 목표• 표준과 이식성

• 공유 메모리 다중 thread 병렬 프로그래밍의 사실상의 표준(de facto standard)

OpenMP의 역사• 1990년대 : 고성능 공유 메모리 시스템의 비약적 발전

업체 고유의 다양한 지시어(directive) 집합 보유 표준화 필요

• 1996년 openmp.org 설립 http://www.openmp.org/

• 1997년 OpenMP API 발표

• 2002년 3월 OpenMP 2.0 발표(C/C++)

• 2008년 10월 OpenMP 3.0 발표

• 2013년 3월 현재 OpenMP 4.0 개발 중

• 현재 대부분의 compiler가 OpenMP 지원ex. Linux gcc 4.0 이후 : OpenMP 3.0 지원

Page 29: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (3)

OpenMP의 구성• #include <omp.h>

• Compiler directives(컴파일러 지시어)- thread 사이의 작업분담, 통신, 동기화를 담당. 좁은 의미의 OpenMP- 형식 : #pragma omp 지시어

ex. program 내에서#pragma omp parallel#pragma omp for

• Runtime library(실행시간 라이브러리)병렬 매개변수(참여 thread의 개수, 번호 등)을 설정과 조회

ex. program 내에서omp_set_num_thread(8);

실행시 병렬 영역에서 thread 개수를 8개 사용

• Environment variable(환경변수)실행 시스템의 병렬 매개변수(사용하는 thread 개수 등)를 정의

ex. Linux system에서는$ export OMP_NUM_THREADS=8

실행시 병렬 영역에서 thread 개수를 8개 사용

Page 30: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (4)

OpenMP programming model• Thread 기반 Fork-Join model

• compiler directive 기반 : 순차 code에 지시어 삽입- compiler가 지시어를 참고하여 다중 thread 생성- OpenMP 지원하는 compiler 필요

/

Page 31: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (5)

serial code parallel code

ialpha = 2;

for (i=1; i<=100, i++) {

:

}

ialpha = 2;

#pragma omp parallel for

for (i=1; i<=100, i++) {

:

}

Page 32: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (6)

주요 OpenMP compiler directives (1)• 병렬 block의 지정

#pragma omp parallel 프로그램 내에서 병렬 block을 지정{ fork : 지정된 수의 thread가 생성

병렬 block thread들이 병렬로 실행} join : master thread만 남음

• 병렬 block 내에서의 작업 분할1) #pragma omp for for 문의 작업 분할

for (i=0; i<n; i++)

2) #pragma omp sections section별로 thread에게 작업 할당{

#pragma omp section 각 section을 정의{}

#pragma omp section 각 section을 정의{}

}

/

Page 33: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (7)

주요 OpenMP compiler directives (2)• 병렬 block 내에서의 작업 분할(계속)

3) #pragma omp single 단일 thread가 실행할 block 지정{

단일 thread가 실행할 block }

• 4) #pragma omp taskex. 명시적인 task 정의. #pragma omp single private(i){

for (i=0; i<N; i++) {#pragma omp task{

여기에 task 정의}

}}

Page 34: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (8)

주요 OpenMP compiler directives (3)• 상호 배제

#pragma omp critical 매 순간 오직 하나의 thread만 실행. 다른 것은 대기#pragma omp atomic “mini” critical

• event 동기화

#pragma omp barrier 모든 thread들이 barrier에 도달할 때까지 대기#pragma omp ordered 내부의 loop 실행을 순차적으로 실행#pragma omp master master thread만 실행. 다른 thread는 건너 뜀

• 기타

#pragma omp threadprivate(변수)#pragma omp taskwait#pragma omp flush

:

Page 35: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (9)

OpenMP compiler directive에 추가하여 사용하는 것• Data 유효 범위 관련 clauses

shared (변수들) 모든 thread가 공유하는 변수 선언private (변수들) 각 thread가 각기 하나씩 가지는 변수 선언firstprivate (변수들)lastprivate (변수들)default ()copyin (변수들)reduction (연산자:변수)

• 기타

schedulenowaitcollapseordered

:

Page 36: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (10)

주요 OpenMP runtime library functions

omp_get_thread_num() thread ID 파악omp_get_num_threads() 전체 thread 개수 파악omp_set_num_threads() 사용하는 thread 개수 설정omp_get_max_threads() 최대 thread 개수 파악omp_get_num_procs() 사용할 수 있는 processor 개수 파악omp_in_parallel() 현재 수행중인 곳이 병렬영역인지 판단omp_set_dynamic() thread 개수를 동적으로 변경가능케 할 것인가 설정

program 내에서 함수를 호출하여 사용

주요 OpenMP 환경 변수OMP_NUM_THREADS 실행시 사용할 수 있는 thread의 최대 개수OMP_DYNAMIC 실행시 thread 개수를 동적으로 변경가능케 할 것인지OMP_SCHEDULE scheduling 방식OMP_NESTED nested parallelism 허용 여부

Linux의 경우, 프로그램 실행 전에 다음과 같은 명령을 실행하여 환경 설정

$ export OMP_NUM_THREADS=16

Page 37: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (11)

OpenMP 예제 프로그램

#include <stdio.h>#include <omp.h>int main(void) {int i, sum=0;#pragma omp parallel for reduction(+:sum){ for (i=1; i<=1000; i++)

sum+=i;}printf("Sum from 1 to 1000 is %d.\n",sum);

}

#include <stdio.h>#include <omp.h>int main(void) {int i, sum=0, total=0, Nthreads, th_id;#pragma omp parallel{ Nthreads = omp_get_num_threads();

th_id = omp_get_thread_num()for (i=th_id; i<1001; i=i+Nthreads)sum+=i;

#pragma omp criticaltotal=total+sum;

}printf("Sum from 1 to 1000 is %d.\n", total);

}

Page 38: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

OpenMP Standard (12)

OpenMP의 장단점, 기타

- compiler 지시어, runtime library routines, 환경변수 알아야- 사용하는 변수가 shared인지 private인지- 기타 병렬적 감각

장 점 단 점

• 사용자가 직접 통신을 처리해야 하는MPI에 비해 코딩, 디버깅이 비교적쉽다.

• 사용자가 직접 data 분할을 해야 하는MPI보다 data 분할에 대한 부담 적다.

• 각 loop을 하나씩 병렬화하여 점진적인 병렬화가 가능

• compile option 의 조 정과 선 택적compile 문법을 이용해 하나의 code를 병 렬 code 와 순 차 code 로compile 가능

• 상대적으로 code의 크기가 작다.

• 생성된 병렬 프로그램은 공유 메모리환경의 다중 프로세서 아키텍처에서만 실행 가능

• 아키텍처(프로세서 수, 메모리)의한계로 원하는 성능을 얻기 힘들다.

• OpenMP 를 지 원 하 는 compiler 가반드시 필요

• 프로그램의 병렬성이 loop에 대한의존도가 커서 병렬화 효율이 낮다.

Page 39: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (1)

Message Passing이란?

지역적으로 독립된 메모리를 가지는 process들이 data를 공유하기 위해message(data)를 송수신하여 통신하는 방식

• 병렬화를 위한 작업할당, data 분배, 통신의 운용 등 모든 것을 프로그래머가 담당 : 어렵지만 효율 높다.

• 다양한 hardware platform에서 구현 가능

• 분산 메모리 다중 processor system

• 공유 메모리 다중 processor system

• 단일 processor system

MPI란 무엇인가?• Message Passing Interface de facto standard(사실상의 표준)

• Message passing 병렬 프로그래밍을 위해 표준화된 데이터 통신 라이브러리(Message Passing Library)의 표준을 정의한 것

• 목적 : 이식성(portability), 효율성(efficiency), 기능성(functionality)* hardware vendor가 자신의 hardware에 최적화된 library 제공 가능

Page 40: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (2)

MPI의 역사• 1980년대 – 1990년대 초까지, 다양한 분산 메모리 병렬 컴퓨팅 SW 등장.

• MPI Forum : 표준 마련의 필요성에서 정부, 학계, 산업체 등, 1992 시작http://www.mpi-forum.org/

• 1994년 MPI-1 표준 마련(MPI Forum)http://www.mcs.anl.gov/mpi/index.html

• 1997년 MPI-2 발표

• 2012년 9월 MPI-3.0 발표http://www.mpi-forum.org/docs/docs.html

• MPI 표준에 맞추어 개발한 MPI LibraryMPICH, CHIMP, LAM/MPI, OpenMPI, …,기타 각 hardware vendor들의 MPI (ex. IBM MPI)

OpenMPI sitehttp://www.open-mpi.org/

Page 41: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (3)

MPI 관련 기본 개념 (1)

Process와 processor• MPI는 process 기준으로 작업 할당

• Processor : process = 1:1 or 1:many

Communicator• 서로간에 통신이 허용되는

모든 process들의 집합

Process rank• 동일한 communicator 내의 process들을

식별하기 위한 식별자

• 만일 p개의 process가 연산에 참여한다면 rank는0, 1, …, p-1

Page 42: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (4)

MPI 관련 기본 개념 (2)

Message [ = data + envelope ]• 어느 process가 보내는가

• 어디에 있는 data를 보내는가

• 어떤 data를 보내는가

• Data를 얼마나 보내는가

• 어느 process가 수신할 것인가

• 어디에 저장할 것인가

• 얼마나 받을 준비를 해야 하는가

Tag (꼬리표)• Message의 matching과 구분에 이용

• 순서대로 메시지 도착을 처리할 수 있음 message buffer 사용

• wild card 사용 가능 : MPI_ANY_TAGex. “누군가 message를 보내오면”

Page 43: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (5)

MPI 관련 기본 개념 (3)

점 대 점 통신 (point to point communication)• 두 개의 process 사이의 통신

• 하나의 송신 process에 하나의 수신 process가 대응

집합 통신(collective communication)• 동시에 여러 개의 process가 통신에 참여

• 일 대 다, 다 대 일, 다 대 다 대응 가능

• 여러 번의 점 대 점 통신 사용을 하나의 집합통신으로 대체

• 프로그래밍이 쉽고 간단하다.

• 오류의 가능성이 적다.

• 최적화되어 일반적으로 빠르다.

Page 44: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (6)

MPI(Message Passing Interface) 표준• http://enc.daum.net/dic100/contents.do?query1=20XX221466

• In the definition by Gropp et al 96, MPI "is a message passing application programmer interface, together with protocol and semantic specifications for how its features must behave in any implementation", "MPI includes point-to-point message passing and collective (global) operations, all scoped to a user-specified group of processes.“

• MPI is a language-independent communications protocol used to program parallel computers.

• MPI-1은 127개의 함수로 구성

• 대부분의 MPI implementation은 Fortran, C, C++에서 호출가능한library function으로 구성 보통의 Fortran, C, C++ 프로그램에서 다른 process로 통신이 필요시 적절한 함수만 호출하면 됨

• 그 외 Python, Ocaml, Java에서도 사용하도록 노력중

Page 45: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (7)

MPI 프로그램의 기본 구조

• #include <mpi.h>- MPI 함수의 prototype 선언- macro, MPI 관련 인수, data type 정의

• 변수 선언- MPI 함수의 prototype 선언

• MPI 환경의 초기화- MPI_Init()- MPI_Comm_rank()- MPI_Comm_size()

… MPI 통신 함수 호출하며 연산 수행

• MPI 환경 해제- MPI_Finalize()

Page 46: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (8)

MPI 함수에 대하여

• MPI 함수의 이름과 형태MPI_Xxxxxx(parameter, …);

MPI_ 로 시작그 다음 첫 글자 X는 대문자

• MPI 함수의 호출과 return 값

• 호출 예err = MPI_Init(&argc, &argv);if (err == MPI_SUCCESS) {

:}

혹은MPI_Init(&argc, &argv);

• Return 값첫 예의 경우, “err”로 return.

호출이 성공적이면 MPI_SUCCESS 값 가짐

Page 47: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (9)

MPI의 기본 함수 (1)

int MPI_Init(&argc, &argv);• MPI 환경 초기화

• MPI 루틴 중 가장 먼저 오직 한번 반드시 호출되어야 함

• MPI_COMM_WORLD라는 communicator가 정의됨

• 호출 예MPI_Init(&argc, &argv);

int MPI_Comm_rank(MPI_COMM comm, int *rank);• 같은 communicator comm에 속한 process의 rank를 할당

- p개의 process를 사용할 경우, 0부터 p-1의 값을 할당

• 호출 예MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

Page 48: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (10)

MPI의 기본 함수 (2)

int MPI_Comm_size(MPI_COMM comm, int *size);• Communicator comm에 포함된 process들의 총 개수 가져오기

• 호출 예MPI_Comm_size(MPI_COMM_WORLD, &p);

int MPI_Finalize( );• 모든 MPI 자료구조 정리

• 모든 process들이 마지막으로 한 번 호출되어야 함

• Process를 종료시키는 것은 아님

• 호출 예MPI_Finalize();

Page 49: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (11)

MPI 메시지 = data + 봉투(envelope)

• Data

• Buffer : 수신(송신) data의 변수 이름

• 개수 : 수신(송신) data의 개수

• Data type : 수신(송신) data의 data 유형

• 봉투• 수신자(송신자) : 수신(송신) process의 rank

• Tag(꼬리표) : 송신(수신) data를 나타내는 고유한 정수

• Communicator : 송신, 수신 process들이 포함된 process group

• MPI data type

• 기본 type과 유도 type(derived type)

• 유도 type은 마음대로 만들 수 있다.

• 송신과 수신 data type은 반드시 일치해야 한다.

Page 50: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (12)

MPI 기본 data type

Page 51: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (13)

점대점 통신(point to point communication) [1/3]

• 반드시 두 개의 process만 참여

• communicator 내에서만 이루어짐

• 송신/수신 process의 확인을 위해 communicator와 rank 사용

• 통신의 완료

• 메시지 전송에 이용된 메모리 위치에 안전하게 접근할 수 있음을 의미

• Blocking 통신과 non-blocking 통신

• Blocking : 통신이 완료된 후 루틴으로부터 return됨

• Non-blocking : 통신이 시작되면 완료와 관계없이 return, 이후 완료여부검사

• 통신 완료에 요구되는 조건에 따라통신 모드 분류

Page 52: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (14)

점대점 통신(point to point communication) [2/3]

• 통신 모드

Page 53: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (15)

점대점 통신(point to point communication) [3/3]

• int MPI_Send(void *message, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

• Datatype 형태의 자료 message를 count 개수만큼 dest rank의 process에게 전송

• 반환값 : error codeex. MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag,

MPI_COMM_WORLD);

• int MPI_Recv(void *message, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status)

• Source process로부터 tag 태그를 사용해서 보내온 메시지를 받음

• Source : process rank 혹은 MPI_ANY_SOURCE 사용

• Tag : 전송자가 사용한 tag 혹은 MPI_ANY_TAG 사용 가능ex. MPI_Recv(message, 100, MPI_CHAR, source, tag,

MPI_COMM_WORLD, &status);

• 이외 많은 점대점 통신 함수가 있음

Page 54: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (16)

집합 통신(Collective communication) [1/3]• 한 그룹의 process가 참여

• 점대점 통신을 이용한 구현보다 편리하고 성능면에서 유리

• 집합통신 루틴

• Communicator 내의 모든 process 호출

• 동기화가 보장되지 않음, Non-blocking 루틴 없음, Tag 없음

Page 55: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (17)

집합 통신(Collective communication) [2/3]

Page 56: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (18)

집합 통신(Collective communication) [3/3]

• int MPI_Bcast(void *message, int count, MPI_Datatype datatype, int root, MPI_Comm comm)

• 전송자와 수신자는 모두 같은 명령을 사용

• root라는 rank를 가진 process가 송신하며 다른 모든 process는 수신Ex. MPI_Bcast(&uplimit,1,MPI_LONG,0,MPI_COMM_WORLD);

• Int MPI_Reduce(void *operand, void *result, int count, MPI_Datatype datatype, MPI_Op operator, int root, MPI_COMM comm)

• Operand에 주어진 자료에 대해 operator로 지정된 연산을 수행한 결과를result로 반환함

• Operator는 MPI_MAX, MPI_MIN, MPI_SUM, MPI_PROD 등 많은 종류의 연산이 가능Ex. MPI_Reduce(&sum,&gsum,1,MPI_DOUBLE,MPI_SUM,0,

MPI_COMM_WORLD);

Page 57: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (19)

1부터 n까지 더하는 serial program

#include <stdio.h>

int main(int argc, char* argv[]){long int i,last;double sum;

printf("This program computes the sum from 1 to a given number.\n");printf("Enter a big number : ");scanf("%ld",&last);

sum=0.;for (i=1; i<=last; i++) {sum=sum+i;

}

printf(“Sum from 1 to %ld is %f\n",last,sum);}

Page 58: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

MPI Standard (20)

1부터 n까지 더하는 parallel program#include <stdio.h>

#include "mpi.h“

int main(int argc, char* argv[])

{

int MyRank, size;

long int i, uplimit, mok, nam, start, last, count[16];

double sum, gsum, stime, time1, time2;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &MyRank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

if (MyRank==0) {

printf("Enter a big number : ");

scanf("%ld", &uplimit);

}

MPI_Bcast(&uplimit,1,MPI_LONG,0,MPI_COMM_WORLD);

mok=uplimit/size;

nam=uplimit % size;

for (i=0; i<size; i++) {

count[i]=mok;

if (i < nam) count[i]=count[i]+1;

}

start=1;

for (i=0; i<MyRank; i++)

start=start+count[i];

last=start+count[MyRank]-1;

printf(" MyRank = %d : %ld - %ld\n",MyRank,start,last);

}

sum=0.;

for (i=start; i<=last; i++)

sum=sum + (double) i;

MPI_Reduce(&sum,&gsum,1,MPI_DOUBLE,MPI_SUM,0,

MPI_COMM_WORLD);

if (MyRank==0)

printf(" Sum = %f\n",gsum);

MPI_Finalize();

}

Page 59: Parallel Programming - vrlab.suwon.ac.krvrlab.suwon.ac.kr/mwlee/data2/file/병렬표준(2013).pdf · 병렬처리(parallel processing)란? • 복수의처리장치를사용하여,

Related Topics & Questions

Related Topics GPU computing

GPGPU(위키백과) 한글 http://enc.daum.net/dic100/contents.do?query1=10XX236094영문 http://enc.daum.net/dic100/contents.do?query1=20X1268939

CUDA미루웨어 http://www.miruware.com/한국 CUDA 사용자 그룹(KCUG) http://cafe.daum.net/KCUG

OpenCL http://enc.daum.net/dic100/contents.do?query1=10XX281093

Questions?