Microsoft PowerPoint - 병렬프로그래밍세미나_TBB_ _v1.5.pptx

Similar documents
목차 병렬프로그래밍이해및 TBB 기초 TBB 글로벌사례및국내동향 TBB 실무적용 TIPS

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - AMP_ pptx

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Template

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

슬라이드 1

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

C++ Programming

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

<4D F736F F F696E74202D20BAB4B7C4C7C1B7CEB1D7B7A1B9D6BCBCB9CCB3AA5F F FB0EDC7FCC8A32E >

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint 프레젠테이션

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

금오공대 컴퓨터공학전공 강의자료

C++ Programming

설계란 무엇인가?

PowerPoint Presentation

PowerPoint 프레젠테이션

슬라이드 1

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

Microsoft PowerPoint - chap10-함수의활용.pptx

JVM 메모리구조

Chapter #01 Subject

Microsoft PowerPoint - CSharp-10-예외처리

슬라이드 1

Microsoft Word - PLC제어응용-2차시.doc

C 언어 프로그래밊 과제 풀이

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - ch07 - 포인터 pm0415

제11장 프로세스와 쓰레드

Microsoft PowerPoint - o4.pptx

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - Windows CE Programming_2008 [호환 모드]

adfasdfasfdasfasfadf

Microsoft PowerPoint - CHAP_03 - 복쇬본.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Slide 1

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

2002년 2학기 자료구조

PowerPoint Presentation

Slide 1

untitled

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap11-포인터의활용.pptx

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

C# Programming Guide - Types

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

설계란 무엇인가?

유니티 변수-함수.key

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

2 병렬성 vs 동시성 시분할 시스템에서 선점형 멀티태스킹 두 개 프로세서 코어에서의 동시 작업

JAVA PROGRAMMING 실습 02. 표준 입출력

OCW_C언어 기초

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

11장 포인터

[Brochure] KOR_TunA

슬라이드 1

PowerPoint 프레젠테이션

Microsoft Word - DELL_PowerEdge_TM_ R710 서버 성능분석보고서.doc

Microsoft PowerPoint - 권장 사양

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Microsoft PowerPoint - chap05-제어문.pptx

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

CUDA Programming Tutorial 2 - Memory Management – Matrix Transpose

Design Issues

설계란 무엇인가?

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

Slide 1

chap x: G입력

17장 클래스와 메소드

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

C++ Programming

Microsoft PowerPoint - additional08.ppt [호환 모드]

PowerPoint Template

Microsoft PowerPoint - chap04-연산자.pptx

슬라이드 1

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-03.pptx

ThisJava ..

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap12-고급기능.pptx

Transcription:

ROCK YOUR CODE Intel Software Conference 2010 Parallel Programming using Intel Parallel Studio Threading Building Blocks in Action Oct 12, 2010 EL Tower, Seoul TBB 역자이창재 changjay@hanmail net

Goal Important Parallel programming trend and status in Korea Key challenges for developers How to enhance the performance of parallel application by using TBB TBB 를이용한병렬프로그래밍실무 Slide No. 2

Agenda Motivation Background TBB Overview TBB Basic TBB in Action Vision Image Analysis Reference Summary TBB 를이용한병렬프로그래밍실무 Slide No. 3

Motivation 슈퍼컴퓨터, 병렬컴퓨터분야에서만연구되어온병렬프로그래밍 슈퍼컴퓨터 병렬컴퓨터 멀티코어프로세서의대중화병렬프로그래밍가능영역이확장되었다! 개인용컴퓨터 그러나, 코어가늘어난다고프로그램의성능이저절로증가하는것이아님 멀티코어프로그래밍필요 TBB 를이용한병렬프로그래밍실무 Slide No. 4

Motivation 병렬처리기술을실무에쉽게도입할수있는가? 병렬프로그래밍기술이필요하지만 어려워서도입부에서포기 배우기쉬운기술이면좋겠다! 스레드를직접생성, 관리, 동기화하는 복잡함과불편함때문에포기 스레드를직접관리하지않는 추상화된기술이면좋겠다! 모두의기술이될수없음으로인해포기 개발자간공유와인수인계가쉬우면좋겠다! 역시불편하고어렵다는 공감대를형성하기에이르고 기존개발환경에쉽게도입할수있는 라이브러리형태면좋겠다! TBB!!! TBB 를이용한병렬프로그래밍실무 Slide No. 5

