스레딩 빌딩 블록
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
스레딩 빌딩 블록(TBB)은 인텔에서 개발한 병렬 프로그래밍을 위한 라이브러리이며, 2006년에 처음 출시되었다. TBB는 기본 알고리즘, 고급 알고리즘, 컨테이너, 동적 메모리 할당, 상호 배제, 원자적 연산, 타이밍, 태스크 스케줄러 등 다양한 구성 요소를 제공하여 병렬 프로그래밍을 지원한다. 2021년에는 oneTBB라는 새로운 이름으로 출시되었다. TBB는 다양한 운영체제와 컴파일러를 지원하며, 워크 스틸링(work stealing) 기술을 통해 효율적인 병렬 처리를 가능하게 한다.
더 읽어볼만한 페이지
- C++ 프로그래밍 언어 계열 - C++/CLI
C++/CLI는 .NET 환경에서 관리 코드와 네이티브 코드의 혼합 사용을 위해 C++ 언어를 확장한 것으로, .NET 객체 생성, 핸들, 추적 참조 등의 구문을 제공하며 C# 등 다른 .NET 언어와의 상호 운용성을 지원한다. - C++ 프로그래밍 언어 계열 - C++/CX
C++/CX는 Windows 런타임 프로그래밍을 위해 C++ 언어를 확장한 것으로, WinRT 객체 생성에 `ref new`를 사용하고, 참조 포인터(`^`)를 활용하며, 다른 언어와의 코드 공유를 위해 메타데이터를 통해 클래스와 멤버를 노출한다. - 제네릭 프로그래밍 - 다형성 (컴퓨터 과학)
다형성은 프로그래밍 언어에서 이름이 여러 자료형에 사용되거나 객체가 여러 타입으로 취급되는 능력으로, 코드 재사용성과 유연성을 높이며 임시 다형성, 매개변수 다형성, 서브타이핑 등으로 분류되고 객체 지향 프로그래밍의 중요한 특징이며 정적, 동적 다형성으로 구현된다. - 제네릭 프로그래밍 - 표준 템플릿 라이브러리
표준 템플릿 라이브러리(STL)는 알렉산더 스테파노프의 주도로 탄생한 C++ 라이브러리로서, 제네릭 프로그래밍을 지원하기 위해 컨테이너, 반복자, 알고리즘, 함수 객체 등의 핵심 구성 요소로 이루어져 있으며, HP에서 무료로 공개한 구현을 기반으로 다양한 구현체가 존재한다. - 인텔 소프트웨어 - 타이젠
타이젠은 리눅스 재단 주도로 삼성전자와 인텔이 후원하여 개발된 리눅스 기반 오픈 소스 운영체제로, 스마트폰, 스마트 TV, 웨어러블 기기, 차량용 인포테인먼트 시스템 등 다양한 기기 플랫폼을 지원하며 삼성전자는 바다 운영체제를 통합하여 생태계를 확장했고 웨어러블 기기에서는 Wear OS로 전환되었으나 스마트 TV에서는 계속 사용되고 있다. - 인텔 소프트웨어 - 미고 (운영 체제)
미고는 인텔 모블린과 노키아 마에모 프로젝트를 통합해 개발된 리눅스 기반 오픈 소스 운영 체제로, 다양한 플랫폼 지원을 목표했으나 노키아의 전략 변경으로 타이젠으로 대체되었고, 이후 커뮤니티 개발자들에 의해 Mer 프로젝트와 Sailfish OS로 이어졌다.
스레딩 빌딩 블록 - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
이름 | 스레딩 빌딩 블록 |
원어 이름 | Threading Building Blocks |
약칭 | TBB |
종류 | 라이브러리, 프레임워크 |
개발사 | 인텔 |
프로그래밍 언어 | C++ |
지원 운영체제 | Windows, 리눅스, macOS, Android, FreeBSD, Solaris |
라이선스 | 듀얼 라이선스: 상용 / 오픈 소스 (Apache License 2.0), freeware |
웹사이트 | oneAPI Threading Building Blocks GitHub 저장소 |
최신 버전 정보 | |
최신 안정화 버전 | 2021.10.0 |
최신 안정화 버전 출시일 | 2023년 7월 25일 |
이전 버전 | 2021.8 |
이전 버전 출시일 | 2023년 2월 17일 |
2. 역사
인텔은 2006년 8월 29일에 스레딩 빌딩 블록(TBB) 1.0을 출시했다. 이후 2007년 4월 10일에는 TBB 1.1, 2007년 7월 24일에는 TBB 2.0, 2008년 7월 22일에는 TBB 2.1, 2010년 5월 4일에는 TBB 3.0, 2011년 9월 8일에는 TBB 4.0, 2012년 9월 5일에는 TBB 4.1, 2013년 9월 4일에는 TBB 4.2를 출시했다. 2021년에 인텔은 TBB의 새로운 이름인 oneTBB를 출시했다.
TBB는 병렬 프로그래밍을 위한 구성 요소들의 집합이다. 여기에는 기본 알고리즘, 고급 알고리ㅁ, 컨테이너, 동적 메모리 할당, 상호 배제, 원자적 연산, 타이밍, 태스크 스케줄러 등이 포함된다.
3. 라이브러리 구성 요소
== 기본 알고리즘 ==
기본 알고리즘에는 `parallel_for`, `parallel_reduce`, `parallel_scan` 등이 있다. `parallel_for`는 루프 반복을 병렬로 실행하고, `parallel_reduce`는 리덕션 연산(예: 합계, 곱)을 병렬로 수행하며, `parallel_scan`은 스캔 연산(prefix sum)을 병렬로 수행한다.
== 고급 알고리즘 ==
스레딩 빌딩 블록(TBB)은 병렬 프로그래밍을 위한 다양한 구성 요소를 제공한다. 고급 알고리즘에는 `parallel_pipeline`, `parallel_sort`, `parallel_while`, `parallel_do` 등이 있다.
`parallel_pipeline`은 파이프라인 처리를 병렬로 수행하며, `parallel_sort`는 정렬을 병렬로 처리한다. `parallel_while`은 조건이 만족될 때까지 반복을 병렬로 실행하고, `parallel_do`는 독립적인 작업들을 병렬로 실행한다.
TBB와 oneTBB는 모두 병렬 프로그래밍을 위한 구성요소들을 제공하며, 고급 알고리즘으로 `parallel_pipeline`와 `parallel_sort`를 제공한다. TBB는 `parallel_while`, `parallel_do`와 같은 고급 알고리즘도 제공한다.
== 컨테이너 ==
TBB와 oneTBB는 병렬 프로그래밍을 위한 구성 요소들의 집합이다. TBB는 `concurrent_queue`, `concurrent_priority_queue`, `concurrent_vector`, `concurrent_hash_map`와 같은 컨테이너를 제공한다. oneTBB는 여기에 `concurrent_unordered_map`, `concurrent_unordered_set`, `concurrent_map`, `concurrent_set`를 추가적으로 제공한다.
`concurrent_hash_map` 클래스는 STL의 map 클래스를 스레드 세이프하게 만든 것이며, `concurrent_queue` 클래스는 STL의 queue 클래스를, `concurrent_vector` 클래스는 STL의 vector 클래스를 스레드 세이프하게 만든 것이다.
== 메모리 할당 ==
TBB는 `scalable_malloc`, `scalable_free`, `scalable_realloc`, `scalable_calloc`와 같은 확장 가능한 메모리 할당 함수와 `scalable_allocator`, `cache_aligned_allocator`와 같은 확장 가능한 메모리 할당자를 제공한다. 이러한 함수 및 할당자는 병렬 프로그래밍 환경에서 메모리 할당 및 해제 성능을 향상시키는 데 사용된다.
== 상호 배제 (뮤텍스) ==
TBB와 oneTBB는 병렬 프로그래밍을 위한 구성 요소 집합으로, 상호 배제를 위한 다양한 뮤텍스(mutex)를 제공한다. 이들은 공유 자원에 대한 동시 접근을 제어하여 데이터 경쟁을 방지하고 프로그램의 안정성을 보장한다.
제공되는 뮤텍스는 다음과 같다:
== 원자적 연산 ==
TBB는 `fetch_and_add`, `fetch_and_increment`, `fetch_and_decrement`, `compare_and_swap`, `fetch_and_store`와 같은 원자적 연산 함수를 제공한다. 이러한 함수들은 병렬 프로그래밍에서 상호 배제를 구현하는 데 사용된다.
== 타이밍 ==
TBB와 oneTBB는 포팅 가능하고 정밀한 전역 시간표(타이밍) 기능을 제공한다. 이는 병렬 프로그래밍에서 시간을 측정하고 관리하는 데 사용된다.
== 태스크 스케줄러 ==
스레딩 빌딩 블록(TBB)는 태스크 스케줄러를 통해 태스크의 생성 및 활성화를 제어할 수 있도록 한다. oneTBB는 작업 스케줄러를 통하여 작업의 생성 및 활성화를 제어하는 직접 액세스를 제공한다.
3. 1. 기본 알고리즘
TBB는 병렬 프로그래밍을 위한 구성 요소들의 집합이다. 여기에는 기본 알고리즘, 고급 알고리ㅁ, 컨테이너, 동적 메모리 할당, 상호 배제, 원자적 연산, 타이밍, 태스크 스케줄러 등이 포함된다.
기본 알고리즘에는 `parallel_for`, `parallel_reduce`, `parallel_scan` 등이 있다. `parallel_for`는 루프 반복을 병렬로 실행하고, `parallel_reduce`는 리덕션 연산(예: 합계, 곱)을 병렬로 수행하며, `parallel_scan`은 스캔 연산(prefix sum)을 병렬로 수행한다.
3. 2. 고급 알고리즘
스레딩 빌딩 블록(TBB)은 병렬 프로그래밍을 위한 다양한 구성 요소를 제공한다. 고급 알고리즘에는 `parallel_pipeline`, `parallel_sort`, `parallel_while`, `parallel_do` 등이 있다.
`parallel_pipeline`은 파이프라인 처리를 병렬로 수행하며, `parallel_sort`는 정렬을 병렬로 처리한다. `parallel_while`은 조건이 만족될 때까지 반복을 병렬로 실행하고, `parallel_do`는 독립적인 작업들을 병렬로 실행한다.
TBB와 oneTBB는 모두 병렬 프로그래밍을 위한 구성요소들을 제공하며, 고급 알고리즘으로 `parallel_pipeline`와 `parallel_sort`를 제공한다. TBB는 `parallel_while`, `parallel_do`와 같은 고급 알고리즘도 제공한다.
3. 3. 컨테이너
TBB와 oneTBB는 병렬 프로그래밍을 위한 구성 요소들의 집합이다. TBB는 `concurrent_queue`, `concurrent_priority_queue`, `concurrent_vector`, `concurrent_hash_map`와 같은 컨테이너를 제공한다. oneTBB는 여기에 `concurrent_unordered_map`, `concurrent_unordered_set`, `concurrent_map`, `concurrent_set`를 추가적으로 제공한다.
`concurrent_hash_map` 클래스는 STL의 map 클래스를 스레드 세이프하게 만든 것이며, `concurrent_queue` 클래스는 STL의 queue 클래스를, `concurrent_vector` 클래스는 STL의 vector 클래스를 스레드 세이프하게 만든 것이다.
3. 4. 메모리 할당
TBB는 `scalable_malloc`, `scalable_free`, `scalable_realloc`, `scalable_calloc`와 같은 확장 가능한 메모리 할당 함수와 `scalable_allocator`, `cache_aligned_allocator`와 같은 확장 가능한 메모리 할당자를 제공한다. 이러한 함수 및 할당자는 병렬 프로그래밍 환경에서 메모리 할당 및 해제 성능을 향상시키는 데 사용된다.
3. 5. 상호 배제 (뮤텍스)
TBB와 oneTBB는 병렬 프로그래밍을 위한 구성 요소 집합으로, 상호 배제를 위한 다양한 뮤텍스(mutex)를 제공한다. 이들은 공유 자원에 대한 동시 접근을 제어하여 데이터 경쟁을 방지하고 프로그램의 안정성을 보장한다.
제공되는 뮤텍스는 다음과 같다:3. 6. 원자적 연산
TBB는 `fetch_and_add`, `fetch_and_increment`, `fetch_and_decrement`, `compare_and_swap`, `fetch_and_store`와 같은 원자적 연산 함수를 제공한다. 이러한 함수들은 병렬 프로그래밍에서 상호 배제를 구현하는 데 사용된다.
3. 7. 타이밍
TBB와 oneTBB는 포팅 가능하고 정밀한 전역 시간표(타이밍) 기능을 제공한다. 이는 병렬 프로그래밍에서 시간을 측정하고 관리하는 데 사용된다.
3. 8. 태스크 스케줄러
스레딩 빌딩 블록(TBB)는 태스크 스케줄러를 통해 태스크의 생성 및 활성화를 제어할 수 있도록 한다. oneTBB는 작업 스케줄러를 통하여 작업의 생성 및 활성화를 제어하는 직접 액세스를 제공한다.
4. 지원 시스템 및 환경
TBB는 3.0 기준으로 마이크로소프트 윈도우(XP 이상), OS X(버전 10.5.8 이상), 리눅스를 지원하며, 비주얼 C++(윈도 전용이며 버전 8.0 이상), 인텔 C++ 컴파일러(버전 11.1 이상), GCC를 사용할 수 있다.[13] 또, TBB 오픈 소스 커뮤니티는 썬 솔라리스[14], 파워PC, 엑스박스 360, QNX 뉴트리노, FreeBSD를 위한 패치를 제작하여 기여하고 있다.
2010년 3월 기준으로, TBB는 FreeBSD에서 이용할 수 있으며 다음의 GNU/리눅스 및 썬 솔라리스 배포판에 포함되고 있다:
4. 1. 지원 운영체제
스레딩 빌딩 블록(TBB)은 3.0 기준으로 마이크로소프트 윈도우(XP 이상), OS X(버전 10.5.8 이상) 및 macOS, 리눅스를 지원하며, 비주얼 C++(윈도 전용이며 버전 8.0 이상), 인텔 C++ 컴파일러(버전 11.1 이상), GCC를 사용할 수 있다.[13] TBB 오픈 소스 커뮤니티는 솔라리스[14], 파워PC, 엑스박스 360, QNX 뉴트리노, FreeBSD를 위한 패치를 제작하여 기여하고 있다. 또한, Android도 지원한다.2010년 3월 기준으로, TBB는 FreeBSD에서 이용할 수 있으며 다음의 GNU/리눅스 및 썬 솔라리스 배포판에 포함되고 있다.
4. 2. 지원 컴파일러
스레딩 빌딩 블록(TBB)는 3.0 기준으로 마이크로소프트 윈도우(XP 이상), OS X(버전 10.5.8 이상), 리눅스를 지원하며, 다음과 같은 컴파일러를 사용할 수 있다.[13]- 비주얼 C++ (윈도 전용, 버전 8.0 이상)
- 인텔 C++ 컴파일러 (버전 11.1 이상)
- GCC
TBB 오픈 소스 커뮤니티는 솔라리스[14], 파워PC, 엑스박스 360, QNX 뉴트리노, FreeBSD를 위한 패치를 제작하여 기여하고 있다.
2010년 3월 기준으로, TBB는 FreeBSD에서 이용할 수 있으며 레드햇 페도라, 노벨 오픈수세, 우분투, 아치 리눅스, 터보리눅스, 아시아눅스, 데비안, 젠투 리눅스, 썬 솔라리스, 썬 오픈솔라리스와 같은 GNU/리눅스 및 썬 솔라리스 배포판에 포함되고 있다.
4. 3. 지원되는 GNU/리눅스 및 솔라리스 배포판
2010년 3월 기준으로, TBB는 FreeBSD에서 이용할 수 있으며 다음의 GNU/리눅스 및 썬 솔라리스 배포판에 포함되고 있다.[14]4. 4. 하드웨어 (권장)
TBB는 3.0 기준으로 마이크로소프트 윈도우 (XP 이상), OS X (버전 10.5.8 이상), 리눅스를 지원하며, 비주얼 C++(윈도 전용이며 버전 8.0 이상), 인텔 C++ 컴파일러(버전 11.1 이상), GCC를 사용할 수 있다.[13] 또, TBB 오픈 소스 커뮤니티는 썬 솔라리스[14], 파워PC, 엑스박스 360, QNX 뉴트리노, FreeBSD를 위한 패치를 제작하여 기여하고 있다.2010년 3월 기준으로, TBB는 FreeBSD에서 이용할 수 있으며 레드햇 페도라, 노벨 오픈수세, 우분투, 아치 리눅스, 터보리눅스, 아시아눅스, 데비안, 젠투 리눅스, 썬 솔라리스, 썬 오픈솔라리스 와 같은 GNU/리눅스 및 썬 솔라리스 배포판에 포함되고 있다.
지원되는 프로세서는 Intel Core 프로세서 제품군, Intel Xeon 프로세서 제품군, Intel Xeon Phi 프로세서 제품군이다.
4. 5. 하드웨어 (지원)
Intel Pentium 4 프로세서 패밀리,Intel Xeon Phi 코프로세서,Intel Atom 프로세서 패밀리,비 Intel의 상기 호환 프로세서에서 스레딩 빌딩 블록이 지원된다.5. 특징 및 작동 방식
5. 1. 작업 기반 병렬 처리
5. 2. 워크 스틸링 (Work Stealing)
oneTBB는 사용 가능한 처리 코어 간에 병렬 워크로드를 분산하여 코어 활용도를 높이고 스케일링을 향상시키기 위해 워크 스틸링을 구현한다.[3] 처음에 워크로드는 사용 가능한 프로세서 코어에 균등하게 분배된다. 하나의 코어가 작업을 완료했지만 다른 코어에 여전히 상당한 양의 작업이 큐에 남아 있는 경우, oneTBB는 작업 중인 코어 중 하나에서 유휴 코어로 일부 작업을 재할당한다.[3] 이 동적 기능은 프로그래머와 머신을 분리하여, 라이브러리를 사용하여 작성된 애플리케이션이 소스 코드나 실행 프로그램 파일을 변경하지 않고도 사용 가능한 처리 코어를 활용하도록 확장될 수 있도록 한다. 2008년 TBB의 워크 스틸링 구현에 대한 프린스턴 대학교의 연구자들의 평가에 의하면, 32코어 시스템에서 특정 벤치마크를 실행할 때 대규모 프로세서 코어 수에서 최적이 아니며, 최대 47%의 컴퓨팅 시간을 스케줄링 오버헤드에 소모하는 것을 발견했다.[3]5. 3. 템플릿 기반 설계
5. 4. 이식성
6. 한계
참조
[1]
웹사이트
oneAPI Threading Building Blocks Github Releases
https://github.com/o[...]
[2]
웹사이트
No Cost Options for Intel Support yourself, Royalty-Free
https://software.int[...]
[3]
간행물
Characterizing and improving the performance of Intel Threading Building Blocks
http://www.iiswc.org[...]
[4]
웹사이트
Intel Threading Building Blocks Commercial Version Homepage
https://software.int[...]
[5]
간행물
Parallel Programming Must Be Deterministic by Default
https://www.usenix.o[...]
[6]
웹사이트
Releases · oneapi-src/oneTBB
https://github.com/o[...]
2023-10-04
[7]
문서
oneTBB/SYSTEM_REQUIREMENTS.md at master · oneapi-src/oneTBB
https://github.com/o[...]
[8]
문서
oneapi-src/oneTBB at 4.4.6
https://github.com/o[...]
[9]
문서
oneapi-src/oneTBB at 2017
https://github.com/o[...]
[10]
문서
インテル® Parallel Studio XE 評価ガイド - インテル® TBB による効率良いスレッド化
https://jp.xlsoft.co[...]
[11]
문서
Intel(R) Threading Building Blocks - Release Notes Version 2018
https://software.int[...]
[12]
웹인용
oneAPI Threading Building Blocks Github Releases
https://github.com/o[...]
[13]
웹인용
Intel Threading Building Blocks - Release Notes Version 3.0
http://software.inte[...]
2011-08-08
[14]
웹인용
Using Intel's Threaded Building Blocks (TBB) With Sun Studio Express
http://developers.su[...]
2008-05-08
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com