Каковы различия между Intel TBB и Microsoft PPL? - PullRequest
28 голосов
/ 22 сентября 2011

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

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

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

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

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

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

1 Ответ

28 голосов
/ 23 сентября 2011

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

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

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

...