Intel Threading Building Blocks

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Intel Threading Building Blocks
Тип библиотека (программирование)
Разработчик Intel
Написана на C++, Assembler
Операционная система Кроссплатформенный
Последняя версия 2021.7.0[1] (28 октября 2022)
Репозиторий github.com/oneapi-src/on…
Лицензия Два варианта: коммерческая и Apache 2.0
Сайт threadingbuildingblocks.org

Intel Threading Building Blocks (также известная как TBB) — кроссплатформенная библиотека шаблонов C++[2], разработанная компанией Intel для параллельного программирования. Библиотека содержит алгоритмы и структуры данных, позволяющие программисту избежать многих сложностей, возникающих при использовании традиционных реализаций потоков, таких как POSIX Threads, Windows threads или Boost Threads, в которых создаются отдельные потоки исполнения, синхронизируемые и останавливаемые вручную. Библиотека TBB абстрагирует доступ к отдельным потокам. Все операции трактуются как «задачи», которые динамически распределяются между ядрами процессора. Кроме того, достигается эффективное использование кэша. Программа, написанная с использованием TBB, создаёт, синхронизирует и разрешает графы зависимостей задач в соответствии с алгоритмом. Затем задачи исполняются в соответствии с зависимостями. Этот подход позволяет программировать параллельные алгоритмы на высоком уровне, абстрагируясь от деталей архитектуры конкретной машины.

Структура библиотеки

[править | править код]

Библиотека является коллекцией шаблонов классов и функций для параллельного программирования. В библиотеке реализованы:

  • параллельные алгоритмы: for, reduce, do, scan, while, pipeline, sort;
  • потокобезопасные контейнеры: вектор, очередь, хеш-таблица;
  • масштабируемые распределители памяти;
  • мьютексы;
  • атомарные операции;
  • глобальная временная метка;
  • планировщик задач;
  • вычислительный граф.

Версия 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 года. Список улучшений http://software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks/.

Версия 4.0 была выпущена 8 Сентября 2011 года. Была добавлен новая функциональность, см. https://web.archive.org/web/20111213150434/http://threadingbuildingblocks.org/whatsnew.php

Начиная с версии 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
{
	vector<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 (vector<double> &a) : myArray(a) { }
};

int main()
{
	vector<double> myArray(SIZE);

	// Запуск параллельного алгоритма for
	tbb::parallel_for(tbb::blocked_range<int>(0, SIZE), CalculationTask(myArray));

	return 0;
}

С использованием лямбда-функций из C++11:

// Подключаются необходимые заголовочные файлы
#include “tbb/blocked_range.h”
#include “tbb/parallel_for.h”

#include <vector>

// Количество элементов вектора
const size_t SIZE = 10000000;

int main()
{
	std::vector<double> myArray(SIZE);

	// Запуск параллельного алгоритма for
	tbb::parallel_for(tbb::blocked_range<size_t>(0, SIZE),
	// Лямбда-функция
	[&myArray](const tbb::blocked_range<size_t> &r)
	{
		for (size_t i = r.begin(); i != r.end(); i++)
			Calculate(myArray[i]);
	});

	return 0;
}

Поддерживаемые операционные системы

[править | править код]

Коммерческая версия TBB 4.0 поддерживает Windows (XP или выше), Mac OS X (версия 10.5.8 или выше) и Linux, используя различные компиляторы: Microsoft 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. Release oneTBB v2021.7.0. Дата обращения: 25 января 2023. Архивировано 25 января 2023 года.
  2. Intel® TBB — ISN Архивировано 2 марта 2009 года.