TBB 소개

6,480 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,480
On SlideShare
0
From Embeds
0
Number of Embeds
593
Actions
Shares
0
Downloads
0
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

TBB 소개

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

×