Intel Threading Building Blocks
Intel Threading Building Blocks (TBB) jest biblioteką szablonów C++ zaprojektowaną przez firmę Intel i przeznaczoną do tworzenia oprogramowania wykorzystującego procesory wielordzeniowe. 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 pamięci podręcznej.
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
edytujTBB 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
edytujTBB 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
- Kontenery:
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 atomowe:
fetch_and_add
,fetch_and_increment
,fetch_and_decrement
,compare_and_swap
,fetch_and_store
- Timing: mierzenie czasu
- Task Scheduler: bezpośredni dostęp do kontroli kreacji i aktywacji zadań.
Historia
edytujWersja 1.0 została wprowadzona przez Intela 29 sierpnia 2006, rok po wprowadzeniu pierwszego dwurdzeniowego procesora 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[1]. Użyta tej samej licencji open source, co w przypadku biblioteki standardowej C++ w GCC – 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) ze wsparciem technicznym i bez różnic funkcjonalnych w porównaniu do wersji otwartej.
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[2]. Wprowadziła ona wsparcie dla funkcji lambda w C++11.
Wersja 3.0 została wprowadzona 4 Maja 2010[3].
Wspierane systemy operacyjne
edytujKomercyjna wersja 3.0 TBB wspiera Microsoft Windows (XP lub nowszy), OS X (wersja 10.4.4 lub nowsza) oraz Linuksa, z wykorzystaniem Visual C++ (wersja 8.0 lub wyższa, tylko na systemach Windows), Intel C++ (wersja 10.1 lub wyższa), oraz GCC[4]. Dodatkowo, społeczność open source TBB stworzyła patche dla systemu Solaris[5], PowerPC, Xbox 360, QNX Neutrino oraz FreeBSD.
Systemy Open Source
edytujTBB jest dostępne we FreeBSD i zostało dołączone do dystrybucji GNU/Linux i Solaris:
Zobacz też
edytujPrzypisy
edytuj- ↑ Thread Building Blocks
- ↑ Intel releases version 2.2 of Threading Building Blocks – The H Open. [dostęp 2014-07-19]. (ang.).
- ↑ TBB 3.0: New (today) Version of Intel Threading Building Blocks – Intel Developer Zone. [dostęp 2014-07-19]. (ang.).
- ↑ Intel Threading Building Blocks – Release Notes Version 2.0. [dostęp 2008-04-07]. [zarchiwizowane z tego adresu (2011-07-19)].
- ↑ Using Intel's Threaded Building Blocks (TBB) With Sun Studio Express. [dostęp 2008-05-08].
Bibliografia
edytuj- 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.