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

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

Microsoft PowerPoint - AMP_ pptx

<4D F736F F F696E74202D20BAB4B7C4C7C1B7CEB1D7B7A1B9D6BCBCB9CCB3AA5F F FB0EDC7FCC8A32E >

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

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

Microsoft PowerPoint - C++ 5 .pptx

C++ Programming

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

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

슬라이드 1

PowerPoint Template

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

!K_InDesginCS_NFH

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

Microsoft PowerPoint - Chap12-OOP.ppt

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

쉽게 풀어쓴 C 프로그래밍

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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

JVM 메모리구조

Chapter #01 Subject

PowerPoint Presentation

슬라이드 1

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

C++ Programming

Microsoft PowerPoint - CSharp-10-예외처리

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Chap 6: Graphs

11장 포인터

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

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

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

슬라이드 1

윈도우시스템프로그래밍

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

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

PowerPoint 프레젠테이션

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

슬라이드 1

Frama-C/JESSIS 사용법 소개

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

K&R2 Reference Manual 번역본

Microsoft PowerPoint - Java7.pptx

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

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

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

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

2009년도 한국멀티미디어학회 춘계학술발표대회 논문집 12권1호 1. 서론 게임을 개발하는 과정에서 게임 엔진은 자동차의 엔진과 같은 역할이다. 자동차의 가치를 평가하는 요소 중에 어떤 엔진을 적용 했는가는 자동차를 평가하는데 중요하다. 게임도 게임 개발 기술 중 엔진

6주차.key

Microsoft PowerPoint - [2009] 02.pptx

02 C h a p t e r Java

13주-14주proc.PDF

설계란 무엇인가?

Microsoft PowerPoint - 권장 사양

17장 클래스와 메소드

4S 1차년도 평가 발표자료

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint Presentation


슬라이드 1

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint 세션.ppt

설계란 무엇인가?

DE1-SoC Board

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

윈도우시스템프로그래밍

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

C# Programming Guide - Types

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

gnu-lee-oop-kor-lec06-3-chap7

Microsoft PowerPoint - chap12-고급기능.pptx

2002년 2학기 자료구조

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

PowerPoint Presentation

Microsoft PowerPoint - 2강

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

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

슬라이드 1

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

Windows Embedded Compact 2013 [그림 1]은 Windows CE 로 알려진 Microsoft의 Windows Embedded Compact OS의 history를 보여주고 있다. [표 1] 은 각 Windows CE 버전들의 주요 특징들을 담고

PowerPoint 프레젠테이션

chap10.PDF

PowerPoint 프레젠테이션

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밊

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JAVA PROGRAMMING 실습 05. 객체의 활용

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

Chapter 4. LISTS

Slide 1

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

11장 포인터

Transcription:

일시 : 2012-05-10( 목 ) 17:00~17:50 장소 : 삼성동섬유센터 3 층이벤트홀 발표 : 이창재부장 C++ 개발자를위한하이퍼포먼스개발전략 글로벌활용사례와함께하는 TBB 도입전략

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

1 15 병렬프로그래밍기초 분 병렬화를위한상식적접근, 전문연구, 인텔의병렬기술 그리고 TBB

Ice Break 직렬 병렬 Serial Parallel Core 1 Core 2 Core 3 Core 4 Core 1 Core 2 Core 3 Core 4 Make all cores busy! 그렇다면, 병렬화란? 글로벌활용사례와함께하는 TBB 도입전략 4

상식적으로생각해본다면 어떻게하면빠른시간에작업을완수할까? 작업을여러일꾼에게나누고 동시에모두바쁘게철저히일을시킨다! 나누고? 여러일꾼? 동시에? How? 모두바쁘게? 철저히? 글로벌활용사례와함께하는 TBB 도입전략 5

생각의정리! 나누고 작업범위분할! 여러일꾼 멀티스레딩! 동시에 멀티프로세싱! 모두바쁘게 관리기능필요! 철저히 관리기능필요! 글로벌활용사례와함께하는 TBB 도입전략 6

상식의한계를넘어서! 1 작업범위를여러개로나누어동시에실행시킨다! 2 비슷하게실행되도록적절히작업범위를나눈다! 3 각정적범위를처리하는스레드들을생성후동시에실행! 4 좀더일반화, 원하는만큼스레드를생성하도록! 5 각스레드를코어에분배!............. 6 범위를잘게나누어스레드풀 (Pool) 을구성하고스케줄링! 7 스레드생성, 관리및동기화를추상화! 그이상은? 글로벌활용사례와함께하는 TBB 도입전략 7

