oneAPI Threading Building Blocks (oneTBB; anteriormente Threading Building Blocks o TBB) es una biblioteca de plantillas de C++ desarrollada por Intel para la programación paralela en procesadores multinúcleo . Con TBB, un cálculo se divide en tareas que pueden ejecutarse en paralelo. La biblioteca administra y programa subprocesos para ejecutar estas tareas.
Un programa oneTBB crea, sincroniza y destruye gráficos de tareas dependientes según 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 de programación paralela que apuntan a desacoplar la programación de las particularidades de la máquina subyacente.
oneTBB implementa el robo de trabajo para equilibrar una carga de trabajo paralela entre los núcleos de procesamiento disponibles con el fin de aumentar la utilización de los núcleos y, por lo tanto, la escalabilidad. Inicialmente, la carga de trabajo se divide de manera uniforme entre los núcleos de procesador disponibles. Si un núcleo completa su trabajo mientras otros núcleos aún tienen una cantidad significativa de trabajo en cola, oneTBB 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, lo que permite que las aplicaciones escritas con 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 no era óptima para una gran cantidad de núcleos de procesadores, lo que provocaba que hasta el 47 % del tiempo de procesamiento se dedicara a la sobrecarga de programación al ejecutar ciertos puntos de referencia en un sistema de 32 núcleos. [3]
oneTBB, al igual que STL (y la parte de la biblioteca estándar de C++ basada en ella), utiliza plantillas de forma extensiva. Esto tiene la ventaja de un polimorfismo de bajo consumo , ya que las plantillas son una construcción de tiempo de compilación que los compiladores de C++ modernos 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.
oneTBB no ofrece garantías de determinismo o de ausencia de carreras de datos . [5]
oneTBB es una colección de componentes para programación paralela:
parallel_for
, parallel_reduce
,parallel_scan
parallel_pipeline
,parallel_sort
concurrent_queue
, concurrent_priority_queue
, concurrent_vector
, concurrent_hash_map
, concurrent_unordered_map
, concurrent_unordered_set
, concurrent_map
,concurrent_set
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