Background Single Core vs. Multi Core Single Core 대안기술 Multi Core CPU Core Cache C CPU C C C 펜티엄 4 프레스캇 2.8GHz 펜티엄 4 노스우드 3.0 GHz 동시멀티스레딩 (SMT) 하나의 CPU를외부에서 2개처럼보이게함. 하이퍼스레딩에서사용 싱글코어의대안으로 제시됨 Cache 성능은클록속도에비례 속도가빨라지면전력소모가커지고발열이많아더이상속도를늘리기가어려웠다. 여러개의코어를탑재하기때문에보다낮은주파수에서작동성능향상 싱글코어에서소모되는전력을여러코어에분산 TBB 를이용한병렬프로그래밍실무 Slide No. 6

Background 헥사코어, 옥타코어 6 코어걸프타운 (Gulftown) 8 코어네할렘 (Nehalem) 6 8 TBB 를이용한병렬프로그래밍실무 Slide No. 7

Background 멀티스레딩 vs. 병렬처리 1. 멀티스레딩 스레드스위칭을통해병렬처리효과를구현하고, 결국은동시성에도달하려는기술 스레드 스레드 스레드 2. 병렬처리 멀티스레딩은하나의프로세서에서여러프로세서를사용하는효과를볼수있지만, 진정한병렬처리를위해서는스레드들을각프로세서에분배하여실행해야한다. 병렬컴퓨터 CPU CPU CPU 스레드스레드스레드 멀티코어컴퓨터 Core Core Core 스레드스레드스레드 TBB 를이용한병렬프로그래밍실무 Slide No. 8

Background CPU 사용비교 하나의코어만사용될때 두개의코어에부하가분산된상태 TBB 를이용한병렬프로그래밍실무 Slide No. 9

Background 데이터병렬화 vs. 작업병렬화 1. 데이터병렬화 대문자변환 2. 작업병렬화 TBB 를이용한병렬프로그래밍실무 Slide No. 10

Background Embarrassingly Parallelism 당황스러운병렬처리 Parallelism는문맥에따라 병렬성, 병렬처리 및 병렬이론 등으로번역됨. 병렬컴퓨팅에서, ' 당황스러운병렬처리 ' 란작업간에의존성이없이독립적이어서그냥병렬화가되는경우를말함. 예 : 화면에있는각픽셀이독립적으로렌더링되는그래픽처리 이와같이병렬성이너무풍부하여그냥병렬화구현이되는경우를 ' 당황스럽다 ' 고표현한것임. 김민장님 (minjang@gatech.edu) 께서번역에도움을주셨습니다. TBB 를이용한병렬프로그래밍실무 Slide No. 11

Background 고려사항 1. 불확실성문제 리소스를동시접근하는병렬프로그래밍에서동시성에대한대가로발생하는문제 대표적인경우 데드락 (deadlock) 레이스컨디션 (race condition) [ 해결책 ] 고전적인방법 LOCK 상호배제의원리이다. 명시적잠금 : 동시에한스레드만해당데이터에접근하도록중앙관리 단점 : 일일이관리해야하는불편, 부하문제발생가능 보다나은방법 암시적잠금을사용한다. Fine-grained 잠금을사용한다. 명시적잠금은최후의수단으로한다. TBB에서제공하는상호배제기능 뮤텍스 (Mutex) : 여러태스크들이접근할수있는전역변수 원자적연산 (Atomic Operation) : 하드웨어에서제공하는원자적연산에기반을둠 인터럽트의영향을받지않으려는시도 TBB를이용한병렬프로그래밍실무 Slide No. 12