전문연구결과 : Flynn 의병렬처리분류 SISD Single Instruction stream, Single Data stream 단일명령으로단일데이터처리 파이프라인처리 SIMD Single Instruction stream, Multiple Data stream 단일명령으로다중데이터처리 벡터처리 MISD Multiple Instruction stream, Single Data stream 다중명령으로단일데이터처리 이론적으로만연구됨 MIMD Multiple Instruction stream, Multiple Data stream 다중명령으로다중데이터처리 멀티프로세싱 글로벌활용사례와함께하는 TBB 도입전략 8

병렬화프로그래밍기술의발전사 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 Chare Kernel Threaded-C JSR-166 STAPL ECMA CLI McRT OpenMP 1.0 OpenMP 2.0 C/C++ version OpenMP 2.5 OpenMP 3.0 OpenMP 3.1 Intel Parallell Building Blocks Intel TBB 1.0 Intel TBB 2.0 Intel TBB 3.0 Intel TBB 4.0 Update 3 Cilk (MIT) Intel Ct CUDA 1.0 + RapidMind Cilk++ OpenCL 1.0 Intel ArBB beta Intel Cilk Plus Microsoft PPL beta end Update 6 OpenCL 1.2? CUDA 4.1 글로벌활용사례와함께하는 TBB 도입전략 9

인텔병렬삼총사 Parallel Building Blocks TBB Threading Building Blocks ArBB Array Building Blocks Cilk Plus 멀티프로세싱 템플릿라이브러리 벡터처리전용 템플릿라이브러리 멀티프로세싱 + 벡터처리 언어확장 병렬알고리즘및컨테이너 조정가능한메모리할당 자동태스크스케줄링 동기화 차세대인텔플랫폼자동적응 결정적병렬화 3개의간단한키워드사용 배열표기법제공 작업 / 데이터병렬화동시지원 직렬코드와유사한로직유지 오픈소스 추상화와고급제어동시지원 C++ only JIT + VM 기술동시지원 C++ only 간단함 + 강력함 C 와 C++ 지원 글로벌활용사례와함께하는 TBB 도입전략 10

TBB 기초사항

병렬화를위한 TBB 의아이디어 실행시간 잘게쪼갠다 코어 0 일꾼들에게 분배한다! 코어 1 코어 2 코어 3 + 스케줄링!!! 글로벌활용사례와함께하는 TBB 도입전략 12

TBB 란? 스레드추상화기술 인텔제작 스레드가아닌 태스크 개념도입 기존병렬처리기술과호환 특징 일반 최초출시 2006 년 8 월 ver 1.0 Up 4 최신버전 2012년 4월 ver 4.0 중첩병렬화지원 TBB 오픈소스 C++ 라이브러리 실시간처리는지원하지않는다! 목표 성능 Performance 조정성 Scalability 글로벌활용사례와함께하는 TBB 도입전략 13

TBB 기술구조 알고리즘 기본알고리즘 조정성있는메모리할당자 parallel_for parallel_for_each parallel_reduce parallel_deterministic_reduce parallel_scan 고급알고리즘 parallel_while parallel_do parallel_preorder pipeline parallel_pipeline parallel_sort parallel_invoke scalable_malloc scalable_free scalable_realloc scalable_calloc scalable_allocator cache_aligned_allocator zero_allocator 동기화 ( 상호배제 ) 동시컨테이너 concurrent_queue concurrent_bounded_queue concurrent_vector concurrent_hash_map concurrent_unordered_map 뮤텍스 spin_mutex queuing_mutex spin_rw_mutex queuing_rw_mutex recursive_mutex null_mutex null_rw_mutex 원자적연산 fetch_and_add fetch_and_swap fetch_and_store fetch_and_increment fetch_and_decrement 타이밍태스크스케줄러 글로벌활용사례와함께하는 TBB 도입전략 14

설치환경 In case of Windows http://threadingbuildingblocks.org/product.php OS IDE Windows XP Professional Windows Server 2003 Windows Vista Windows 7 Windows 8 Visual Studio 2003 Visual Studio 2005 Visual Studio 2008 Visual Studio 2010 Visual Studio 2011 Not Recommended Windows 2000 Visual Studio 6.0 Visual Studio 2002 C++ Builder 글로벌활용사례와함께하는 TBB 도입전략 15

