Bloques de creación de subprocesos de Intel | |
---|---|
Tipo de | biblioteca (programación) |
Desarrollador | Intel |
Escrito en | C++ , ensamblador |
Sistema operativo | plataforma cruzada |
ultima versión | 2021.5.0 [1] (22 de diciembre de 2021) |
Licencia | Dos opciones: comercial y Apache 2.0 |
Sitio web | threadingbuildingblocks.org |
Intel Threading Building Blocks (también conocido como TBB ) es una biblioteca de plantillas de C++ multiplataforma [2] desarrollada por Intel para programación paralela. La biblioteca contiene algoritmos y estructuras de datos que permiten al programador evitar muchas de las complejidades que vienen con las implementaciones de subprocesos tradicionales, como POSIX Threads , Windows threads o Boost Threads , que crean subprocesos de ejecución separados que se sincronizan y detienen manualmente. La biblioteca TBB abstrae el acceso a subprocesos individuales. Todas las operaciones se tratan como "tareas" que se distribuyen dinámicamente entre los núcleos del procesador. Además, se consigue un uso eficiente de la memoria caché . Un programa escrito con TBB crea, sincroniza y resuelve gráficos de dependencia de tareas de acuerdo con un algoritmo. A continuación, las tareas se ejecutan de acuerdo con las dependencias. Este enfoque le permite programar algoritmos paralelos a un alto nivel, abstrayéndose de los detalles de la arquitectura de una máquina en particular.
La biblioteca es una colección de plantillas de clase y funciones para programación paralela. La biblioteca tiene:
Intel lanzó la versión 1.0 el 29 de agosto de 2006, un año después del lanzamiento de su primer procesador Pentium D de doble núcleo .
La versión 1.1 se lanzó el 10 de abril de 2007. El 5 de junio, la biblioteca se agregó a Intel C++ Compiler 10.0 Professional Edition.
La versión 2.0 se lanzó el 24 de julio de 2007. Se abrió el código fuente de la biblioteca y se creó un proyecto de código abierto bajo la licencia GPLv2. La biblioteca también está disponible bajo una licencia comercial sin código fuente, pero con acceso a soporte técnico. La funcionalidad de ambas bibliotecas es la misma.
La versión 2.1 se lanzó el 22 de julio de 2008.
La versión 2.2 se lanzó el 5 de agosto de 2009 . Incluye soporte para funciones lambda C++0x .
La versión 3.0 se lanzó el 4 de mayo de 2010. Lista de mejoras http://software.intel.com/en-us/blogs/2010/05/04/tbb-30-new-today-version-of-intel-threading-building-blocks/ .
La versión 4.0 se lanzó el 8 de septiembre de 2011. Se ha agregado una nueva funcionalidad, consulte https://web.archive.org/web/20111213150434/http://threadingbuildingblocks.org/whatsnew.php
A partir de la versión 3.0, las actualizaciones provisionales de TBB se publican en el formato TBB X.0 actualización N, por ejemplo, TBB 4.0 actualización 2.
En este programa, los elementos de la matriz son procesados por la función Calcular en paralelo.
// Se incluyen los archivos de encabezado requeridos #include “tbb/blocked_range.h” #include “tbb/parallel_for.h” // Número de elementos del vector const int SIZE = 10000000 ; // Clase de manejador class CalculationTask { vector < doble > & miArray ; público : // El operador () se ejecuta en un rango del espacio de iteración void operator ()( const tbb :: rango_bloqueado < int > & r ) const { for ( int i = r . comenzar (); i != r . end (); i ++ ) Calcular ( miArray [ i ]); } // Constructor de tarea de cálculo ( vector < doble > &a ) : miArray ( a ) { } }; int principal () { vector < double > miArray ( TAMAÑO ); // Ejecutar el algoritmo paralelo para tbb :: parallel_for ( tbb :: rango_bloqueado < int > ( 0 , SIZE ), CalculationTask ( myArray )); devolver 0 ; }Usando funciones lambda de C++ 11:
// Se incluyen los archivos de encabezado necesarios #include “tbb/blocked_range.h” #include “tbb/parallel_for.h” #incluir <vector> // Número de elementos del vector const size_t SIZE = 10000000 ; int principal () { std :: vector < double > myArray ( TAMAÑO ); // Ejecutar el algoritmo paralelo para tbb :: paralelo_para ( tbb :: rango_bloqueado < tamaño_t > ( 0 , TAMAÑO ), // Función Lambda [ & myArray ]( const tbb :: rango_bloqueado < tamaño_t > & r ) { for ( size_t i = r . begin (); i != r . end (); i ++ ) Calcular ( miArray [ i ]); }); devolver 0 ; }La versión comercial de TBB 4.0 es compatible con Microsoft Windows (XP o superior), Mac OS X (versión 10.5.8 o superior) y Linux utilizando varios compiladores ( Visual C++ (versión 8.0 o superior, solo en Windows), compilador Intel C++ (versión 11.1 o superior) o GNU Compiler Collection (gcc, versión 3.4 y superior)). Además, la comunidad de código abierto de TBB lo ha portado a Sun Solaris , PowerPC , Xbox 360 , QNX Neutrino y FreeBSD .