Background 고려사항 2. 메모리거짓공유 (False-Sharing) 병렬프로그램에서캐시를이용한데이터동기화가일어나는과정에서발생할수있는성능저하문제 (Worst 100x) 캐시라인 : 캐시메모리의접근단위 ( 프로세서마다다름. 보통은 64바이트 ) 1. Core 1이데이터 1을사용하면 2. 동일한캐시라인에있다는이유만으로 Core 2의데이터 2가무효화되는데 Core 1 사용 데이터 1 Core 1 데이터 1 이러한불필요한동작이끊임없이발생 Core 2 데이터 2 Core 2 데이터 2 이때데이터 2 는메모리에저장 불필요한동작이발생 해결책 : 서로다른코어의데이터를인접영역에생성하지않거나, TBB 의 cache_aligned_allocator 사용 TBB 를이용한병렬프로그래밍실무 Slide No. 13

TBB Overview Mind Map 스레드가아닌 태스크 개념도입 Intel 제작 더높은수준, 더단순한해결책제공 기존병렬처리기술과호환 특징 일반 최초출시 2006 년 8 월 ver 1.0 최신버전 2010 년 4 월 ver 3.0 TBB 오픈 C++ 라이브러리 병렬처리기술 목표 성능 Performance 스레드추상화기술 기술관점 조정성 Scalability TBB 를이용한병렬프로그래밍실무 Slide No. 14

TBB Overview 역사적배경 TBB 를이용한병렬프로그래밍실무 Slide No. 15

TBB Overview 타스레딩기술과비교 Challenges for parallel programming Windows threads OpenMP Threading Build Blocks Task level O O Cross-platform support O O Scalable runtime libraries O Threads Control O Pre-tested and validated O O C Development support O O Intel Threading Tools support O O O Maintenance for tomorrow O O Scalable memory allocator light mutex O O Processor affinity O Thread affinity [ 참고 ] http://software.intel.com/en-us/blogs/2008/12/16/compare-windows-threads-openmp-intel-threading-building-blocks-for-parallelprogramming TBB 를이용한병렬프로그래밍실무 Slide No. 16

TBB Overview 전체기술구조 기본알고리즘 고급알고리즘 parallel_for parallel_for_each parallel_reduce parallel_scan parallel_while parallel_do parallel_preorder pipeline parallel_pipeline parallel_sort parallel_invoke 컨테이너 concurrent_queue concurrent_vector concurrent_hash_map concurrent_unordered_map 상호배제 뮤텍스 spin_mutex queuing_mutex spin_rw_mutex queuing_rw_mutex 조정성있는메모리할당자 scalable_malloc scalable_free scalable_realloc scalable_calloc scalable_allocator cache_aligned_allocator 원자적연산 recursive_mutex null_mutex null_rw_mutex fetch_and_add fetch_and_swap fetch_and_store fetch_and_increment zero_allocator fetch_and_decrement 태스크스케줄러 타이밍 TBB 를이용한병렬프로그래밍실무 Slide No. 17

TBB Overview 태스크 (Task) 태스크란? 병렬화될작업단위 (Raw thread 대신에 ) 에서정의한단어일뿐, 특정기술개념은아님 C++ 함수객체 (Functor, function object) 로정의 태스크에대한정확한이해를위한두가지선행지식 스레드추상화 : 직접스레드를생성하고일감을효율적으로분배하고관리하는복잡함을뒤에감추는논리적접근 함수객체 : 평소에익숙하지못할경우 TBB 의태스트를이해하는데도장애가될수있음 TBB 를이용한병렬프로그래밍실무 Slide No. 18

TBB Overview 함수객체 (Function Object) // 함수객체를구현하기위한클래스예 class FunctionA { void operator()(int x) { // 구현코드 } }; 코드를보면함수객체는 함수처럼동작하는클래스 임을알수있다. 함수는함수이름과괄호로구성되어있다는점에착안 C++ 기술중에연산자 (operator) 중복을사용 operator() 를중복하는클래스를객체로인스턴스화한다음괄호만붙여주면함수처럼인수를넘겨동작할수있게함 // 함수객체를사용하는예 FunctionA f; f(10); // 일반함수를호출하는것과동일 TBB에서는태스크를기술적인용어로 Body 객체 라고부르며, Body라는말은 C언어의 Function Body" 에서따왔음 클래스로구현해야복사생성을통해분신술처럼일꾼들을복제해낼수있음. 이복사본들을얼만큼생성할지, 각코어에효율적으로할당하면서병렬화효과를최대화할지에대한역할은 TBB의 태스크스케줄러 가담당 TBB 를이용한병렬프로그래밍실무 Slide No. 19