TBB 다운로드사이트 www.threadingbuildingblocks.org 최신버전 : ver 4.0 update 4 Click Downloads 글로벌활용사례와함께하는 TBB 도입전략 16

TBB 설치 다운로드파일을원하는폴더에압축을풀고다음과같이 설치경로 를기억해둔다. Installation Path Keep in mind! 글로벌활용사례와함께하는 TBB 도입전략 17

TBB 설치 환경변수등록 1 제어판 시스템 고급시스템설정 고급 환경변수 2 앞에서기억해둔 설치경로 를 TBBROOT 라는사용자변수로등록한다. Parallel Studio 를설치한경우는다음경로로자동생성된다!!! C:\Program Files (x86)\intel\parallel Studio 2011\Composer SP1\tbb 글로벌활용사례와함께하는 TBB 도입전략 18

TBB 개발환경설정 1. Visual Studio 에서프로젝트설정을한다. 먼저다음과같이 모든구성 에서포함디렉터리설정을한다. $(TBBROOT)\include 글로벌활용사례와함께하는 TBB 도입전략 19

TBB 개발환경설정 2. 다음으로라이브러리디렉터리설정을한다. 자신의 OS 와 VS 버전에맞게하위경로를선택하는것이중요하다. $(TBBROOT)\lib\ia32\vc9 글로벌활용사례와함께하는 TBB 도입전략 20

TBB 개발환경설정 3. 다음과같이구성별로종속성설정을한다. 구성별로각각 tbb_debug.lib, tbb.lib 입력 글로벌활용사례와함께하는 TBB 도입전략 21

TBB 개발환경설정 4. \bin\ia32\vcxxx 에있는 DLL 파일 tbb.dll 과 tbb_debug.dll 을윈도우시스템디렉터리에복사한다. 글로벌활용사례와함께하는 TBB 도입전략 22

TBB 글로벌활용사례 15 분 게임, 그래픽, 시뮬레이션, 대용량복잡데이터처리등의분야에서활약하고있는 TBB!

TBB 글로벌활용사례 AutoDesk 사의 3D 그래픽 SW Maya 도입시기 2006 년 ~ 활용사례 영화, 게임, TV, 시각디자인분야 TBB 기반 MayaAPI 제작 Parallel code must be extracted into separate classes, which is mo re invasive than OpenMP. 병렬코드를개별클래스로관리할수있다는점이 OpenMP에비한장점입니다 Maya 의활용사례 DreamWorks 사의영화 Insomniac Games Resistance 2 의 CG 제작 Shilo TV 제작 ( 에미상수상 ) 글로벌활용사례와함께하는 TBB 도입전략 24

TBB 글로벌활용사례 Exocortex Technologies 의 시뮬레이션 SW 도입시기 2009 년 ~ 활용사례 홍수시뮬레이션부문에도입 SW 성능 2.5 배향상 회사의수익률크게증가 글로벌활용사례와함께하는 TBB 도입전략 25

TBB 글로벌활용사례 Progress Apama 사의 CEP 엔진 도입시기 2009 년 ~ 활용사례 CEP 엔진 4.0 버전부터도입 주로 Scalable allocator 적용 최대 30 배까지성능향상 CEP 란? Complex Event Processing : 복잡이벤트처리 90년대부터학계에서시작 기업내이벤트를실시간으로수집분석하여의사결정을지원하는전사적이벤트처리인프라 실시간분석이강조되는금융, 증권의알고리즘트레이딩에효과적인솔루션 Progress Apama의 CEP 엔진은코스콤의 파워알고 에사용되었으며, Forrester Research 에서 2009년 1위로선정 글로벌활용사례와함께하는 TBB 도입전략 26

TBB 글로벌활용사례 Deep Shadows 사의 게임성능및포팅 도입시기 2008 년 ~ 활용사례 자사게임을별도의코드수정없이 XBox360 에성공적으로포팅 Road to Hell 엔진성능 40% 향상 2001 년우크라이나에설립된게임회사 기사전문 : http://www.develop-online.net/news/30160/deep-shadows-talks-multiprocessor-optimisation 글로벌활용사례와함께하는 TBB 도입전략 27

