Articulo de referencia

Bloques de construcción de enhebrado

{{cite web |title= oneAPI Threading Building Blocks Github Releases |website=[[GitHub]] |url=https://github.com/oneapi-src/oneTBB/releases}} "},"latest preview version":{"wt":""...

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 . Mediante TBB, un cálculo se divide en tareas que pueden ejecutarse en paralelo. La biblioteca gestiona y programa los hilos para ejecutar estas tareas.

Descripción general

Un programa oneTBB crea, sincroniza y destruye grafos de tareas dependientes según algoritmos , es decir, paradigmas de programación paralela de alto nivel (también conocidos como esqueletos algorítmicos ). Las tareas se ejecutan respetando las dependencias del grafo. Este enfoque agrupa a TBB dentro de una familia de técnicas de programación paralela que buscan 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 equitativamente 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 su 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 ni en el archivo ejecutable del programa. En una evaluación de 2008 de la implementación del robo de trabajo en TBB, investigadores de la Universidad de Princeton descubrieron que era subóptima para un gran número de núcleos de procesador, causando que hasta el 47 % del tiempo de computación se dedicara a la sobrecarga de planificación al ejecutar ciertos benchmarks en un sistema de 32 núcleos. [ 3 ]

oneTBB, al igual que la STL (y la parte de la biblioteca estándar de C++ que se basa en ella), utiliza plantillas de forma extensiva. Esto tiene la ventaja de un polimorfismo con 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.

oneTBB no ofrece garantías de determinismo ni de ausencia de condiciones de carrera . [ 5 ]

Contenido de la biblioteca

oneTBB es una colección de componentes para programación paralela:

  • Algoritmos básicos: parallel_for, parallel_reduce,parallel_scan
  • Algoritmos avanzados: parallel_pipeline,parallel_sort
  • Contenedores : concurrent_queue, concurrent_priority_queue, concurrent_vector, concurrent_hash_map, concurrent_unordered_map, concurrent_unordered_set, concurrent_map,concurrent_set
  • Asignación de memoria: scalable_malloc, scalable_free, scalable_realloc, scalable_calloc, scalable_allocator,cache_aligned_allocator
  • Exclusión mutua : mutex, spin_mutex, queuing_mutex, spin_rw_mutex, queuing_rw_mutex,recursive_mutex
  • Sincronización: marca de tiempo global portátil de alta resolución
  • Planificador de tareas: acceso directo para controlar la creación y activación de tareas.

Véase también

Notas

  1. "OneAPI Threading Building Blocks Github Releases" . GitHub .
  2. "Opciones sin costo para soporte de Intel, sin regalías" .
  3. Contreras, Gilberto; Martonosi, Margaret (2008). Caracterización y mejora del rendimiento de los bloques de construcción de subprocesos de Intel (PDF) . Simposio internacional IEEE sobre caracterización de cargas de trabajo.
  4. https://software.intel.com/en-us/intel-tbb Página principal de la versión comercial de Intel Threading Building Blocks
  5. Bocchino Jr., Robert L.; Adve, Vikram S.; Adve, Sarita V.; Snir, Marc (2009). La programación paralela debe ser determinista por defecto . Taller USENIX sobre temas candentes en paralelismo.

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: Outfitting C++ for Multi-core Processor Parallelism (edición de bolsillo  ), Sebastopol: O'Reilly Media, ISBN 978-0-596-51480-8
  • Voss, M. (octubre de 2006), Desmitificando el paralelismo escalable con los algoritmos paralelos genéricos de Intel Threading Building Blocks , archivado del original el 5 de febrero de 2012 , consultado el 6 de junio de 2007.
  • Voss, M. (diciembre de 2006), Habilite el paralelismo seguro y escalable con los contenedores concurrentes de Intel Threading Building Blocks , archivado del original el 5 de febrero de 2012 , consultado el 6 de junio de 2007.
  • 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 memoria - ISMM '06 , pp. 74–83 , doi : 10.1145/1133956.1133967 , ISBN  978-1595932211, S2CID 9120368 
  • Especificación industrial de oneTBB
  • oneTBB en GitHub
  • Sitio web oficial de Intel