TBB Overview 태스크스케줄러 (Task Scheduler) 태스크스케줄러가 Blocked Range라는 Range 객체를통해태스크를각코어에분배 (Work Stealing) 병렬프로그래밍에서각스레드에게균형있게작업량을주는것이중요 parallel_for와같은 TBB 알고리즘은태스크스케줄러에기반을두고실행 TBB는생성될개별태스크들의개수를런타임에결정하며, Range 객체를통해전체범위를재귀적으로분할하여분할된하위범위를생성된태스크에할당하고실제스레드에잘들어맞도록스케줄링 Core 스레드 태스크스케줄러 TBB Blocked Range 태스크 Pool 태스크태스크태스크 Core 스레드 Core 스레드 TBB 를이용한병렬프로그래밍실무 Slide No. 20

TBB Overview 조정성 (Scalability) 조정성이란? 프로세서코어개수에비례하여프로그램성능이자동으로결정되는특성 확장과축소모두를포함하는개념 ( 단순히 확장성 으로번역되면안되는이유 ) 듀얼코어에서는두개의코어가모두사용, 쿼드코어에서는네개의코어가모두사용 All Cores are Busy TBB에서는타스레딩패키지처럼직접조정성처리를해줄필요가없다. TBB 를이용한병렬프로그래밍실무 Slide No. 21

TBB Overview Grain 크기 하나의코어에합리적인크기의작업덩어리 (grain) 를분배하기위한개념 과도한병렬처리에대한부하를막아준다. 처리할전체범위가 grain 크기보다클동안, TBB는이범위를독립적으로스케줄링되는개별하위범위들로계속 ( 재귀적으로 ) 분할한다. 지정방법 ( 경험적방법론 - 휴리스틱 ) 1단계 : 충분히큰값으로시작. 보통은 10,000으로설정하는것이좋다. 2단계 : 프로그램실행후결과관찰 3단계 : 값을절반으로줄이고프로그램속도변화관찰 최적치를찾을때까지반복 TBB 를이용한병렬프로그래밍실무 Slide No. 22

TBB Overview 알고리즘템플릿 루프병렬화알고리즘 parallel_for, parallel_reduce 고정된개수의루프반복들에대해부하분산이고려된병렬실행지원 parallel_scan 스캔 (scan) 이라고도알려진 prefix 계산을병렬로실행 (y[i] = y[i-1] op x[i]) 하는템플릿함수 스트림에대한병렬알고리즘 parallel_while pipeline 비정형적인스트림또는작업더미 (dummy) 에사용실행중에작업더미에다른작업을추가하기위한기능제공 작업단계들의선형시퀀스가있을때사용전송중에있을수있는항목들의최대개수를지정 병렬정렬 parallel_sort 단일프로세서에서 O(n log n) 을넘지않고프로세서개수가늘어날수록 O(N) 에근접하는평균시간복잡성을가진비교정렬 TBB 를이용한병렬프로그래밍실무 Slide No. 23

TBB Basic 초기화 절차 1단계 : 헤더파일 task_scheduler_init.h 포함 2단계 : 네임스페이스 tbb 사용선언 3단계 : task_scheduler_init 형식객체선언 Example #include "tbb\task_scheduler_init.h" using namespace tbb; int main() { task_scheduler_init init; return 0; } 위와같이선언만으로초기화가되며, 소멸은기본소멸자실행시컴파일러가자동으로호출해준다. TBB 를이용한병렬프로그래밍실무 Slide No. 24

TBB Basic 루프병렬화절차 1단계태스크정의 = Body 객체를위한 Class 작성 2 단계 알고리즘에인수로대입할 Range 객체정의 3 단계 앞에서정의한 Body 객체와 Range 객체를알고리즘에대입 TBB 를이용한병렬프로그래밍실무 Slide No. 25

