Intel Threading Building Blocks

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

TBB jest dostępne we FreeBSD i zostało dołączone do dystrybucji GNU/Linux i Sun Solaris:

Zobacz też[edytuj | edytuj kod]

Przypisy

Bibliografia[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]