Каковы различия между Intel TBB и Microsoft PPL?
Я планирую начать "играть" с parallelism на основе задач для кросс-платформенного проекта. Я хотел использовать Intel Threading Building Blocks. Я начинаю с Windows и Visual Studio.
Поскольку я просто хочу прототип на данный момент, я думаю о "игре" только на окнах, а затем достаточно знаний для использования библиотеки на всех совместимых платформах.
Я узнал, что со времен VS2010 Microsoft предоставляет аналогичную библиотеку Parallel Processing Library, имеющую (почти) тот же интерфейс, что и Intel TBB.
Некоторые источники предлагают, в том числе блог команды TBB, что они создают его вместе и что он является той же библиотекой.
Однако он не очень явный, поскольку часто предполагал наличие незначительных различий между этими двумя библиотеками.
Итак, каковы эти различия, если таковые имеются?. Я должен начать напрямую с последнего стабильного ITBB или не рискует просто играть с Microsoft PPL в прототипах и использовать ITBB на кросс-платформенном "реальный" проект?
Ответы
Ответ 1
TBB является надмножеством PPL (как в VS2010), поэтому он предоставляет все PPL API plus его собственные API, которые не имеют PPL.
Обратите внимание, что namespace Concurrency
в VS2010 также содержит API Concurrency Runtime (ConcRT, поверх которого построена PPL), асинхронные агенты и т.д. TBB не имеет большинства из них, хотя у него есть некоторые (например, critical_section
). В качестве альтернативы асинхронным агентам последняя версия TBB показывает новый API потокового графа.
В теории, чтобы переключиться с PPL на TBB, вам просто нужно заменить путь от того места, где вы берете ppl.h(с TBB, заголовок входит в <tbbdir>/include/tbb/compat
) и, конечно, ссылку на DLL TBB. Однако в этом случае вы будете ограничены API PPL. Чтобы использовать "дополнительный" TBB API, который не существует в PPL (например, parallel_pipeline
, parallel_reduce
, concurrent_priority_queue
и др.), Вам нужно работать с TBB с самого начала.