TBB Basic parallel_for 고정개수의독립적인반복에사용하는알고리즘템플릿 Form 1 범위객체 void parallel_for(const Range& range, const Body& body); #include "tbb\parallel_for.h" #include "tbb\blocked_range.h" void ParallelCalculation (float a[], size_t n) { ParallelCalculation body; parallel_for( blocked_range<size_t>(0, n, 10000), body(a) ); } 바디객체 TBB 를이용한병렬프로그래밍실무 Slide No. 26

TBB Basic parallel_for 자동분할사용하기 Form 2 범위객체 void parallel_for(const Range& range, const Body& body, Partitioner& partitioner); 분할자 바디객체 #include "tbb\parallel_for.h" #include "tbb\blocked_range.h" void ParallelCalculation (float a[], size_t n) { ParallelCalculation body; parallel_for( blocked_range<size_t>(0, n), body(a), auto_partitioner() ); } TBB 를이용한병렬프로그래밍실무 Slide No. 27

TBB Basic parallel_for parallel_for 를사용하여직렬코드를병렬화하는방법 1단계태스크정의 = Body 객체를위한 Class 작성 Body Class 를구성하는코딩스타일의허들을거뜬히넘어가십시오!!! 직렬코드의 for 루프 Body 에있는구현로직을적절히재활용하십시오!!! 2 단계 parallel_for 에인수로대입할 Range 객체정의 3 단계 앞에서정의한 Body 객체와 Range 객체를 parallel_for 에대입 TBB 를이용한병렬프로그래밍실무 Slide No. 28

TBB Basic parallel_for 1 단계 : 직렬코드를활용하여태스크정의하기 직렬방식루프코드 void SerialCalculation(float a[], size_t n) { for (size_t i = 0; i < n; ++i) MyCalculation(a[i]); } 태스크정의 = Body 클래스정의 class ParallelCalculation { float* const my_a; public: void operator()(const blocked_range<size_t>& r) const { float* a = my_a; for (size_t i = r.begin(); i!= r.end(); ++i) MyCalculation(a[i]); } ParallelCalculation(float a[]) : my_a(a) { } }; TBB 를이용한병렬프로그래밍실무 Slide No. 29

TBB Basic parallel_for Body 클래스작성법 STL 스타일의함수객체, 연산자오버로딩, const class ParallelCalculationBody 클래스이름 { private: 데이터멤버선언 float* my_a; public: 생성자 ParallelCalculationBody(float a[]) : my_a(a) {} }; operator() void operator()(const 연산자오버로딩 blocked_range<size_t>& r)const { float* a = my_a; }; for(size_t i = MyCalulation(a[i]); r.begin(); i!= r.end(); i++) TBB 를이용한병렬프로그래밍실무 Slide No. 30

TBB Basic parallel_for 2 단계 : Range 객체정의하기 blocked_range 0부터 n-1까지전체반복간격을나타낸다. parallel_for가각프로세서에대해하위간격들로나눈것이다. 생성자원형 blocked_range<t>(begin, end, grainsize) T는값형식을지정 begin과 end는반개구간 [begin, end) 을의미하는 STL 스타일의반복간격을지정 예를들어, 만일 blocked_range<int>(0, 3000, 1000) 에서 3개의프로세서 ( 코어 ) 를가동할수있다면, 각프로세서에는 1000개의반복문이할당된다. blocked_range<size_t>(0, n, 10000) TBB 를이용한병렬프로그래밍실무 Slide No. 31

TBB Basic parallel_reduce 리덕션 (reduction) 연산을수행하기위한알고리즘템플릿 reduction 은 감소 라는의미가아니라 데이터정리 의의미를가지며, 한그룹에있는모든멤버들에 sum, max, min 또는논리 AND 와같은함수를적용하는것을리덕션연산 (reduction operation) 이라고함. parallel_reduce( blocked_range<t>(begin, end, grainsize), BodyObject ); 바디객체 범위객체 #include "tbb\parallel_reduce.h" #include "tbb\blocked_range.h" void ParallelSum(float a[], size_t n) { ParallelSumBody body(a); parallel_reduce( blocked_range<float*>(0, n, 10000), body ); } TBB 를이용한병렬프로그래밍실무 Slide No. 32

