Intel Threading Building Blocks | это... Что такое Intel Threading Building Blocks? (original) (raw)
Intel Threading Building Blocks
Тип | библиотека (программирование) |
---|---|
Разработчик | Intel |
Написана на | С++, Assembler |
Операционная система | Кроссплатформенный |
Последняя версия | 4.1 Update 1 (05.09.2012) |
Лицензия | Два варианта: коммерческая и GPL 2.0 |
Сайт | http://www.threadingbuildingblocks.org |
Intel Threading Building Blocks (также известная как TBB) — кроссплатформенная библиотека шаблонов С++[1], разработанная компанией Intel для параллельного программирования. Библиотека содержит алгоритмы и структуры данных, позволяющие программисту избежать многих сложностей, возникающих при использовании традиционных реализаций потоков, таких как POSIX Threads, Windows threads или Boost Threads, в которых создаются отдельные потоки исполнения, синхронизируемые и останавливаемые вручную. Библиотека TBB абстрагирует доступ к отдельным потокам. Все операции трактуются как «задачи», которые динамически распределяются между ядрами процессора. Кроме того, достигается эффективное использование кэша. Программа, написанная с использованием TBB, создаёт, синхронизирует и разрушает графы зависимостей задач в соответствии с алгоритмом. Затем задачи исполняются в соответствии с зависимостями. Этот подход позволяет программировать параллельные алгоритмы на высоком уровне, абстрагируясь от деталей архитектуры конкретной машины.
Содержание
- 1 Структура библиотеки
- 2 История
- 3 Примеры использования
- 4 Поддерживаемые операционные системы
- 5 См. также
- 6 Литература
- 7 Примечания
- 8 Ссылки
Структура библиотеки
Библиотека является коллекцией шаблонов классов и функций для параллельного программирования. В библиотеке реализованы:
- параллельные алгоритмы: 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 года. Был добавлен новый функционал, см. 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” #include “tbb/task_scheduler_init.h”
using namespace tbb;
// Количество элементов вектора const int SIZE = 10000000;
// Класс-обработчик class CalculationTask { private: double *myArray; public: // Оператор () выполняется над диапазоном из пространства итераций void operator()(const blocked_range &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];
// Инициализация библиотеки TBB
task_scheduler_init init;
// Запуск параллельного алгоритма for
parallel_for(
blocked_range<int>(0, SIZE, 500),
CalculationTask(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.
См. также
- OpenMP
- Intel Cilk Plus
- Стандартная библиотека шаблонов
- Intel Parallel Studio
- Intel Software Network
- Список многопоточных библиотек C++
Литература
- Reinders, James (2007, July). 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). «Demystify Scalable Parallelism with Intel Threading Building Blocks' Generic Parallel Algorithms.»
- Voss, M. (2006, December). «Enable Safe, Scalable Parallelism with Intel Threading Building Blocks' Concurrent Containers.»
- Hudson, R. L., B. Saha, et al. (2006, June). «McRT-Malloc: a scalable transactional memory allocator.» Proceedings of the 2006 International Symposium on Memory Management. New York: ACM Press, pp. 74-83.
Примечания
Ссылки
- http://www.threadingbuildingblocks.org — сайт сообщества.
- http://software.intel.com/ru-ru/articles/intel-tbb/ — описание библиотеки на русском сайте Интела.
- http://www.slideshare.net/michaelkarpov/tbb - презентация на русском языке.