c++ - ¿Cuáles son las diferencias entre Intel TBB y Microsoft PPL?
parallel-processing comparison (1)
Estoy planeando comenzar a "jugar" con un paralelismo basado en tareas para un proyecto multiplataforma. Quería usar Intel Threading Building Blocks. Estoy empezando con Windows y Visual Studio.
Como solo quiero hacer un prototipo por el momento, estoy pensando en "jugar" solo en Windows, y luego tengo el conocimiento suficiente para usar la biblioteca en todas las plataformas compatibles.
He aprendido que desde VS2010, Microsoft proporciona una biblioteca similar, Parallel Processing Library, que tiene (casi) la misma interfaz que Intel TBB.
Algunas fuentes sugieren, incluido el blog del equipo de TBB, que lo construyen juntos y que es la misma biblioteca.
Sin embargo, no es realmente explícito porque a menudo se sugiere que hay pequeñas diferencias entre las dos bibliotecas.
Entonces, ¿cuáles son esas diferencias, si las hay? ¿Debo comenzar directamente con el último ITBB estable o es de bajo riesgo simplemente jugar con Microsoft PPL en prototipos y utilizar ITBB en el proyecto "real" multiplataforma?
TBB es un superconjunto de PPL (como en VS2010), por lo que proporciona todas las API de PPL más sus propias API que PPL no tiene.
Tenga en cuenta que el namespace Concurrency
en VS2010 también contiene API de Tiempo de ejecución de concurrencia (ConcRT, además de qué PPL está construido), Agentes asíncronos y etc. Como alternativa a los Agentes asíncronos, la versión reciente de TBB presenta la nueva API de diagrama de flujo .
En teoría, para pasar de PPL a TBB, solo necesita reemplazar una ruta desde donde toma ppl.h (con TBB, el encabezado viene en <tbbdir>/include/tbb/compat
) y, por supuesto, un enlace con la DLL TBB. . Sin embargo, en este caso, estará limitado a PPL API. Para utilizar la API TBB "extra" que no existe en PPL (como parallel_pipeline
, parallel_reduce
, concurrent_priority_queue
y otros), debe trabajar con TBB desde el principio.