Intel Threading Building Blocks
| Intel Threading Building Blocks | |
|---|---|
| Тип | библиотека (программирование) |
| Разработчик | Intel |
| Написана на | C++, Assembler |
| Операционная система | Кроссплатформенный |
| Последняя версия | 2021.7.0[1] (28 октября 2022) |
| Репозиторий | github.com/uxlfoundation… |
| Лицензия | Два варианта: коммерческая и 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.
См. также
Литература
- 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.
- Voss, M., Asenjo, R, Reinders, J. (2019) «Pro TBB. C++ Parallel Programming with Threading Building Blocks»
Примечания
- ↑ Release oneTBB v2021.7.0. Дата обращения: 25 января 2023. Архивировано 25 января 2023 года.
- ↑ Intel® TBB — ISN Архивировано 2 марта 2009 года.
Ссылки
- http://www.threadingbuildingblocks.org — сайт сообщества.
- http://software.intel.com/ru-ru/articles/intel-tbb/ — описание библиотеки на русском сайте Интела.
- http://www.slideshare.net/michaelkarpov/tbb - презентация на русском языке.
- http://www.slideshare.net/yandex/ss-33845143 - параллелизм в C++ (обзорная презентация)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.