Intel Threading Building Blocks
Тип | бібліотека (програмування) |
---|---|
Розробник | Intel |
Стабільний випуск | 4.4 (25 серпня 2015[1][2]) |
Версії | 2019 (12 вересня 2018)[3][4] |
Операційна система | Крос-платформова |
Мова програмування | С++ |
Ліцензія | Подвійна: комерційна і GPL 2.0 |
Репозиторій | github.com/oneapi-src/oneTBB |
Вебсайт | threadingbuildingblocks.org |
Intel Threading Building Blocks (також відома як TBB) — кросплатформна бібліотека шаблонів С++[5], розроблена компанією Intel для паралельного програмування. Бібліотека містить алгоритми і структури даних, що дозволяють програмісту уникнути багатьох складнощів, що виникають при використанні традиційних реалізацій потоків, таких як POSIX Threads, Windows threads або Boost Threads, в яких створюються окремі потоки виконання, що синхронізуються і зупиняються вручну. Бібліотека TBB абстрагує доступ до окремих потоків. Всі операції трактуються як «задачі», які динамічно розподіляються між ядрами процесора. Крім того, досягається ефективне використання кешу. Програма, написана з використанням TBB, створює, синхронізує і руйнує графи залежностей завдань відповідно до алгоритму. Потім завдання виконуються відповідно до залежностей. Цей підхід дозволяє програмувати паралельні алгоритми на високому рівні, абстрагуючись від деталей архітектури конкретної машини.
Вміст бібліотеки[ред. | ред. код]
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 червня бібліотека була додана до складу Intel C++ Compiler 10.0 Professional Edition.
Версія 2.0 була випущена 24 липня 2007. Був відкритий вихідний код бібліотеки і був створений проект з відкритим вихідним кодом з ліцензією GPLv2. Бібліотека також доступна під комерційною ліцензією без вихідного коду, але з доступом до технічної підтримки. Функціональність обох бібліотек однакова.
Версія 2.1 була випущена 22 липня 2008.
Версія 2.2 була випущена 5 серпня 2009 року. Вона включає в себе підтримку лямбда-функцій C++0x.
Версія 3.0 була випущена 4 травня 2010. Список вдосконалень[6]
Версія 4.0 була випущена 8 вересня 2011. Був доданий новий функціонал, див.[7]
Починаючи з версії 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, використовуючи різні компілятори (Visual C++ (версія 8.0 або вище, тільки на Windows), Intel C++ compiler (версія 11.1 або вище) або GNU Compiler Collection (gcc, версія 3.4 і вище)). Крім того, співтовариство відкритої версії TBB відправило її на Sun Solaris, PowerPC, Xbox 360, QNX Neutrino, і FreeBSD.
Примітки[ред. | ред. код]
- ↑ What's New? Intel® Threading Building Blocks 4.4. Архів оригіналу за 3 березня 2016. Процитовано 14 вересня 2015.
- ↑ Intel Threading Building Blocks Release Notes. Архів оригіналу за 15 жовтня 2015. Процитовано 14 вересня 2015.
- ↑ Release 2019 — 2018.
- ↑ Release 2019 — 2018.
- ↑ Intel® TBB — ISN. Архів оригіналу за 2 березня 2009. Процитовано 26 травня 2015.
- ↑ Intel. Архів оригіналу за 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, ISBN 978-0-596-51480-8.
- 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 |