Intel Threading Building Blocks

Из Википедии, свободной энциклопедии

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

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

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

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

  • параллельные алгоритмы: 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.

См. также

Литература

Примечания

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.