Intel Threading Building Blocks (також відома як TBB) — кросплатформна бібліотека шаблонів С++, розроблена компанією Intel для паралельного програмування. Бібліотека містить алгоритми і структури даних, що дозволяють програмісту уникнути багатьох складнощів, що виникають при використанні традиційних реалізацій потоків, таких як POSIX Threads, Windows threads або Boost Threads, в яких створюються окремі потоки виконання, що синхронізуються і зупиняються вручну. Бібліотека TBB абстрагує доступ до окремих потоків. Всі операції трактуються як «задачі», які динамічно розподіляються між ядрами процесора. Крім того, досягається ефективне використання кешу. Програма, написана з використанням TBB, створює, синхронізує і руйнує графи залежностей завдань відповідно до алгоритму. Потім завдання виконуються відповідно до залежностей. Цей підхід дозволяє програмувати паралельні алгоритми на високому рівні, абстрагуючись від деталей архітектури конкретної машини.
Тип | бібліотека (програмування) |
---|---|
Розробник | Intel |
Стабільний випуск | 4.4 (25 серпня 2015 ) |
Версії | 2019 (12 вересня 2018)[3][4] |
Операційна система | Крос-платформова |
Мова програмування | |
Ліцензія | Подвійна: комерційна і GPL 2.0 |
Репозиторій | github.com/oneapi-src/oneTBB |
Вебсайт | threadingbuildingblocks.org |
Вміст бібліотеки
TBB це колекція компонент для паралельного програмування:
- Базові алгоритми:
parallel_for
,parallel_reduce
,parallel_scan
- Розвинуті алгоритми:
parallel_while
,parallel_do
,parallel_pipeline
,parallel_sort
- :
concurrent_queue
,concurrent_priority_queue
,concurrent_vector
,concurrent_hash_map
- Виділення пам'яті:
scalable_malloc
,scalable_free
,scalable_realloc
,scalable_calloc
,scalable_allocator
,cache_aligned_allocator
- Взаємне виключення:
mutex
,spin_mutex
,queuing_mutex
,spin_rw_mutex
,queuing_rw_mutex
,recursive_mutex
- Атомарні операції:
fetch_and_add
,fetch_and_increment
,fetch_and_decrement
,compare_and_swap
,fetch_and_store
- Час: платформонезалежна реалізація дрібногранульованої глобальної
- Планування завдань: безпосередній доступ до контролювання створення та виконання завдань
Історія
Версія 1.0 була випущена фірмою Інтел 29 серпня 2006, через рік після випуску свого першого двоядерного процесора Pentium D.
Версія 1.1 була випущена 10 квітня 2007. 5 червня бібліотека була додана до складу 10.0 Professional Edition.
Версія 2.0 була випущена 24 липня 2007. Був відкритий вихідний код бібліотеки і був створений проект з відкритим вихідним кодом з ліцензією GPLv2. Бібліотека також доступна під комерційною ліцензією без вихідного коду, але з доступом до технічної підтримки. Функціональність обох бібліотек однакова.
Версія 2.1 була випущена 22 липня 2008.
Версія 2.2 була випущена 5 серпня 2009 року. Вона включає в себе підтримку лямбда-функцій .
Версія 3.0 була випущена 4 травня 2010. Список вдосконалень
Версія 4.0 була випущена 8 вересня 2011. Був доданий новий функціонал, див.
Починаючи з версії 3.0 проміжні оновлення TBB виходять у форматі TBB X.0 update N, наприклад TBB 4.0 update 2.
Приклади використання
У цій програмі елементи масиву обробляються функцією Calculate паралельно.
// Підключаються необхідні заголовні файли #include “tbb/blocked_range.h” #include “tbb/parallel_for.h” // Кількість елементів вектора const int SIZE = 10000000; // Клас-обробник class CalculationTask { double *myArray; public: // Оператор () виконується над діапазоном з простору ітерацій void operator()(const tbb::blocked_range<int> &r) const { for (int i = r.begin(); i != r.end(); i++) Calculate(myArray[i]); } // Конструктор CalculationTask (double *a) : myArray(a) { } }; int main() { double *myArray = new double[SIZE]; // Запуск паралельного алгоритму for tbb::parallel_for(tbb::blocked_range<int>(0, SIZE), CalculationTask(myArray)); delete[] myArray; return 0; }
З використанням лямбда-функцій з С ++ 11:
// Підключаються необхідні заголовні файли #include “tbb/blocked_range.h” #include “tbb/parallel_for.h” // Кількість елементів вектора const int SIZE = 10000000; int main() { double *myArray = new double[SIZE]; // Запуск паралельного алгоритму for tbb::parallel_for(tbb::blocked_range<int>(0, SIZE), // Лямбда-функція [myArray](const tbb::blocked_range<int> &r) { for (int i = r.begin(); i != r.end(); i++) Calculate(myArray[i]); }); delete[] myArray; return 0; }
Підтримувані операційні системи
Комерційна версія TBB 4.0 підтримує Microsoft Windows (XP або вище), Mac OS X (версія 10.5.8 або вище) і Linux, використовуючи різні компілятори ( (версія 8.0 або вище, тільки на Windows), (версія 11.1 або вище) або GNU Compiler Collection (gcc, версія 3.4 і вище)). Крім того, співтовариство відкритої версії TBB відправило її на Sun Solaris, PowerPC, Xbox 360, QNX Neutrino, і FreeBSD.
Примітки
- . Архів оригіналу за 3 березня 2016. Процитовано 14 вересня 2015.
- . Архів оригіналу за 15 жовтня 2015. Процитовано 14 вересня 2015.
- Release 2019 — 2018.
- Release 2019 — 2018.
- . Архів оригіналу за 2 березня 2009. Процитовано 26 травня 2015.
- . Архів оригіналу за 27 травня 2015. Процитовано 28 травня 2015.
- Threading Building Blocks [ 30 травня 2015 у Wayback Machine.]
Література
- Reinders, James (2007, July). Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism [ 31 серпня 2011 у Wayback Machine.] (Paperback) Sebastopol: O'Reilly Media, .
- Voss, M. (2006, October). «Demystify Scalable Parallelism with Intel Threading Building Blocks' Generic Parallel Algorithms.» [ 5 лютого 2012 у Wayback Machine.]
- Voss, M. (2006, December). «Enable Safe, Scalable Parallelism with Intel Threading Building Blocks' Concurrent Containers.» [ 5 лютого 2012 у Wayback Machine.]
- Hudson, R. L., B. Saha, et al. (2006, June). «McRT-Malloc: a scalable transactional memory allocator.» [ 14 жовтня 2008 у Wayback Machine.] Proceedings of the 2006 International Symposium on Memory Management. New York: ACM Press, pp. 74-83.
Див. також
Посилання
- http://www.threadingbuildingblocks.org [ 5 серпня 2019 у Wayback Machine.] — сайт спільноти.
- http://software.intel.com/ru-ru/articles/intel-tbb/ [ 28 грудня 2011 у Wayback Machine.] — опис бібліотеки російською на сайті Інтел.
- http://www.slideshare.net/yandex/ss-33845143 [ 26 травня 2015 у Wayback Machine.] - паралелізм в С++ (оглядова презентація)
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Ця стаття має кілька недоліків. Будь ласка, допоможіть удосконалити її або обговоріть ці проблеми на . reflessisbn |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Intel Threading Building Blocks takozh vidoma yak TBB krosplatformna biblioteka shabloniv S rozroblena kompaniyeyu Intel dlya paralelnogo programuvannya Biblioteka mistit algoritmi i strukturi danih sho dozvolyayut programistu uniknuti bagatoh skladnoshiv sho vinikayut pri vikoristanni tradicijnih realizacij potokiv takih yak POSIX Threads Windows threads abo Boost Threads v yakih stvoryuyutsya okremi potoki vikonannya sho sinhronizuyutsya i zupinyayutsya vruchnu Biblioteka TBB abstraguye dostup do okremih potokiv Vsi operaciyi traktuyutsya yak zadachi yaki dinamichno rozpodilyayutsya mizh yadrami procesora Krim togo dosyagayetsya efektivne vikoristannya keshu Programa napisana z vikoristannyam TBB stvoryuye sinhronizuye i rujnuye grafi zalezhnostej zavdan vidpovidno do algoritmu Potim zavdannya vikonuyutsya vidpovidno do zalezhnostej Cej pidhid dozvolyaye programuvati paralelni algoritmi na visokomu rivni abstraguyuchis vid detalej arhitekturi konkretnoyi mashini Intel Threading Building BlocksTipbiblioteka programuvannya RozrobnikIntelStabilnij vipusk4 4 25 serpnya 2015 8 rokiv tomu 2015 08 25 Versiyi2019 12 veresnya 2018 3 4 Operacijna sistemaKros platformovaMova programuvannyaS LicenziyaPodvijna komercijna i GPL 2 0Repozitorijgithub com oneapi src oneTBBVebsajtthreadingbuildingblocks orgVmist bibliotekiTBB ce kolekciya komponent dlya paralelnogo programuvannya Bazovi algoritmi parallel for parallel reduce parallel scan Rozvinuti algoritmi parallel while parallel do parallel pipeline parallel sort concurrent queue concurrent priority queue concurrent vector concurrent hash map Vidilennya pam yati scalable malloc scalable free scalable realloc scalable calloc scalable allocator cache aligned allocator Vzayemne viklyuchennya mutex spin mutex queuing mutex spin rw mutex queuing rw mutex recursive mutex Atomarni operaciyi fetch and add fetch and increment fetch and decrement compare and swap fetch and store Chas platformonezalezhna realizaciya dribnogranulovanoyi globalnoyi Planuvannya zavdan bezposerednij dostup do kontrolyuvannya stvorennya ta vikonannya zavdanIstoriyaVersiya 1 0 bula vipushena firmoyu Intel 29 serpnya 2006 cherez rik pislya vipusku svogo pershogo dvoyadernogo procesora Pentium D Versiya 1 1 bula vipushena 10 kvitnya 2007 5 chervnya biblioteka bula dodana do skladu Intel C Compiler 10 0 Professional Edition Versiya 2 0 bula vipushena 24 lipnya 2007 Buv vidkritij vihidnij kod biblioteki i buv stvorenij proekt z vidkritim vihidnim kodom z licenziyeyu GPLv2 Biblioteka takozh dostupna pid komercijnoyu licenziyeyu bez vihidnogo kodu ale z dostupom do tehnichnoyi pidtrimki Funkcionalnist oboh bibliotek odnakova Versiya 2 1 bula vipushena 22 lipnya 2008 Versiya 2 2 bula vipushena 5 serpnya 2009 roku Vona vklyuchaye v sebe pidtrimku lyambda funkcij C 0x Versiya 3 0 bula vipushena 4 travnya 2010 Spisok vdoskonalen Versiya 4 0 bula vipushena 8 veresnya 2011 Buv dodanij novij funkcional div Pochinayuchi z versiyi 3 0 promizhni onovlennya TBB vihodyat u formati TBB X 0 update N napriklad TBB 4 0 update 2 Prikladi vikoristannyaU cij programi elementi masivu obroblyayutsya funkciyeyu Calculate paralelno Pidklyuchayutsya neobhidni zagolovni fajli include tbb blocked range h include tbb parallel for h Kilkist elementiv vektora const int SIZE 10000000 Klas obrobnik class CalculationTask double myArray public Operator vikonuyetsya nad diapazonom z prostoru iteracij void operator const tbb blocked range lt int gt amp r const for int i r begin i r end i Calculate myArray i Konstruktor CalculationTask double a myArray a int main double myArray new double SIZE Zapusk paralelnogo algoritmu for tbb parallel for tbb blocked range lt int gt 0 SIZE CalculationTask myArray delete myArray return 0 Z vikoristannyam lyambda funkcij z S 11 Pidklyuchayutsya neobhidni zagolovni fajli include tbb blocked range h include tbb parallel for h Kilkist elementiv vektora const int SIZE 10000000 int main double myArray new double SIZE Zapusk paralelnogo algoritmu for tbb parallel for tbb blocked range lt int gt 0 SIZE Lyambda funkciya myArray const tbb blocked range lt int gt amp r for int i r begin i r end i Calculate myArray i delete myArray return 0 Pidtrimuvani operacijni sistemiKomercijna versiya TBB 4 0 pidtrimuye Microsoft Windows XP abo vishe Mac OS X versiya 10 5 8 abo vishe i Linux vikoristovuyuchi rizni kompilyatori Visual C versiya 8 0 abo vishe tilki na Windows Intel C compiler versiya 11 1 abo vishe abo GNU Compiler Collection gcc versiya 3 4 i vishe Krim togo spivtovaristvo vidkritoyi versiyi TBB vidpravilo yiyi na Sun Solaris PowerPC Xbox 360 QNX Neutrino i FreeBSD Primitki Arhiv originalu za 3 bereznya 2016 Procitovano 14 veresnya 2015 Arhiv originalu za 15 zhovtnya 2015 Procitovano 14 veresnya 2015 Release 2019 2018 Release 2019 2018 Arhiv originalu za 2 bereznya 2009 Procitovano 26 travnya 2015 Arhiv originalu za 27 travnya 2015 Procitovano 28 travnya 2015 Threading Building Blocks 30 travnya 2015 u Wayback Machine LiteraturaReinders James 2007 July Intel Threading Building Blocks Outfitting C for Multi core Processor Parallelism 31 serpnya 2011 u Wayback Machine 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 5 lyutogo 2012 u Wayback Machine Voss M 2006 December Enable Safe Scalable Parallelism with Intel Threading Building Blocks Concurrent Containers 5 lyutogo 2012 u Wayback Machine Hudson R L B Saha et al 2006 June McRT Malloc a scalable transactional memory allocator 14 zhovtnya 2008 u Wayback Machine Proceedings of the 2006 International Symposium on Memory Management New York ACM Press pp 74 83 Div takozhOpenMP Standartna biblioteka shablonivPosilannyahttp www threadingbuildingblocks org 5 serpnya 2019 u Wayback Machine sajt spilnoti http software intel com ru ru articles intel tbb 28 grudnya 2011 u Wayback Machine opis biblioteki rosijskoyu na sajti Intel http www slideshare net yandex ss 33845143 26 travnya 2015 u Wayback Machine paralelizm v S oglyadova prezentaciya Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Cya stattya maye kilka nedolikiv Bud laska dopomozhit udoskonaliti yiyi abo obgovorit ci problemi na storinci obgovorennya reflessisbn