병렬 프로그래밍 소개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 RaceDead Lock잘못된 동기화Context Switching 비용False SharingABA 문제
TBB 설계 목표추상화병렬화 가능한 곳을 공략하자Core의 개수를 신경쓰지 말자쓰레드를 직접 건드리지 말자가능한 곳에 묵시적 병렬성명시적 병렬성Thread가 아닌 Task안전성 보장 강화프로그래머가 쓰레드가 아닌 “병렬적 사고”에 더 신경 써야 한다
TBB의 주요 기능일반 병렬처리에서 사용할 수 있는 풍부한 기능C++ 라이브러리독립적 컴파일러C++ generic Programming병렬 테스크Thread가 아닌 TaskWorkStealing을 이용한 부하 분산병렬 알고리듬공통적인 병렬 패턴, 효율적 실행Memory AllocationFalse Sharing / 성능 향상병렬 처리를 위해 고안됨ContainerSTL 식 컨테이너,사용자 잠금 장치가 필요 없음( 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_mallocscalable_freescalable_reallocscalable_callocscalable_allocatorcache_aligned_allocatorzero_allocator상호 배제뮤텍스spin_mutexqueuing_mutexspin_rw_mutexqueuing_rw_mutexrecursive_mutexnull_mutexnull_rw_mutex원자적 연산fetch_and_addfetch_and_swapfetch_and_storefetch_and_incrementfetch_and_decrement기본 알고리즘parallel_forparallel_for_eachparallel_reduceparallel_scan고급 알고리즘Parallel_whileParallel_doParallel_preorderPipelineParallel_pipelineParallel_sortParallel_invoke컨테이너concurrent_queueconcurrent_vectorconcurrent_hash_mapconcurrent_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 "tbb\task_scheduler_init.h“  // 헤더 파일 포함using namespace tbb;                      // namespace 사용int main(){task_scheduler_initinit;                 // 객체 선언    return 0;}//  소멸은 기본 소멸자가 실행시 컴파일러가 자동으로 호출
TBB의 주요 기능Memory Allocator매우 빠르고 효율적인 메모리 도구C++의 기본 allocator를 바로 바꿔 줄 수도 있는 proxy 제공STL용 allocator를 바로 바꿔 줄 수 있음Scalable_allocatorProcessor 개수에 맞춰서 allocator가 만들어짐매우 빠르다. Single thread에서도 기본 windows allocator보다 2~3배 정도 빠르다Cache_aligned_allocatorFalse sharing을 방지하기 위해 존재Allocate 하는데이터 간에 cache line size 만큼 간격이 존재Thread간 공유하는 데이터를 이 allocator로 바꿔줘야 한다.
TBB의 주요 기능
TBB의 주요 기능
TBB의 주요 기능
참고www.threadingbuildingblocks.org병렬화의 문제점들과 TBB 를 이용한 해결Seed9 Games R&D 연구소 이경만(PDF)프로그래밍의 정도 : 확장성과 신뢰성을 갖춘 응용 프로그램제임스랜더스 인텔 국장 (PDF)TBB inActionTBB 역자 이창재 (PDF)Intel TBB를 써서 메모리 할당하기Rein’s world(http://rein.kr/blog/archives/1817)

TBB 소개

  • 1.
    병렬 프로그래밍 소개IntelThreading 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개 까지 늘어날 것이다 )빠른 처리속도, 빠른 처리속도, 빠른 처리 속도를 얻기 위해서
  • 5.
  • 6.
    병렬화의 문제점공유자원과 이벤트가뒤섞인 상태Data RaceDead Lock잘못된 동기화Context Switching 비용False SharingABA 문제
  • 7.
    TBB 설계 목표추상화병렬화가능한 곳을 공략하자Core의 개수를 신경쓰지 말자쓰레드를 직접 건드리지 말자가능한 곳에 묵시적 병렬성명시적 병렬성Thread가 아닌 Task안전성 보장 강화프로그래머가 쓰레드가 아닌 “병렬적 사고”에 더 신경 써야 한다
  • 8.
    TBB의 주요 기능일반병렬처리에서 사용할 수 있는 풍부한 기능C++ 라이브러리독립적 컴파일러C++ generic Programming병렬 테스크Thread가 아닌 TaskWorkStealing을 이용한 부하 분산병렬 알고리듬공통적인 병렬 패턴, 효율적 실행Memory AllocationFalse Sharing / 성능 향상병렬 처리를 위해 고안됨ContainerSTL 식 컨테이너,사용자 잠금 장치가 필요 없음( ABA 문제가 해결된 컨테이너 )동기화 장치Mutex / atomic operation
  • 9.
  • 10.
    TBB의 주요 기능조정성있는 메모리 할당자scalable_mallocscalable_freescalable_reallocscalable_callocscalable_allocatorcache_aligned_allocatorzero_allocator상호 배제뮤텍스spin_mutexqueuing_mutexspin_rw_mutexqueuing_rw_mutexrecursive_mutexnull_mutexnull_rw_mutex원자적 연산fetch_and_addfetch_and_swapfetch_and_storefetch_and_incrementfetch_and_decrement기본 알고리즘parallel_forparallel_for_eachparallel_reduceparallel_scan고급 알고리즘Parallel_whileParallel_doParallel_preorderPipelineParallel_pipelineParallel_sortParallel_invoke컨테이너concurrent_queueconcurrent_vectorconcurrent_hash_mapconcurrent_unordered_map태스크 스케줄러타이밍
  • 11.
    TBB의 주요 기능Task병렬화될 작업 단위 (raw thread 대신 사용)C++ 함수 객체(functor, function object)로 정의테스크에 대한 정확한 이해를 위한 두가지 선행 지식스레드 추상화직접 스레드를 생성하고 일감을 효율적으로 분배하고 관리하는 복잡함을 뒤에 감추는 논리적 접근함수 객체평소에 익숙하지 못할 경우 TBB 테스크를이해하는데에 장애가 될 수 있음
  • 12.
    TBB의 주요 기능TaskScheduler테스크스케쥴러가Blocked Range라는 Range 객체를 통해 테스크를 각 코어에 분배(Work Stealing)병렬 프로그래밍에서 각 스레드에게균형있게 작업량을 주는 것이 중요Parallel_for와 같은 TBB 알고리듬은테스크스케쥴러에 기반을 두고 실행TBB는 생성될 개별 테스크들의 개수를 런타임에 결정, Range 객체를 통해 전체 범위를 재귀적으로 분할하여 분할된 하위 범위를 생성된 테스크에 할당하고 실제 스레드에 잘 들어맞도록 스케줄링TBB는 타 스레딩 패키지처럼 직접 조정성 처리를 해 줄 필요가 없다(Scalability)
  • 13.
    TBB의 주요 기능#include"tbb\task_scheduler_init.h“ // 헤더 파일 포함using namespace tbb; // namespace 사용int main(){task_scheduler_initinit; // 객체 선언 return 0;}// 소멸은 기본 소멸자가 실행시 컴파일러가 자동으로 호출
  • 14.
    TBB의 주요 기능MemoryAllocator매우 빠르고 효율적인 메모리 도구C++의 기본 allocator를 바로 바꿔 줄 수도 있는 proxy 제공STL용 allocator를 바로 바꿔 줄 수 있음Scalable_allocatorProcessor 개수에 맞춰서 allocator가 만들어짐매우 빠르다. Single thread에서도 기본 windows allocator보다 2~3배 정도 빠르다Cache_aligned_allocatorFalse sharing을 방지하기 위해 존재Allocate 하는데이터 간에 cache line size 만큼 간격이 존재Thread간 공유하는 데이터를 이 allocator로 바꿔줘야 한다.
  • 15.
  • 16.
  • 17.
  • 18.
    참고www.threadingbuildingblocks.org병렬화의 문제점들과 TBB를 이용한 해결Seed9 Games R&D 연구소 이경만(PDF)프로그래밍의 정도 : 확장성과 신뢰성을 갖춘 응용 프로그램제임스랜더스 인텔 국장 (PDF)TBB inActionTBB 역자 이창재 (PDF)Intel TBB를 써서 메모리 할당하기Rein’s world(http://rein.kr/blog/archives/1817)