oneAPI Threading Building Blocks ( oneTBB ) es una biblioteca de plantillas C ++ desarrollada por Intel para la programación paralela en procesadores de múltiples núcleos . Con TBB, un cálculo se divide en tareas que pueden ejecutarse en paralelo. La biblioteca administra y programa subprocesos para ejecutar estas tareas.
Desarrollador (es) | Intel |
---|---|
Lanzamiento estable | 2021.1.1 / 8 de diciembre de 2020 [1] |
Repositorio | |
Escrito en | C ++ |
Sistema operativo | FreeBSD, Linux, Solaris, OS X, Windows, Android |
Tipo | biblioteca o marco |
Licencia | dual: comercial / de código abierto ( Apache 2.0 ), más Freeware [2] |
Sitio web | 01 software github |
Descripción general
Un programa TBB crea, sincroniza y destruye gráficos de tareas dependientes de acuerdo con algoritmos , es decir, paradigmas de programación paralela de alto nivel (también conocidos como esqueletos algorítmicos ). Luego, las tareas se ejecutan respetando las dependencias de los gráficos. Este enfoque agrupa a TBB en una familia de técnicas para la programación paralela con el objetivo de desacoplar la programación de los detalles de la máquina subyacente.
TBB implementa el robo de trabajo para equilibrar una carga de trabajo paralela en los núcleos de procesamiento disponibles con el fin de aumentar la utilización del núcleo y, por lo tanto, el escalado. Inicialmente, la carga de trabajo se divide uniformemente entre los núcleos de procesador disponibles. Si un núcleo completa su trabajo mientras otros núcleos todavía tienen una cantidad significativa de trabajo en su cola, TBB reasigna parte del trabajo de uno de los núcleos ocupados al núcleo inactivo. Esta capacidad dinámica desacopla al programador de la máquina, permitiendo que las aplicaciones escritas usando la biblioteca escalen para utilizar los núcleos de procesamiento disponibles sin cambios en el código fuente o el archivo de programa ejecutable. En una evaluación de 2008 de la implementación del robo de trabajo en TBB, los investigadores de la Universidad de Princeton descubrieron que era subóptimo para una gran cantidad de núcleos de procesadores, lo que provocaba que hasta el 47% del tiempo de computación se invirtiera en la sobrecarga de programación al ejecutar ciertos puntos de referencia en un sistema de 32 núcleos. . [3]
TBB, al igual que STL (y la parte de la biblioteca estándar de C ++ basada en él), utiliza plantillas en gran medida. Esto tiene la ventaja del polimorfismo de baja sobrecarga , ya que las plantillas son una construcción en tiempo de compilación que los compiladores modernos de C ++ pueden optimizar en gran medida.
oneTBB está disponible comercialmente como una distribución binaria con soporte, [4] y como software de código abierto tanto en formato fuente como binario. [5]
TBB no ofrece garantías de determinismo o ausencia de carreras de datos . [6]
Contenidos de la biblioteca
TBB es una colección de componentes para programación paralela:
- Algoritmos básicos:
parallel_for
,parallel_reduce
,parallel_scan
- Los algoritmos avanzados:
parallel_while
,parallel_do
,parallel_pipeline
,parallel_sort
- Contenedores :
concurrent_queue
,concurrent_priority_queue
,concurrent_vector
,concurrent_hash_map
- Asignación de memoria:
scalable_malloc
,scalable_free
,scalable_realloc
,scalable_calloc
,scalable_allocator
,cache_aligned_allocator
- La exclusión mutua :
mutex
,spin_mutex
,queuing_mutex
,spin_rw_mutex
,queuing_rw_mutex
,recursive_mutex
- Operaciones atómicas :
fetch_and_add
,fetch_and_increment
,fetch_and_decrement
,compare_and_swap
,fetch_and_store
- Temporización: sello de tiempo global de grano fino portátil
- Programador de tareas: acceso directo para controlar la creación y activación de tareas
Sistemas soportados
La versión comercial de TBB 3.0 es compatible con Windows (XP o posterior), OS X (versión 10.5.8 o posterior) y Linux usando Visual C ++ (versión 8.0 o posterior, solo en Windows), Intel C ++ Compiler (versión 11.1 o posterior) o el Colección de compiladores GNU (gcc). [7] Además, la comunidad de código abierto de TBB ha contribuido con parches para Solaris , [8] PowerPC , Xbox 360 , QNX Neutrino y FreeBSD .
Ver también
- Kit de herramientas base Intel oneAPI
- Primitivas de rendimiento integradas de Intel (IPP)
- Biblioteca de aceleración de análisis de datos Intel oneAPI (DAAL)
- Biblioteca de kernel matemático Intel oneAPI (MKL)
- Asesor de Intel
- Inspector de Intel
- Generador de perfiles Intel VTune
- Colecciones concurrentes de Intel (CnC)
- Esqueleto algorítmico
- Computación paralela
- Lista de bibliotecas de subprocesos múltiples de C ++
- Lista de bibliotecas de plantillas de C ++
- Biblioteca de patrones paralelos
- Despacho de Grand Central (GCD)
Notas
- ^ "Versiones de Github de bloques de construcción de subprocesamiento Intel®" .
- ^ "Opciones sin costo para Intel Parallel Studio XE, soporte usted mismo, libre de regalías" .
- ^ Contreras, Gilberto; Martonosi, Margaret (2008). Caracterización y mejora del rendimiento de Intel Threading Building Blocks (PDF) . IEEE Int'l Symp. sobre caracterización de la carga de trabajo.
- ^ https://software.intel.com/en-us/intel-tbb Página de inicio de la versión comercial de Intel Threading Building Blocks
- ^ https://01.org/tbb Threading Building Blocks Página de inicio del proyecto de código abierto
- ^ Bocchino Jr., Robert L .; Adve, Vikram S .; Adve, Sarita V .; Snir, Marc (2009). La programación paralela debe ser determinista por defecto . Taller de USENIX sobre temas candentes en paralelo.
- ^ "Intel Threading Building Blocks - Notas de la versión versión 3.0" . Consultado el 8 de agosto de 2011 .
- ^ "Uso de bloques de construcción con subprocesos de Intel (TBB) con Sun Studio Express" . Consultado el 8 de mayo de 2008 .
Referencias
- Voss, Michael; Asenjo, Rafael; Reinders, James (2019), Pro TBB , Apress, doi : 10.1007 / 978-1-4842-4398-5 , ISBN 978-1-4842-4397-8, S2CID 195847637
- Reinders, James (julio de 2007), Intel Threading Building Blocks: Equipamiento de C ++ para el paralelismo de procesadores multinúcleo (edición de bolsillo), Sebastopol: O'Reilly Media, ISBN 978-0-596-51480-8
- Voss, M. (octubre de 2006), Demystify Scalable Parallelism with Intel Threading Building Blocks 'Generic Parallel Algorithms
- Voss, M. (diciembre de 2006), Enable Safe, Scalable Parallelism with Concurrent Containers de Intel Threading Building Blocks
- Hudson, Richard L .; Saha, Bratin; Adl-Tabatabai, Ali-Reza; Hertzberg, Benjamin C. (2006), "McRT-Malloc", Actas del simposio internacional de 2006 sobre gestión de la memoria - ISMM '06 , págs. 74–83, doi : 10.1145 / 1133956.1133967 , ISBN 978-1595932211, S2CID 9120368
enlaces externos
- Página web oficial
- tbb en GitHub
- Sitio web oficial de Intel