SlideShare une entreprise Scribd logo
1  sur  18
병렬 프로그래밍 소개Intel Threading Building Block  2011. 06. 11 아꿈사스터디( http://andstudy.com ) 윤석윤( seedyoon@EyaSoft.co.kr )
개요 병렬화의 이유 병렬화의 문제점 TBB 설계 목표 TBB의 주요 기능 참고 이 문서는 TBB에 대하여 좋은 자료를 만들어  주신 분들의 PT 내용을 수집하여 만든 것 입니다.  간략한 소개가 목적이며, 자세한 내용 및 더 나은  설명은 참고 세션에 있는 자료들에서 찾아 봐주시길 바랍니다.
개요 병렬화의 이유 병렬화의 문제점 TBB 설계 목표 TBB의 주요 기능 참고
병렬화의 이유 새로운 반도체 소자가 나오기 전까지는 더 이상 클럭 속도를 높이기 힘들다- 무어의 법칙의 한계 -  Multi-core에서 Many-core 시대로 바뀌고 있다. ( 3~4년 내에 데스크탑 코어는 60개 까지 늘어날 것이다 ) 빠른 처리속도, 빠른 처리속도, 빠른 처리 속도를 얻기 위해서
병렬화의 이유
병렬화의 문제점 공유자원과 이벤트가 뒤섞인 상태 Data Race Dead Lock 잘못된 동기화 Context Switching 비용 False Sharing ABA 문제
TBB 설계 목표 추상화 병렬화 가능한 곳을 공략하자 Core의 개수를 신경쓰지 말자 쓰레드를 직접 건드리지 말자 가능한 곳에 묵시적 병렬성 명시적 병렬성 Thread가 아닌 Task 안전성 보장 강화 프로그래머가 쓰레드가 아닌 “병렬적 사고”에 더 신경 써야 한다
TBB의 주요 기능 일반 병렬처리에서 사용할 수 있는 풍부한 기능 C++ 라이브러리 독립적 컴파일러 C++ generic Programming 병렬 테스크 Thread가 아닌 Task WorkStealing을 이용한 부하 분산 병렬 알고리듬 공통적인 병렬 패턴, 효율적 실행 Memory Allocation False Sharing / 성능 향상 병렬 처리를 위해 고안됨 Container STL 식 컨테이너, 사용자 잠금 장치가 필요 없음( ABA 문제가 해결된 컨테이너 ) 동기화 장치 Mutex / atomic operation
TBB의 주요 기능 http://software.intel.com/en-us/blogs/2008/12/16/compare-windows-threads-openmp-intel-threading-building-blocks-for-parallelprogramming
TBB의 주요 기능 조정성 있는 메모리 할당자 scalable_malloc scalable_free scalable_realloc scalable_calloc scalable_allocator cache_aligned_allocator zero_allocator 상호 배제 뮤텍스 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 기본 알고리즘 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 태스크 스케줄러 타이밍
TBB의 주요 기능 Task 병렬화 될 작업 단위 (raw thread 대신 사용) C++ 함수 객체(functor, function object)로 정의 테스크에 대한 정확한 이해를 위한 두가지 선행 지식 스레드 추상화 직접 스레드를 생성하고 일감을 효율적으로 분배하고 관리하는 복잡함을 뒤에 감추는 논리적 접근 함수 객체 평소에 익숙하지 못할 경우 TBB 테스크를이해하는데에 장애가 될 수 있음
TBB의 주요 기능 Task Scheduler 테스크스케쥴러가Blocked Range라는 Range  객체를 통해 테스크를 각 코어에 분배(Work Stealing) 병렬 프로그래밍에서 각 스레드에게균형있게 작업량을 주는 것이 중요 Parallel_for와 같은 TBB 알고리듬은테스크스케쥴러에 기반을 두고 실행 TBB는 생성될 개별 테스크들의 개수를 런타임에 결정, Range 객체를 통해 전체 범위를 재귀적으로 분할하여 분할된 하위 범위를 생성된 테스크에 할당하고 실제 스레드에 잘 들어맞도록 스케줄링 TBB는 타 스레딩 패키지처럼 직접 조정성 처리를 해 줄 필요가 없다(Scalability)
TBB의 주요 기능 #include "tbbask_scheduler_init.h“  // 헤더 파일 포함 using namespace tbb;                      // namespace 사용 int main() { task_scheduler_initinit;                 // 객체 선언     return 0; } //  소멸은 기본 소멸자가 실행시 컴파일러가 자동으로 호출
TBB의 주요 기능 Memory Allocator 매우 빠르고 효율적인 메모리 도구 C++의 기본 allocator를 바로 바꿔 줄 수도 있는 proxy 제공 STL용 allocator를 바로 바꿔 줄 수 있음 Scalable_allocator Processor 개수에 맞춰서 allocator가 만들어짐 매우 빠르다. Single thread에서도 기본 windows allocator보다 2~3배 정도 빠르다 Cache_aligned_allocator False sharing을 방지하기 위해 존재 Allocate 하는데이터 간에 cache line size 만큼 간격이 존재 Thread간 공유하는 데이터를 이 allocator로 바꿔줘야 한다.
TBB의 주요 기능
TBB의 주요 기능
TBB의 주요 기능
참고 www.threadingbuildingblocks.org 병렬화의 문제점들과 TBB 를 이용한 해결 Seed9 Games R&D 연구소 이경만(PDF) 프로그래밍의 정도 : 확장성과 신뢰성을 갖춘 응용 프로그램 제임스랜더스 인텔 국장 (PDF) TBB inAction TBB 역자 이창재 (PDF) Intel TBB를 써서 메모리 할당하기 Rein’s world(http://rein.kr/blog/archives/1817)

Contenu connexe

Tendances

NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기MinGeun Park
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Resultsmametter
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsMemory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsYoshifumi Kawai
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화Jaeseung Ha
 
게임 디자이너와 게임 서버
게임 디자이너와 게임 서버게임 디자이너와 게임 서버
게임 디자이너와 게임 서버ByungChun2
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 

Tendances (20)

Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Results
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsMemory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native Collections
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
게임 디자이너와 게임 서버
게임 디자이너와 게임 서버게임 디자이너와 게임 서버
게임 디자이너와 게임 서버
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 

En vedette

프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장SukYun Yoon
 
Windws via c/c++ chapter 6
Windws via c/c++ chapter 6Windws via c/c++ chapter 6
Windws via c/c++ chapter 6SukYun Yoon
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표sung ki choi
 
팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴GeniusYG
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장JangHyuk You
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규ChangKyu Song
 
[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍KyeongWon Koo
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것흥배 최
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화Seungmo Koo
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴예림 임
 
Deep learning with C++ - an introduction to tiny-dnn
Deep learning with C++  - an introduction to tiny-dnnDeep learning with C++  - an introduction to tiny-dnn
Deep learning with C++ - an introduction to tiny-dnnTaiga Nomi
 

En vedette (17)

프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
 
Windws via c/c++ chapter 6
Windws via c/c++ chapter 6Windws via c/c++ chapter 6
Windws via c/c++ chapter 6
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표[아꿈사/110514] 멀티코어cpu이야기 시작발표
[아꿈사/110514] 멀티코어cpu이야기 시작발표
 
팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴팩토리 메소드 패턴과 추상 팩토리 패턴
팩토리 메소드 패턴과 추상 팩토리 패턴
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
Deep learning with C++ - an introduction to tiny-dnn
Deep learning with C++  - an introduction to tiny-dnnDeep learning with C++  - an introduction to tiny-dnn
Deep learning with C++ - an introduction to tiny-dnn
 

Similaire à TBB 소개

MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작Vong Sik Kong
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍흥배 최
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSanghyuk Jung
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1연우 김
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
Chapter5 embedded storage
Chapter5 embedded storage Chapter5 embedded storage
Chapter5 embedded storage Hyun Wong Choi
 
Chapter5 embedded storage
Chapter5 embedded storage Chapter5 embedded storage
Chapter5 embedded storage Hyun Wong Choi
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영NAVER D2
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기은아 정
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQLJAEGEUN YU
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
if kakao dev 2019_Ground X_Session 04
if kakao dev 2019_Ground X_Session 04if kakao dev 2019_Ground X_Session 04
if kakao dev 2019_Ground X_Session 04Klaytn
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object poolingNam Hyeonuk
 

Similaire à TBB 소개 (20)

MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDD
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
7 8 1
7 8 17 8 1
7 8 1
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
Chapter5 embedded storage
Chapter5 embedded storage Chapter5 embedded storage
Chapter5 embedded storage
 
Chapter5 embedded storage
Chapter5 embedded storage Chapter5 embedded storage
Chapter5 embedded storage
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
if kakao dev 2019_Ground X_Session 04
if kakao dev 2019_Ground X_Session 04if kakao dev 2019_Ground X_Session 04
if kakao dev 2019_Ground X_Session 04
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 

TBB 소개

  • 1. 병렬 프로그래밍 소개Intel Threading Building Block 2011. 06. 11 아꿈사스터디( http://andstudy.com ) 윤석윤( seedyoon@EyaSoft.co.kr )
  • 2. 개요 병렬화의 이유 병렬화의 문제점 TBB 설계 목표 TBB의 주요 기능 참고 이 문서는 TBB에 대하여 좋은 자료를 만들어 주신 분들의 PT 내용을 수집하여 만든 것 입니다. 간략한 소개가 목적이며, 자세한 내용 및 더 나은 설명은 참고 세션에 있는 자료들에서 찾아 봐주시길 바랍니다.
  • 3. 개요 병렬화의 이유 병렬화의 문제점 TBB 설계 목표 TBB의 주요 기능 참고
  • 4. 병렬화의 이유 새로운 반도체 소자가 나오기 전까지는 더 이상 클럭 속도를 높이기 힘들다- 무어의 법칙의 한계 - Multi-core에서 Many-core 시대로 바뀌고 있다. ( 3~4년 내에 데스크탑 코어는 60개 까지 늘어날 것이다 ) 빠른 처리속도, 빠른 처리속도, 빠른 처리 속도를 얻기 위해서
  • 6. 병렬화의 문제점 공유자원과 이벤트가 뒤섞인 상태 Data Race Dead Lock 잘못된 동기화 Context Switching 비용 False Sharing ABA 문제
  • 7. TBB 설계 목표 추상화 병렬화 가능한 곳을 공략하자 Core의 개수를 신경쓰지 말자 쓰레드를 직접 건드리지 말자 가능한 곳에 묵시적 병렬성 명시적 병렬성 Thread가 아닌 Task 안전성 보장 강화 프로그래머가 쓰레드가 아닌 “병렬적 사고”에 더 신경 써야 한다
  • 8. TBB의 주요 기능 일반 병렬처리에서 사용할 수 있는 풍부한 기능 C++ 라이브러리 독립적 컴파일러 C++ generic Programming 병렬 테스크 Thread가 아닌 Task WorkStealing을 이용한 부하 분산 병렬 알고리듬 공통적인 병렬 패턴, 효율적 실행 Memory Allocation False Sharing / 성능 향상 병렬 처리를 위해 고안됨 Container STL 식 컨테이너, 사용자 잠금 장치가 필요 없음( ABA 문제가 해결된 컨테이너 ) 동기화 장치 Mutex / atomic operation
  • 9. TBB의 주요 기능 http://software.intel.com/en-us/blogs/2008/12/16/compare-windows-threads-openmp-intel-threading-building-blocks-for-parallelprogramming
  • 10. TBB의 주요 기능 조정성 있는 메모리 할당자 scalable_malloc scalable_free scalable_realloc scalable_calloc scalable_allocator cache_aligned_allocator zero_allocator 상호 배제 뮤텍스 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 기본 알고리즘 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 태스크 스케줄러 타이밍
  • 11. TBB의 주요 기능 Task 병렬화 될 작업 단위 (raw thread 대신 사용) C++ 함수 객체(functor, function object)로 정의 테스크에 대한 정확한 이해를 위한 두가지 선행 지식 스레드 추상화 직접 스레드를 생성하고 일감을 효율적으로 분배하고 관리하는 복잡함을 뒤에 감추는 논리적 접근 함수 객체 평소에 익숙하지 못할 경우 TBB 테스크를이해하는데에 장애가 될 수 있음
  • 12. TBB의 주요 기능 Task Scheduler 테스크스케쥴러가Blocked Range라는 Range 객체를 통해 테스크를 각 코어에 분배(Work Stealing) 병렬 프로그래밍에서 각 스레드에게균형있게 작업량을 주는 것이 중요 Parallel_for와 같은 TBB 알고리듬은테스크스케쥴러에 기반을 두고 실행 TBB는 생성될 개별 테스크들의 개수를 런타임에 결정, Range 객체를 통해 전체 범위를 재귀적으로 분할하여 분할된 하위 범위를 생성된 테스크에 할당하고 실제 스레드에 잘 들어맞도록 스케줄링 TBB는 타 스레딩 패키지처럼 직접 조정성 처리를 해 줄 필요가 없다(Scalability)
  • 13. TBB의 주요 기능 #include "tbbask_scheduler_init.h“ // 헤더 파일 포함 using namespace tbb; // namespace 사용 int main() { task_scheduler_initinit; // 객체 선언 return 0; } // 소멸은 기본 소멸자가 실행시 컴파일러가 자동으로 호출
  • 14. TBB의 주요 기능 Memory Allocator 매우 빠르고 효율적인 메모리 도구 C++의 기본 allocator를 바로 바꿔 줄 수도 있는 proxy 제공 STL용 allocator를 바로 바꿔 줄 수 있음 Scalable_allocator Processor 개수에 맞춰서 allocator가 만들어짐 매우 빠르다. Single thread에서도 기본 windows allocator보다 2~3배 정도 빠르다 Cache_aligned_allocator False sharing을 방지하기 위해 존재 Allocate 하는데이터 간에 cache line size 만큼 간격이 존재 Thread간 공유하는 데이터를 이 allocator로 바꿔줘야 한다.
  • 18. 참고 www.threadingbuildingblocks.org 병렬화의 문제점들과 TBB 를 이용한 해결 Seed9 Games R&D 연구소 이경만(PDF) 프로그래밍의 정도 : 확장성과 신뢰성을 갖춘 응용 프로그램 제임스랜더스 인텔 국장 (PDF) TBB inAction TBB 역자 이창재 (PDF) Intel TBB를 써서 메모리 할당하기 Rein’s world(http://rein.kr/blog/archives/1817)