Intel Threading Building Blocks

Поделись знанием:
Перейти к: навигация, поиск
Intel Threading Building Blocks
Тип

библиотека (программирование)

Разработчик

Intel

Написана на

С++, Assembler

Операционная система

Кроссплатформенный

Лицензия

Два варианта: коммерческая и Apache 2.0

Сайт

[www.threadingbuildingblocks.org eadingbuildingblocks.org]

К:Википедия:Статьи без изображений (тип: не указан)

Intel Threading Building Blocks (также известная как TBB) — кроссплатформенная библиотека шаблонов С++[1], разработанная компанией 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 года. Список улучшений software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks/.

Версия 4.0 была выпущена 8 Сентября 2011 года. Была добавлен новая функциональность, см. 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;
}

С использованием лямбда-функций из С++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 поддерживает 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.

См. также

Напишите отзыв о статье "Intel Threading Building Blocks"

Литература

  • Reinders, James (2007, July). [www.oreilly.com/catalog/9780596514808 Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism] (Paperback) Sebastopol: O’Reilly Media, ISBN 978-0-596-51480-8.
  • Voss, M. (2006, October). [www.devx.com/cplus/Article/32935 «Demystify Scalable Parallelism with Intel Threading Building Blocks' Generic Parallel Algorithms.»]
  • Voss, M. (2006, December). [www.devx.com/cplus/Article/33334 «Enable Safe, Scalable Parallelism with Intel Threading Building Blocks' Concurrent Containers.»]
  • Hudson, R. L., B. Saha, et al. (2006, June). [doi.acm.org/10.1145/1133956.1133967 «McRT-Malloc: a scalable transactional memory allocator.»] Proceedings of the 2006 International Symposium on Memory Management. New York: ACM Press, pp. 74–83.

Примечания

  1. [www.intel.com/cd/software/products/emea/rus/343556.htm Intel® TBB — ISN]

Ссылки

  • www.threadingbuildingblocks.org — сайт сообщества.
  • software.intel.com/ru-ru/articles/intel-tbb/ — описание библиотеки на русском сайте Интела.
  • www.slideshare.net/michaelkarpov/tbb - презентация на русском языке.
  • www.slideshare.net/yandex/ss-33845143 - параллелизм в С++ (обзорная презентация)

Отрывок, характеризующий Intel Threading Building Blocks

– Круши, ребята! – приговаривал он и сам подхватывал орудия за колеса и вывинчивал винты.
В дыму, оглушаемый беспрерывными выстрелами, заставлявшими его каждый раз вздрагивать, Тушин, не выпуская своей носогрелки, бегал от одного орудия к другому, то прицеливаясь, то считая заряды, то распоряжаясь переменой и перепряжкой убитых и раненых лошадей, и покрикивал своим слабым тоненьким, нерешительным голоском. Лицо его всё более и более оживлялось. Только когда убивали или ранили людей, он морщился и, отворачиваясь от убитого, сердито кричал на людей, как всегда, мешкавших поднять раненого или тело. Солдаты, большею частью красивые молодцы (как и всегда в батарейной роте, на две головы выше своего офицера и вдвое шире его), все, как дети в затруднительном положении, смотрели на своего командира, и то выражение, которое было на его лице, неизменно отражалось на их лицах.
Вследствие этого страшного гула, шума, потребности внимания и деятельности Тушин не испытывал ни малейшего неприятного чувства страха, и мысль, что его могут убить или больно ранить, не приходила ему в голову. Напротив, ему становилось всё веселее и веселее. Ему казалось, что уже очень давно, едва ли не вчера, была та минута, когда он увидел неприятеля и сделал первый выстрел, и что клочок поля, на котором он стоял, был ему давно знакомым, родственным местом. Несмотря на то, что он всё помнил, всё соображал, всё делал, что мог делать самый лучший офицер в его положении, он находился в состоянии, похожем на лихорадочный бред или на состояние пьяного человека.
Из за оглушающих со всех сторон звуков своих орудий, из за свиста и ударов снарядов неприятелей, из за вида вспотевшей, раскрасневшейся, торопящейся около орудий прислуги, из за вида крови людей и лошадей, из за вида дымков неприятеля на той стороне (после которых всякий раз прилетало ядро и било в землю, в человека, в орудие или в лошадь), из за вида этих предметов у него в голове установился свой фантастический мир, который составлял его наслаждение в эту минуту. Неприятельские пушки в его воображении были не пушки, а трубки, из которых редкими клубами выпускал дым невидимый курильщик.
– Вишь, пыхнул опять, – проговорил Тушин шопотом про себя, в то время как с горы выскакивал клуб дыма и влево полосой относился ветром, – теперь мячик жди – отсылать назад.
– Что прикажете, ваше благородие? – спросил фейерверкер, близко стоявший около него и слышавший, что он бормотал что то.
– Ничего, гранату… – отвечал он.
«Ну ка, наша Матвевна», говорил он про себя. Матвевной представлялась в его воображении большая крайняя, старинного литья пушка. Муравьями представлялись ему французы около своих орудий. Красавец и пьяница первый номер второго орудия в его мире был дядя ; Тушин чаще других смотрел на него и радовался на каждое его движение. Звук то замиравшей, то опять усиливавшейся ружейной перестрелки под горою представлялся ему чьим то дыханием. Он прислушивался к затиханью и разгоранью этих звуков.
– Ишь, задышала опять, задышала, – говорил он про себя.
Сам он представлялся себе огромного роста, мощным мужчиной, который обеими руками швыряет французам ядра.
– Ну, Матвевна, матушка, не выдавай! – говорил он, отходя от орудия, как над его головой раздался чуждый, незнакомый голос:
– Капитан Тушин! Капитан!
Тушин испуганно оглянулся. Это был тот штаб офицер, который выгнал его из Грунта. Он запыхавшимся голосом кричал ему:
– Что вы, с ума сошли. Вам два раза приказано отступать, а вы…
«Ну, за что они меня?…» думал про себя Тушин, со страхом глядя на начальника.
– Я… ничего… – проговорил он, приставляя два пальца к козырьку. – Я…
Но полковник не договорил всего, что хотел. Близко пролетевшее ядро заставило его, нырнув, согнуться на лошади. Он замолк и только что хотел сказать еще что то, как еще ядро остановило его. Он поворотил лошадь и поскакал прочь.
– Отступать! Все отступать! – прокричал он издалека. Солдаты засмеялись. Через минуту приехал адъютант с тем же приказанием.
Это был князь Андрей. Первое, что он увидел, выезжая на то пространство, которое занимали пушки Тушина, была отпряженная лошадь с перебитою ногой, которая ржала около запряженных лошадей. Из ноги ее, как из ключа, лилась кровь. Между передками лежало несколько убитых. Одно ядро за другим пролетало над ним, в то время как он подъезжал, и он почувствовал, как нервическая дрожь пробежала по его спине. Но одна мысль о том, что он боится, снова подняла его. «Я не могу бояться», подумал он и медленно слез с лошади между орудиями. Он передал приказание и не уехал с батареи. Он решил, что при себе снимет орудия с позиции и отведет их. Вместе с Тушиным, шагая через тела и под страшным огнем французов, он занялся уборкой орудий.
– А то приезжало сейчас начальство, так скорее драло, – сказал фейерверкер князю Андрею, – не так, как ваше благородие.
Князь Андрей ничего не говорил с Тушиным. Они оба были и так заняты, что, казалось, и не видали друг друга. Когда, надев уцелевшие из четырех два орудия на передки, они двинулись под гору (одна разбитая пушка и единорог были оставлены), князь Андрей подъехал к Тушину.