Interested Article - Intel Threading Building Blocks
- 2021-06-12
- 2
Intel Threading Building Blocks (также известная как TBB ) — кроссплатформенная библиотека шаблонов C++ , разработанная компанией 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 года. Список улучшений .
Версия 4.0 была выпущена 8 Сентября 2011 года. Была добавлен новая функциональность, см.
Начиная с версии 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 .
См. также
Литература
- Reinders, James (2007, July). (Paperback) Sebastopol: O’Reilly Media, ISBN 978-0-596-51480-8 .
- Voss, M. (2006, October).
- Voss, M. (2006, December).
- Hudson, R. L., B. Saha, et al. (2006, June). Proceedings of the 2006 International Symposium on Memory Management. New York: ACM Press, pp. 74–83.
- Voss, M., Asenjo, R, Reinders, J. (2019)
Примечания
- . Дата обращения: 25 января 2023. 25 января 2023 года.
- 2 марта 2009 года.
Ссылки
- — сайт сообщества.
- — описание библиотеки на русском сайте Интела.
- - презентация на русском языке.
- - параллелизм в C++ (обзорная презентация)
- 2021-06-12
- 2