Intel Threading Building Blocks

Intel Threading Building Blocks
Тип бібліотека (програмування)
Розробник Intel
Стабільний випуск 4.4 (25 серпня 2015; 8 років тому (2015-08-25)[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.

Примітки[ред. | ред. код]

  1. What's New? Intel® Threading Building Blocks 4.4. Архів оригіналу за 3 березня 2016. Процитовано 14 вересня 2015.
  2. Intel Threading Building Blocks Release Notes. Архів оригіналу за 15 жовтня 2015. Процитовано 14 вересня 2015.
  3. Release 2019 — 2018.
  4. Release 2019 — 2018.
  5. Intel® TBB — ISN. Архів оригіналу за 2 березня 2009. Процитовано 26 травня 2015.
  6. Intel. Архів оригіналу за 27 травня 2015. Процитовано 28 травня 2015.
  7. Threading Building Blocks [Архівовано 30 травня 2015 у Wayback Machine.]

Література[ред. | ред. код]

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]