TBB Basic parallel_reduce 1 단계 : 직렬코드를활용하여태스크정의하기 직렬방식루프코드 float SerialSum(float a[], size_t n) { float sum = 0; for (size_t i = 0; i!= n; ++i) sum += Calculation(a[i]); return sum; } 태스크정의 = Body 클래스정의 class ParallelSum{ float* my_a; public: float sum; void operator()(const blocked_range<size_t>& r) { float* a = my_a; for (size_t i = r.begin(); i!= r.end(); ++i) sum += Calculation(a[i]); } ParallelSum(ParallelSumBody& x, split) : my_a(x.my_a), sum(0) { } void join(const ParallelSumBody& y) { sum += y.sum; } ParallelSum(float a[]) : my_a(a), sum(0) { } }; TBB 를이용한병렬프로그래밍실무 Slide No. 33

TBB Basic parallel_reduce Body 클래스작성법 Class SumBody{ float* my_a; public: float sum; void operator()(const blocked_range<size_t>& r) const { float* a = my_a; for (size_t i = r.begin(); i!= r.end(); ++i) sum += Calculation(a[i]); } SumBody(SumBody& x, split) : my_a(x.my_a), sum(0) { } SumBody(float a[]) : my_a(a), sum(0) { } }; void join(const SumBody& y) { sum += y.sum; } 1. sum을업데이트하기위해 operator() 의마지막에 const를붙이지않는다. 2. 스레드에대응하는각객체복사본의결과를병합하기위해 join 메서드추가 (split-join 메커니즘 ) 3. 분할생성자를추가로정의 split는더미인수이며복사생성자와구분하기위해역할 TBB를이용한병렬프로그래밍실무 Slide No. 34

TBB in Action 설치 (1/4) www.threadingbuildingblocks.org [Downloads] [Stable Release] TBB 3.0 다운로드! TBB 를이용한병렬프로그래밍실무 Slide No. 35

TBB in Action 설치 (2/4) 윈도우운영체제일경우 tbb30_20100406oss_win.zip 다운로드 클릭! TBB 를이용한병렬프로그래밍실무 Slide No. 36

TBB in Action 설치 (3/4) 다운로드한파일을원하는폴더에압축해제 TBB 를이용한병렬프로그래밍실무 Slide No. 37

TBB in Action 설치 (4/4) 환경변수설정 TBB_INSTALL_DIR 사용자변수로추가 TBB 버전에관계없이동일한변수명을사용하면편리 TBB 를이용한병렬프로그래밍실무 Slide No. 38

TBB in Action 개발환경셋팅 (1/4) 포함디렉터리설정 [ 모든구성 ] [C/C++] > [ 일반 ] > [ 추가포함디렉터리 ] $(TBB_INSTALL_DIR) include TBB 를이용한병렬프로그래밍실무 Slide No. 39

TBB in Action 개발환경셋팅 (2/4) 라이브러리디렉터리설정 [ 모든구성 ] [ 링커 ] > [ 일반 ] > [ 추가라이브러리디렉터리 ] $(TBB_INSTALL_DIR) ia32 vc9 lib TBB 를이용한병렬프로그래밍실무 Slide No. 40

TBB in Action 개발환경셋팅 (3/4) 종속성설정 각구성별 > [ 링커 ] > [ 입력 ] > [ 추가종속성 ] 구성별로각각 tbb_debug.lib, tbb.lib 입력 TBB 를이용한병렬프로그래밍실무 Slide No. 41

TBB in Action 개발환경셋팅 (4/4) TBB DLL 파일복사 방법 1 : 프로젝트의각구성별디렉터리에해당 DLL 복사 ( ia32 vc9 bin 에있는 ) [Debug] 폴더에 tbb_debug.dll 복사 [Release] 폴더에 tbb.dll 복사 방법 2 : System32 디렉터리에두파일모두복사 TBB 를이용한병렬프로그래밍실무 Slide No. 42

TBB in Action 기본실습 1 (parallel_for) 용도 루프의각반복에가해지는행위가독립적일때 문제정의 입력배열에있는각원소의제곱값을결과배열에저장 실험방법 실험 (1) : 배열개수를변경해가면서직렬및병렬버전의속도비교 실험 (2) : 배열개수를고정하고, Grain 크기를변경하면서최적값찾기 실습순서 1. 직렬버전작성 2. 병렬버전작성 1 태스크정의 = Body 클래스작성 2 parallel_for 구문작성 3. 실험 (1) 수행 4. 실험 (2) 수행 실습 TBB 를이용한병렬프로그래밍실무 Slide No. 43