TBB 글로벌활용사례 DreamWorks Animation 사의 3D 그래픽 도입시기 2009 년 ~ 활용사례 고정밀 3D 렌더링부분에도입 글로벌활용사례와함께하는 TBB 도입전략 28

TBB 글로벌활용사례 Epic Games 사의 게임엔진에통합 도입시기 2009 년 ~ 활용사례 64 비트버전인 Unreal Engine 3 에통합 Scalable allocator 도입 기사전문 : http://www.develop-online.net/news/32575/threading-building-blocks-integrated-into-ue3 글로벌활용사례와함께하는 TBB 도입전략 29

TBB 글로벌활용사례 Adobe 사의 Creative Suite 5.0 도입시기 2010 년 ~ 활용사례 고객에게고정밀디지털컨텐츠 개발및최적화제공 글로벌활용사례와함께하는 TBB 도입전략 30

TBB 글로벌활용사례 Open Cascade 에서 TBB 도입 도입시기 2011년 ~ 활용사례 기존기술기반을병렬화 CAD/CAM/CAE 분야 수치적시뮬레이션분야 PLM 분야 Adopting Intel TBB saves significant time by reducing our need to invest in the development of similar multi-threading technology from scratch - Andrey Betenev, Open CASCADE Technology Manager. 멀티스레딩기술을처음부터적용하는것에비해 TBB를사용하여투자비용을상당히줄였습니다 Open Cascade : CAD SW 개발을위한오픈플랫폼 기사전문 : http://www.opencascade.org/about/news/issue167 글로벌활용사례와함께하는 TBB 도입전략 31

TBB 글로벌활용사례 중국 The9 사의개발센터에서 TBB 도입 도입시기 2009 년 ~ 활용사례 게임서버에적용하여 4 코어에서 3.5 배성능향상 The9 : 중국 3 대게임개발및퍼블리셔중하나. 2009 년까지 WOW(World of Warcraft) 운영 글로벌활용사례와함께하는 TBB 도입전략 32

Count TBB 국내동향 Blog Activity in Korea 70 60 R² = 0.8979 50 40 30 20 10 0 2006-F 2006-L 2007-F 2007-L 2008-F 2008-L 2009-F 2009-L 2010-F 2010-L 2011-F 2011-L Intel s Effort for the TBB Upgrade Version Up Update 1.0 1 2 1.1 2.0 1 2 3 2.1 1 2 3 4 1 2 3 2.2 3.0 1 2 3 4 5 6 7 8 4.0 1 2 3 2006 2007 2008 2009 2010 2011 2012-F 글로벌활용사례와함께하는 TBB 도입전략 33

TBB 실무적용 TIPS 20 분 기존개발환경에서쉽게사용할수있는 C++ 라이브러리, 높은수준의제어가능

TIP 1 Big Picture TBB 를사용한병렬화절차

Big Picture Step 1. 디버깅 Serial Program Step 2. 핫스팟찾기 Serial Program Step 3. 코드정리 Serial Program for (int i = 0; i < N; i++) { ----------------------- ----------------------- ----------------------- 3000 lines ----------------------- ----------------------- } for (int i = 0; i < N; i++) { Process(i); } 1 직렬프로그램에있는버그는병렬 프로그램에서도재현됨 2 찾고수정하는작업이훨씬어려움 1 Parallel Studio 활용 2 Hotspot 이아닌곳을병렬화하면 역효과가발생할수도있음 1 병렬로직에서재활용을위함 2 기존코드를정리하는효과 글로벌활용사례와함께하는 TBB 도입전략 36

