c++ - tierra - tbb meaning
¿Alguna experiencia con los bloques de construcción Threading de Intel? (9)
La biblioteca de código abierto Threading Building Blocks (TBB) de Intel parece realmente interesante. Aunque hay incluso un libro de O''Reilly sobre el tema, no sé de mucha gente que lo use. Estoy interesado en usarlo para algunas aplicaciones paralelas de varios niveles (hilos MPI +) en entornos Unix (Mac, Linux, etc.). Por lo que vale, me interesan los tipos de aplicaciones de computación / métodos numéricos de alto rendimiento.
¿Alguien tiene experiencias con TBB? Funciona bien? ¿Es bastante portátil (incluyendo GCC y otros compiladores)? ¿El paradigma funciona bien para los programas que has escrito? ¿Hay otras bibliotecas en las que debería investigar?
¿Has mirado en la biblioteca de impulso con su API de hilo ?
He usado TBB brevemente, y probablemente lo use más en el futuro. Me gustó usarlo, lo más importante es que no tiene que lidiar con macros / extensiones de C ++, sino que permanece dentro del lenguaje. También es bastante portátil. Lo he usado tanto en Windows como en Linux. Sin embargo, una cosa: es difícil trabajar con hilos utilizando TBB, habría que pensar en términos de tareas (lo que en realidad es algo bueno). Intel TBB no admitiría su uso de bloqueos desnudos (hará que esto sea tedioso). Pero, en general, esta es mi experiencia preliminar.
También recomendaría echar un vistazo a openMP 3 también.
Lo introduje en nuestra base de códigos porque necesitábamos un bettor malloc para usar cuando nos movíamos a una máquina de 16 núcleos. Con 8 y menos no era un problema significativo. Nos ha funcionado bien Planeamos usar los contenedores concurrentes de grano fino a continuación. Idealmente, podemos hacer uso de la carne real del producto, pero eso requiere volver a pensar cómo construimos nuestro código. Realmente me gustan las ideas en TBB, pero no es fácil adaptarlas a una base de código.
No se puede pensar en TBB como otra biblioteca de threading. Tienen un modelo completamente nuevo que realmente se sienta encima de los hilos y abstrae los hilos de distancia. Aprende a pensar en tareas, parallel_for tipo operaciones y tuberías. Si tuviera que construir un nuevo proyecto, probablemente intentaría modelarlo de esta manera.
Trabajamos en Visual Studio y funciona muy bien. Originalmente fue escrito para linux / pthreads, por lo que funciona bien allí también.
Miré en TBB pero nunca lo usé en un proyecto. No vi ventajas (para mi propósito) sobre ZThread . Aquí puede encontrar un resumen breve y algo anticuado.
Está bastante completo con varias opciones de envío de subprocesos, todas las clases de sincronización habituales y un mecanismo de interrupción muy útil basado en subprocesos. Es fácilmente extensible, bien escrito y documentado. Lo he usado en más de 20 proyectos.
También funciona bien con cualquier * NIX que sea compatible con los hilos POSIX, así como con Windows.
Digno de una mirada.
No estoy haciendo computación numérica, pero trabajo con minería de datos (piense en clustering y clasificación), y nuestras cargas de trabajo son probablemente similares: todos los datos son estáticos y usted los tiene al principio del programa. Investigué brevemente TBB de Intel y los encontré excesivos para mis necesidades. Después de comenzar con el código basado en pthread sin procesar, cambié a OPENMP y obtuve la combinación correcta entre legibilidad y rendimiento.
ZThread es LGPL, está limitado a usar la biblioteca en enlaces dinámicos si no está trabajando en un proyecto de código abierto.
Los Threading Building Blocks (TBB) en la versión de código abierto, (hay una nueva versión comercial, $ 299, aún no se conocen las diferencias) es GNU General Public License versión 2 con una llamada "Runtime Exception" (que es específico para el uso solo en la creación de software libre.) He visto otras Excepciones de tiempo de ejecución que intentan acercarse a LGPL pero que permiten el uso comercial y la vinculación estática no es lo que sucede ahora .
Solo estoy escribiendo esto porque aproveché la oportunidad para examinar las licencias de las bibliotecas y esas también deben ser una consideración para la selección en función del uso que se pretenda darles.
Txs, Jihn por señalar esta actualización ...
Yo uso TBB en un proyecto. Parecía ser más fácil de usar que los hilos. Hay tareas que se pueden ejecutar en paralelo. Una tarea es solo una llamada a su subrutina paralelizada. El equilibrio de carga se realiza automáticamente. Es por eso que lo acepto como una biblioteca de paralelización de mayor nivel. Logré una velocidad de 2.5x sin mucho trabajo en un procesador Intel de 4 núcleos. Hay ejemplos, responden preguntas en foros y se mantiene y es gratis.
Los Threading Building Blocks (TBB) en la versión de código abierto, (hay una nueva versión comercial, $ 299, aún no se conocen las diferencias) es GNU General Public License versión 2 con una llamada "Runtime Exception" (que es específico para el uso solo en la creación de software libre.) He visto otras excepciones de tiempo de ejecución que intentan acercarse a LGPL, pero que permiten el uso comercial y la vinculación estática, este no es el caso.
De acuerdo con esta pregunta, el enhebrado de los bloques de construcción se puede usar sin restricciones de copia con restricciones de uso comercial.
Conozco al menos dos marcos de aplicaciones HPC que usan TBB:
No sé cómo MOOSE usa TBB, pero MADNESS usa TBB para su cola de tareas y su asignador de memoria.
Personalmente, utilicé TBB en el proyecto Parallel Research Kernels , dentro del cual he comparado TBB con OpenMP, OpenCL, Kokkos, RAJA, C ++ 17 Parallel STL y otros modelos. Ver el subdirectorio C ++ para más detalles.
La siguiente figura muestra el rendimiento relativo de los modelos antes mencionados en un procesador Intel Xeon Phi 7250 (los detalles no son importantes, todos los modelos utilizan la misma configuración). Como puede ver, TBB lo hace bastante bien, excepto en el caso de tamaños de problema más pequeños, donde la sobrecarga de la programación adaptable es más relevante. TBB tiene perillas de ajuste que afectarán estos resultados.
Divulgación completa: trabajo para Intel en una capacidad de investigación / exploración.