TBB in Action 기본실습 2 (parallel_reduce) 용도 루프의모든반복이하나의결과값에영향을끼칠때 ( 여러입력값으로부터하나의결과값산출 (reduce)) 문제정의 입력배열에있는모든원소의평균값구하기 실험방법 배열개수를변경해가면서직렬및병렬버전의속도비교 실습순서 1. 직렬버전작성 2. 병렬버전작성 1 태스크정의 = Body 클래스작성 2 parallel_reduce 구문작성 3. 실험수행 실습 TBB 를이용한병렬프로그래밍실무 Slide No. 44

TBB in Action Vision Image Analysis 개요 Wafer Edge에있는 Crack, Chipping을자동검사하는 Vision 장치의이미지처리 MFC 애플리케이션의성능을향상시키기위해병렬화가능부분을식별하고병렬구현으로변경하는과정을실습을통해알아본다. TBB 를이용한병렬프로그래밍실무 Slide No. 45

TBB in Action Vision Image Analysis 실험방법 비전장치에의해획득된 60 개의 Edge 이미지를분석하여 Defect 크기와위치를찾아내는루프로직을 parallel_for 알고리즘으로변경하고, 직렬실행과병렬실행결과를 CPU 점유율과속도향상율로비교해본다. 실습순서 1. 직렬버전설명 2. 병렬버전작성 1 태스크정의 = Body 클래스작성 2 parallel_for 구문작성 3. 실험수행 실습 TBB 를이용한병렬프로그래밍실무 Slide No. 46

TBB in Action Vision Image Analysis 결과 for 루프를병렬알고리즘으로변경한것만으로도상당한성능개선효과가있었다. 발전사항 중첩된 parallel_for 구조로한층더병렬화 이미지획득과동시에처리하기위해동시적컨테이너 (concurrent_vector) 를사용 CPU 사용율 50% 처리속도 3124 ms x2 x1.7 CPU 사용율 100% 처리속도 1850 ms TBB 를이용한병렬프로그래밍실무 Slide No. 47

Reference 도서 TBB 를이용한병렬프로그래밍실무 Slide No. 48

Reference 문서 1. www.intel.com 또는 www.threadingbuildingblocks.org 에서다운로드 2. 월간마소 2009 년 2 월호 프로세서아키텍처의변화로본병렬프로그래밍 / 김민장 TBB 를이용한병렬프로그래밍실무 Slide No. 49

Reference 웹사이트 2. www.threadingbuildingblocks.org TBB 를이용한병렬프로그래밍실무 Slide No. 50

Reference 웹사이트 3. http://hermet.pe.kr (TBB 도서테크니컬리뷰어블로그 ) TBB 를이용한병렬프로그래밍실무 Slide No. 51

Reference 웹사이트 4. http://rein.kr/blog TBB 를이용한병렬프로그래밍실무 Slide No. 52

Summary 1. 기존병렬처리기술은스레드 (Thread) 를직접다루는방식이었다. 스레드추상화기술로발전했다 ( 예 : OpenMP, PPL). 2. 스레딩빌딩블록 (TBB) 은인텔이출시한최신스레드추상화기술이다. 3. TBB는 태스크 를사용하는데, 함수객체와스레드추상화의이해가선행되어야한다. 4. TBB는 STL과같이형식제약이최소화된템플릿라이브러리형태를취한다. 5. TBB 를이용한병렬프로그래밍실무의목적은동시성 (Concurrency) 과성능및조정성이다. 6. 조정성 (scalability) 은 스케일러빌리티 로도읽으며, 코어개수가변할때그에비례하여성능도조정된다는의미의용어이며 조정성 으로번역된다. 7. 코딩스타일의생소함을넘어서실무에자신있게도입하시기바랍니다! TBB 를이용한병렬프로그래밍실무 Slide No. 53

Thank You! TBB 를이용한병렬프로그래밍실무 Slide No. 54