В чем разница между Intel TBB и Microsoft PPL?

Я планирую начать "играть" с параллелизмом на основе задач для кросс-платформенного проекта. Я хотел использовать Intel Threading Building Blocks. Я начинаю с Windows и Visual Studio.

поскольку я просто хочу прототип на данный момент, я думаю о "игре" только на windows, тогда у меня достаточно знаний, чтобы использовать библиотеку на всех совместимых платформах.

Я узнал, что с VS2010 Microsoft предоставляет аналогичную библиотеку, библиотеку параллельной обработки, которая имеют (почти) тот же интерфейс, что и Intel TBB.

некоторые источники предполагают, в том числе блог команды TBB, что они строят его вместе и что это одна и та же библиотека.

однако это не совсем явное, потому что часто предполагается, что есть незначительные различия между двумя библиотеками.

Итак, каковы эти различия, если таковые имеются? должен ли я начать непосредственно с последнего стабильного ITBB или это низкий риск просто играть с Microsoft PPL в прототипах и использовать ITBB на кросс-платформенном" реальном " проекте?

1 ответов


TBB - это надмножество PPL (как в VS2010), поэтому он предоставляет все API PPL плюс свои собственные API, которых у PPL нет.

отметим, что namespace Concurrency в VS2010 также содержит API среды выполнения параллелизма (ConcRT, поверх которого построен PPL), асинхронные агенты и т. д. TBB не имеет большей части этого, хотя у него есть некоторые (например,critical_section). В качестве альтернативы асинхронным агентам, последняя версия TBB features новый поток graph API.

теоретически, чтобы переключиться с PPL на TBB, вам просто нужно заменить путь, откуда вы берете ppl.h (с TBB заголовок входит в <tbbdir>/include/tbb/compat) и, конечно же, связь с библиотекой TBB. Однако в этом случае вы будете ограничены PPL API. Чтобы использовать" дополнительный " TBB API, который не существует в PPL (например,parallel_pipeline, parallel_reduce, concurrent_priority_queue и другие), вам нужно работать с TBB с самого начала.