Intel Threading Building Blocks

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Intel Threading Building Blocks
Тип бібліотека (програмування)
Розробник Intel
Стабільний випуск 4.4 (25 серпня 2015; 786 днів тому[1][2] )
Версії 4.4 Update 3[3]
Операційна система Крос-платформова
Написано на С++
Ліцензія Подвійна: комерційна і GPL 2.0
threadingbuildingblocks.org

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

Вміст бібліотеки[ред.ред. код]

TBB це колекція компонент для паралельного програмування:

  • Базові алгоритми: parallel_for, parallel_reduce, parallel_scan
  • Розвинуті алгоритми: parallel_while, parallel_do, parallel_pipeline, parallel_sort
  • Контейнери: concurrent_queue, concurrent_priority_queue, concurrent_vector, concurrent_hash_map
  • Виділення пам'яті: scalable_malloc, scalable_free, scalable_realloc, scalable_calloc, scalable_allocator, cache_aligned_allocator
  • Взаємне виключення: mutex, spin_mutex, queuing_mutex, spin_rw_mutex, queuing_rw_mutex, recursive_mutex
  • Атомарні операції: fetch_and_add, fetch_and_increment, fetch_and_decrement, compare_and_swap, fetch_and_store
  • Час: платформонезалежна реалізація дрібногранульованої глобальної мітка часу
  • Планування завдань: безпосередній доступ до контролювання створення та виконання завдань

Історія[ред.ред. код]

Версія 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. Список вдосконалень[5]

Версія 4.0 була випущена 8 вересня 2011. Був доданий новий функціонал, див.[6]

Починаючи з версії 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
{
	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 (double *a) : myArray(a) { }
};


int main()
{
	double *myArray = new double[SIZE];

	// Запуск паралельного алгоритму for
	tbb::parallel_for(tbb::blocked_range<int>(0, SIZE), CalculationTask(myArray));

	delete[] myArray;

	return 0;
}

З використанням лямбда-функцій з С ++ 11:

// Підключаються необхідні заголовні файли
#include “tbb/blocked_range.h”
#include “tbb/parallel_for.h”

// Кількість елементів вектора
const int SIZE = 10000000;

int main()
{
	double *myArray = new double[SIZE];

	// Запуск паралельного алгоритму for
	tbb::parallel_for(tbb::blocked_range<int>(0, SIZE),
	// Лямбда-функція
	[myArray](const tbb::blocked_range<int> &r)
	{
		for (int i = r.begin(); i != r.end(); i++)
			Calculate(myArray[i]);
	});

	delete[] 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.

Примітки[ред.ред. код]

Література[ред.ред. код]

Див. також[ред.ред. код]

Посилання[ред.ред. код]