Bloques de creación de subprocesos de Intel

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 5 de agosto de 2016; las comprobaciones requieren 10 ediciones .
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.

Estructura de la biblioteca

La biblioteca es una colección de plantillas de clase y funciones para programación paralela. La biblioteca tiene:

Historia

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.

Ejemplos de uso

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 ; }

Sistemas operativos soportados

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 .

Véase también

Literatura

Notas

  1. Versión oneTBB v2021.5.0 . Consultado el 7 de junio de 2022. Archivado desde el original el 7 de junio de 2022.
  2. Intel® TBB - ISN Archivado el 2 de marzo de 2009.

Enlaces