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.]

Література

  • 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.] - паралелізм в С++ (оглядова презентація)


  • п
  • о
  • р
Загальне
Рівні паралелізму
Bit · Instruction · Data · Task
Нитки
Super-threading · Hyper-threading
Теорія
Елементи
Координація
Програмування
Апаратне забезпечення

Багатопроцесорність (Симетрична · Асиметрична· Пам'ять (NUMA · COMA · distributed · shared · distributed shared) · SMT

Масово-паралельна архітектура · Суперскалярність · Векторний процесор · Суперкомп'ютер · Beowulf
API
POSIX Threads · OpenMP · MPI · OpenACC  · UPC · Intel Threading Building Blocks · Boost.Thread · Global Arrays · Charm++ · Cilk
Проблеми
PROG Це незавершена стаття про програмування.
Ви можете допомогти проєкту, виправивши або дописавши її.
Ця стаття має кілька недоліків. Будь ласка, допоможіть удосконалити її або обговоріть ці проблеми на сторінці обговорення. reflessisbn