Intel Threading Building Blocks
Intel Threading Building Blocks (znane również jako TBB) jest biblioteką szablonów C++ zaprojektowaną przez korporację Intel i przeznaczoną do tworzenia oprogramowania wykorzystującego procesory wielordzeniowe (ang. multi-core processors). Biblioteka definiuje i udostępnia struktury danych i algorytmy umożliwiające programiście uniknięcie typowych komplikacji pojawiających się podczas wykorzystywania natywnych mechanizmów obsługi wątków, takich jak wątki POSIX czy wątki Windows. Biblioteka TBB uabstrakcyjnia dostęp do wielu wątków poprzez traktowanie operacji jako zadań (tasks), które są przydzielane wybranym rdzeniom dynamicznie przez odpowiedni silnik biblioteki oraz poprzez efektywne wykorzystywanie cache'u.
Program TBB tworzy, synchronizuje i usuwa struktury zależnych zadań (tasków) w zależności od samych algorytmów. Następnie zadania są wykonywane z zachowaniem struktury zależności. To przybliża TBB do rodziny rozwiązań przeznaczonych dla programowania równoległego poprzez próbę uniezależnienia programu od samej warstwy sprzętowej.
Implementacja
TBB implementuje "task stealing" (podkradanie zadań) balansując obciążenia równolegle pracujących procesorów w celu zwiększenia efektywności wykorzystania rdzeni. Model TBB "task stealing" jest podobny do modelu "work stealing" wdrożonego w Cilk. Początkowo obciążenie zadaniami jest rozłożone proporcjonalnie na wszystkie dostępne rdzenie procesorów. Jeśli któryś z rdzeni wykona swoje zadania w chwili kiedy pozostałe nadal posiadają swoje zadania w kolejkach, TBB przekierowuje część zadań przeznaczonych początkowo dla zajętych rdzeni i przydziela je wolnemu rdzeniowi. Takie dynamiczne mechanizmy uniezależniają programistę od maszyny, pozwalając aplikacji napisanej z wykorzystaniem odpowiednich bibliotek do skalowania i wykorzystywania dostępnych procesorów bez potrzeby zmieniania kodu programu.
Zawartość biblioteki
TBB jest kolekcją komponentów przeznaczonych do programowania równoległego:
- Podstawowe algorytmy:
parallel_for
,parallel_reduce
,parallel_scan
- Zaawansowane algorytmy:
parallel_while
,parallel_do
,pipeline
,parallel_sort
- Struktura danych:
concurrent_queue
,concurrent_vector
,concurrent_hash_map
- Skalowalna alokacja pamięci:
scalable_malloc
,scalable_free
,scalable_realloc
,scalable_calloc
,scalable_allocator
,cache_aligned_allocator
- Wzajemne wykluczanie:
mutex
,spin_mutex
,queuing_mutex
,spin_rw_mutex
,queuing_rw_mutex
,recursive mutex
- Operacje jednostkowe:
fetch_and_add
,fetch_and_increment
,fetch_and_decrement
,compare_and_swap
,fetch_and_store
- Timing: portable fine grained global time stamp
- Task Scheduler: bezpośredni dostęp do kontroli kreacji i aktywacji zadań.
Historia
Wersja 1.0 została wprowadzona przez Intela 29 sierpnia 2006, rok po wprowadzeniu pierwszego procesora dual-core x86 Intela, Pentium D.
Wersja 1.1 została wprowadzona 10 kwietnia 2007. Ta wersja udostępniła auto_partitioner który daje automatyczną alternatywę dla ręcznego ustalania wielkości elementów, na które dzielone są taski. Wersję dodano do kompilatora Intel C++ 10.0 Professional Edition
Wersja 2.0 została wprowadzona 24 lipca 2007. Zawiera ona kod źródłowy oraz edycję open source project[1]. Użyta tej samej licencji open source, co w przypadku GNU Compiler Collection C++ standard library, oraz GPLv2 razem z "runtime exception" (z powodu poważnej części kodu wchodzącego w skład produktu kompilacji). TBB jest nadal dostępne w wersji komercyjnej (bez kodu źródłowego) z supportem i bez różnic funkcjonalnych w porównaniu do wersji open cource.
Wersja 2.1 została wprowadzona 22 lipca 2008. Wprowadzono funkcjonalności takie jak task-to-thread affinity, cancellation support, exception handling, oraz portable thread wrapper.
Wersja 2.2 została wprowadzona 5 sierpnia 2009. [1] Wprowadziła ona wsparcie dla funkcji lambda w C++0x.
Wersja 3.0 została wprowadzona 4 Maja 2010. Ma wiele usprawnień, z którymi można się zapoznać tutaj: (http://software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks/)
Wspierane systemy operacyjne
Komercyjna wersja 3.0 TBB wspiera Microsoft Windows (XP lub nowszy), Mac OS X (wersja 10.4.4 lub nowsza) kilka różnych typów Linux z wykorzystaniem różnych kompilatorów (Visual C++ (wersja 8.0 lub wyższa, tylko na systemach Windows), Kompilator Intel C++ (wersja 10.1 lub wyższa) lub Kolekcja kompilatorów GNU (gcc))[2]. Dodatkowo, społeczność open source TBB stworzyła patche dla SUN Solaris[3], PowerPC, Xbox 360, QNX Neutrino oraz FreeBSD.
Systemy Open Source
TBB jest dostępne we FreeBSD i zostało dołączone do dystrybucji GNU/Linux i Sun Solaris:
- Red Hat Fedora
- Novell openSUSE
- Canonical Ubuntu
- Turbolinux
- Red Flag Asianux
- Debian
- Gentoo
- Sun Solaris
- Sun OpenSolaris
Zobacz też
- Grand Central Dispatch
- Parallel computing
- List of C++ template libraries
- Algorithmic skeleton
- Concurrent Collections
- Intel Parallel Studio
- Intel Software Network (wsparcie i dyskusja)
- ↑ Thread Building Blocks
- ↑ Intel Threading Building Blocks – Release Notes Version 2.0. [dostęp 2008-04-07].
- ↑ Using Intel's Threaded Building Blocks (TBB) With Sun Studio Express. [dostęp 2008-05-08].
Bibliografia
- Reinders, James (2007, July). Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism (Paperback) Sebastopol: O'Reilly Media, ISBN 978-0-596-51480-8.
- Voss, M. (2006, October). "Demystify Scalable Parallelism with Intel Threading Building Blocks' Generic Parallel Algorithms."
- Voss, M. (2006, December). "Enable Safe, Scalable Parallelism with Intel Threading Building Blocks' Concurrent Containers."
- Hudson, R. L., B. Saha, et al. (2006, June). "McRT-Malloc: a scalable transactional memory allocator." Proceedings of the 2006 International Symposium on Memory Management. New York: ACM Press, pp. 74-83.