Big Picture Step 4. 알고리즘선택 Step 5. 태스크정의 Step 6. 데이터교환? for while sort TBB parallel_for parallel_for_each parallel_reduce parallel_do parallel_while parallel_sort Task class MyCalculation { MyCalculation(); Serial Program How does the task use the data in the serial code? void operator()( ) const { for ( ) { // Reuse! } } } task Data 1 직렬로직에해당하는알고리즘선 택 2 TBB 4.0 기준 12 개알고리즘존재 1 operator() 중복을통한함수객체생성용클래스 ( 구조체 ) 선언 2 직렬로직재활용 3 알고리즘마다코딩스타일다름 1 이미지, 파일등처리대상데이터 를어떻게태스크에넘겨줄것인가? 2 직접 or 간접? 유효범위는? 글로벌활용사례와함께하는 TBB 도입전략 37

Big Picture Step 7. 안정성 / 조정성 All Cores are busy? TBB concurrent_queue Container concurrent_vector concurrent_hash_map Memory Mutex scalable_malloc scalable_free cache_aligned_allocator 성능? 1 스레드에안전한컨테이너사용 2 조정성있는메모리할당 3 상호배제사용 조정성? 글로벌활용사례와함께하는 TBB 도입전략 38

TIP 2 알고리즘선택 Guide

알고리즘? 알고리즘 = Algorithm 수학적개념에서출발 아랍의수학자알콰리즈미 (Alkwarizmi, 780-850) 의이름에서유래 [ 출처 ] 네이버백과사전 어떠한문제를해결하기위한여러동작들의유한한모임이다. [ 출처 ] 위키백과 컴퓨터가어떤일을수행하기위한단계적방법이다. [ 출처 ] 네이버백과사전 TBB C++ 알고리즘을작성할때사용하는 for, while, sort 와같은키워드, 함수와 그절차들의집합자체를템플릿함수화한결과물이다! 글로벌활용사례와함께하는 TBB 도입전략 40

for 루프를병렬화할때... // 각루프반복이서로독립적인경우 for (int i = 0; i < N; i++) { ApplyFilter(bitmap[i]); parallel_for }; // 각루프반복결과가독립적이며한값으로귀결되어야할때 int result = 0; for (int i = 0; i < N; i++) { parallel_reduce }; result += ApplyFilter(bitmap[i]); 리덕션연산! 글로벌활용사례와함께하는 TBB 도입전략 41

여러함수를병렬로호출하고자할때... // 여러함수호출 ( 호출순서에관계가없어야한다 ) A(); B(); C(); parallel_invoke 글로벌활용사례와함께하는 TBB 도입전략 42

대용량배열을 STL 보다빠르게정렬하고싶을때... #include <vector> int main() { vector<int> v; ( 중략 ) std::sort(v.begin(), v.end()); } parallel_sort #include <tbb/parallel_sort.h> int main() { vector<int> v; ( 중략 ) tbb::parallel_sort(v.begin(), v.end()); } 글로벌활용사례와함께하는 TBB 도입전략 43

LAB : parallel_sort 와 STL sort 비교하기 설명 1000 만개의대량데이터를각방법으로빠르게정렬한후각실행시간을비교해본다. 1. STL 의정렬시간은몇초인가? 2. parallel_sort 를사용한정렬시간은몇초인가? 3. 속도는몇배증가했는가? 글로벌활용사례와함께하는 TBB 도입전략 44

TIP 3 태스크작성 Guide

태스크이해 Task = 태스크 = 작업작업? TBB 에서정의된개념일뿐이다 병렬화대상 작업? 글로벌활용사례와함께하는 TBB 도입전략 46

태스크의뼈대는함수객체에서유래 // 함수객체를구현하기위한클래스예 class MyFunction { void operator()(int x) { // 구현코드 } }; // 함수객체를사용하는예 MyFunction f; f(10); // 일반함수를호출하는것과동일 Task = 태스크 병렬화대상 작업 태스크 = 함수객체 = Function Object = Functor 글로벌활용사례와함께하는 TBB 도입전략 47

병렬알고리즘 : parallel_for 에사용할태스크 class MyTask 클래스이름 { private: 데이터멤버선언 float* my_data; public: 생성자 MyTask (float a[]) : my_data(a) {} }; operator() void 연산자 (const 오버로딩 blocked_range<size_t>& r) const { float* a = my_data; }; for(size_t i = r.begin(); i!= r.end(); i++) MyCalulation(a[i]); 글로벌활용사례와함께하는 TBB 도입전략 48

LAB 행렬곱셈병렬화 설명 두개의 N x N 행렬을생성하고행렬곱셈을한다. parallel_for 를사용하여직렬버전을병렬화하고실행시간을비교해본다. 1. 직렬실행시간은몇초인가? 2. 직렬프로그램을수정하여병렬화하는절차 1 태스크 (Body 클래스 ) 를생성한다. 곱셈처리는 operator() 연산자중복함수에구현한다. 2 병렬화가구현된루프수준은? 3 blocked_range와 Body 클래스를인수로하여 parallel_for를사용한구현으로수정한다. 4 컴파일하고실행해본다. 3. 병렬실행시간은몇초인가? 4. 속도는몇배증가했는가? 글로벌활용사례와함께하는 TBB 도입전략 49

병렬알고리즘 : parallel_for 사용법 // TBB를위한포함 #include <tbb/parallel_for.h> #include <tbb/blocked_range.h> #include <tbb/tick_count.h> using namespace tbb; void ParallelCalculation(float a[], int n) { parallel_for( blocked_range<int>(0, n, 1000), MyTask(a) ); } 글로벌활용사례와함께하는 TBB 도입전략 50

병렬알고리즘 : parallel_reduce 에사용할태스크 class MyTask { private: float* my_data; public: float sum; void operator()(const blocked_range<size_t>& r) { float* a = my_data; for (size_t i = r.begin(); i!= r.end(); ++i) sum += MyCalculation(a[i]); MyCalulation(a[i]); } const MyTask(MyTask& x, split) : my_data(x.my_data), sum(0) { } MyTask(float a[]) : my_data(a), sum(0) { } }; void join(const MyTask& y) { sum += y.sum; } 글로벌활용사례와함께하는 TBB 도입전략 51

병렬알고리즘 : parallel_reduce 사용법 #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 도입전략 52

PI 계산하기 설명 수치적분법을사용하여 PI(3.141592 ) 의근사값을직렬및병렬로계산하고, parallel_reduce 의사용법을익힌다. 0.1 π = 0 1 4 1 + x 2 0.5 0.4 0.4 0.3 0.3 0.2 0.2 0.1 0.1 0.0 A 4 간격 = 0.1 4 1 + 0.35 2 부분면적 A 4 = 0.1 ⅹ 4 1+0.35 2 0.05 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85 0.95 전체면적 A = A 0 + A 1 + + A 9 = 0.1 ⅹ 4 1+0.05 2 + 0.1 ⅹ 4 1+0.15 2 + + 0.1 ⅹ 4 1+0.95 2 = 3.142426 글로벌활용사례와함께하는 TBB 도입전략 53

병렬알고리즘 : parallel_invoke 사용법 설명 여러함수들을한꺼번에병렬로실행하게해주는템플릿함수역할을한다! 포함 #include <tbb/parallel_invoke.h> 예제 A(), B(), C() 함수를병렬로실행한다. #include "tbb/parallel_invoke.h" using namespace tbb; class MyFunctor { int arg; public: MyFunctor(int a) : arg(a) {} void operator()() const { // Do Something! } }; void RunFunctionsInParallel() { MyFunctor A(1); MyFunctor B(2); MyFunctor C(3); tbb::parallel_invoke(a, B, C); } 글로벌활용사례와함께하는 TBB 도입전략 54

Divide-Conquer ( 분할정복 ) 패턴에사용할태스크 class MyTask: public task { public: const long n; long* const sum; MyTask(long n_, long* sum_) : n(n_), sum(sum_) {} task* execute() // 가상함수 task::execute의중복정의 { if (n < CutOff) { *sum = DoCalculation(n); } else { long x, y; MyTask& a = *new(allocate_child()) MyTask(n - 1, &x); MyTask& b = *new(allocate_child()) MyTask(n - 2, &y); set_ref_count(3); // 3 = 2개의자식 + 1개의대기 (wait) 참조자설정 } }; spawn(b); spawn_and_wait_for_all(a); *sum = x + y; } return NULL; 두개의자식생성 ( 재귀 ) 자식들을실행 A 는실행후다른자식들이모두완료될때까지기다림 ( 동기화 ) 글로벌활용사례와함께하는 TBB 도입전략 55

태스크스포닝 spawn 물고기가알을낳다 작업분해를구현하기위해 자식태스크가생성되는것을 물고기가알을낳는것이비유! 병렬화개념을위해단순히 create 가아닌 spawn 을사용한것임. 낳는다 가아닌 스포닝되었다 라고번역! 글로벌활용사례와함께하는 TBB 도입전략 56

C# 에서 TBB 를이용할수있을까요?

Q & A

감사합니다! C++ 개발자를위한하이퍼포먼스개발전략 글로벌활용사례와함께하는 TBB 도입전략 문의 : changjay@hanmail.net