Blocuri de construcție Intel Threading
| Blocuri de construcție Intel Threading | |
|---|---|
| Tip de | biblioteca (programare) |
| Dezvoltator | Intel |
| Scris in | C++ , Asamblator |
| Sistem de operare | Platformă transversală |
| ultima versiune | 2021.5.0 [1] (22 decembrie 2021) |
| Licență | Două opțiuni: comercial și Apache 2.0 |
| Site-ul web | threadingbuildingblocks.org |
Intel Threading Building Blocks (cunoscut și ca TBB ) este o bibliotecă de șabloane C++ multiplatformă [2] dezvoltată de Intel pentru programare paralelă. Biblioteca conține algoritmi și structuri de date care permit programatorului să evite multe dintre complexitățile care vin cu implementările tradiționale de threading, cum ar fi firele POSIX , firele Windows sau firele Boost , care creează fire separate de execuție care sunt sincronizate și oprite manual. Biblioteca TBB rezuma accesul la firele individuale. Toate operațiunile sunt tratate ca „sarcini” care sunt distribuite dinamic între nucleele procesorului. În plus, se realizează utilizarea eficientă a memoriei cache . Un program scris folosind TBB creează, sincronizează și rezolvă grafice de dependență de sarcini conform unui algoritm. Sarcinile sunt apoi executate în funcție de dependențe. Această abordare vă permite să programați algoritmi paraleli la un nivel înalt, făcând abstracție de la detaliile arhitecturii unei anumite mașini.
Structura bibliotecii
Biblioteca este o colecție de șabloane de clasă și funcții pentru programare paralelă. Biblioteca are:
- algoritmi paraleli: for, reduce, do, scan, while, pipeline, sort;
- containere sigure pentru fire: vector, coadă, tabel hash;
- alocatoare de memorie scalabile;
- mutexuri ;
- operatii atomice ;
- marcaj temporal global;
- gestionar de sarcini;
- graficul de calcul.
Istorie
Versiunea 1.0 a fost lansată de Intel pe 29 august 2006, la un an după lansarea primului său procesor Pentium D dual-core .
Versiunea 1.1 a fost lansată pe 10 aprilie 2007. Pe 5 iunie, biblioteca a fost adăugată la Intel C++ Compiler 10.0 Professional Edition.
Versiunea 2.0 a fost lansată pe 24 iulie 2007. Codul sursă al bibliotecii a fost deschis și un proiect open source a fost creat sub licența GPLv2. Biblioteca este disponibilă și sub o licență comercială fără cod sursă, dar cu acces la suport tehnic. Funcționalitatea ambelor biblioteci este aceeași.
Versiunea 2.1 a fost lansată pe 22 iulie 2008.
Versiunea 2.2 a fost lansată pe 5 august 2009 . Include suport pentru funcțiile lambda C++0x .
Versiunea 3.0 a fost lansată pe 4 mai 2010. Lista de îmbunătățiri http://software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks/ .
Versiunea 4.0 a fost lansată pe 8 septembrie 2011. A fost adăugată o nouă funcționalitate, consultați https://web.archive.org/web/20111213150434/http://threadingbuildingblocks.org/whatsnew.php
Începând cu versiunea 3.0, actualizările intermediare TBB sunt lansate în formatul TBB X.0 update N, de exemplu TBB 4.0 update 2.
Exemple de utilizare
În acest program, elementele matricei sunt procesate de funcția Calculate în paralel.
// Fișierele de antet necesare sunt incluse
#include „tbb/blocked_range.h”
#include „tbb/parallel_for.h”
// Numărul de elemente vectoriale
const int SIZE = 10000000 ;
// Clasa de gestionare
a clasei CalculationTask
{
vector < double > & myArray ;
public :
// Operatorul () este executat pe un interval din spațiul de iterație
operator void ()( const tbb :: blocked_range < int > & r ) const
{
pentru ( int i = r . begin (); i != r . end (); i ++ )
Calculați ( myArray [ i ]);
}
// Constructor
CalculationTask ( vector < dublu > &a ) : myArray ( a ) { }
};
int main ()
{
vector < double > myArray ( SIZE );
// Rulați algoritmul paralel pentru
tbb :: parallel_for ( tbb :: blocked_range < int > ( 0 , SIZE ), CalculationTask ( myArray ));
returnează 0 ;
}
Folosind funcții lambda din C++11:
// Fișierele de antet necesare sunt
incluse #include „tbb/blocked_range.h”
#include „tbb/parallel_for.h”
#include <vector>
// Numărul de elemente vectoriale
const size_t SIZE = 10000000 ;
int main ()
{
std :: vector < double > myArray ( SIZE );
// Rulați algoritmul paralel pentru
tbb :: parallel_for ( tbb :: blocked_range < size_t > ( 0 , SIZE ),
// Funcția Lambda
[ & myArray ]( const tbb :: blocked_range < size_t > & r )
{
pentru ( size_t i = r . begin (); i != r . end (); i ++ )
Calculați ( myArray [ i ]);
});
returnează 0 ;
}
Sisteme de operare acceptate
Versiunea comercială a TBB 4.0 acceptă Microsoft Windows (XP sau o versiune ulterioară), Mac OS X (versiunea 10.5.8 sau o versiune ulterioară) și Linux folosind diferite compilatoare ( Visual C++ (versiunea 8.0 sau mai mare, numai pe Windows), compilatorul Intel C++ (versiunea 11.1 sau mai recent) sau GNU Compiler Collection (gcc, versiunea 3.4 și mai recentă)). În plus, comunitatea TBB open source l-a portat la Sun Solaris , PowerPC , Xbox 360 , QNX Neutrino și FreeBSD .
Vezi și
- openmp
- Intel Cilk Plus
- Biblioteca de șabloane standard
- Intel Parallel Studio
- Rețeaua de software Intel
- Lista bibliotecilor C++ cu mai multe fire
Literatură
- Reinders, James (2007, iulie). Intel Threading Building Blocks: Echiparea C++ pentru paralelismul procesorului cu mai multe nuclee (Paperback) Sebastopol: O'Reilly Media, ISBN 978-0-596-51480-8 .
- Voss, M. (2006, octombrie). „Demistifică paralelismul scalabil cu algoritmii generici paraleli ai Intel Threading Building Blocks.”
- Voss, M. (decembrie 2006). „Activați paralelismul sigur și scalabil cu containerele concurente ale Intel Threading Building Blocks.”
- Hudson, R.L., B. Saha, et al. (2006, iunie). „McRT-Malloc: un alocator de memorie tranzacțională scalabil.” 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. Programare paralelă C++ cu Threading Building Blocks
Note
- ↑ Lansați oneTBB v2021.5.0 . Consultat la 7 iunie 2022. Arhivat din original pe 7 iunie 2022.
- ↑ Intel® TBB - ISN Arhivat 2 martie 2009.
Link -uri
- http://www.threadingbuildingblocks.org este un site comunitar.
- http://software.intel.com/ru-ru/articles/intel-tbb/ - descrierea bibliotecii pe site-ul rus Intel.
- http://www.slideshare.net/michaelkarpov/tbb - prezentare în limba rusă.
- http://www.slideshare.net/yandex/ss-33845143 - paralelism în C++ (prezentare generală)