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

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

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

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

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

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

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


person Klaim    schedule 22.09.2011    source источник
comment
Какая польза от первого использования PPL, а затем перехода на TBB?   -  person Andriy Tylychko    schedule 22.09.2011
comment
В зависимости от вашей задачи, возможно, OpenMP будет вполне достаточно. По моему опыту, например, он лучше справляется с обработкой изображений.   -  person Alex F    schedule 22.09.2011
comment
@Alex: это точно. обработка изображений - классический и простой пример распараллеливания данных. OP говорит о параллелизме на основе taks. В любом случае OpenMP намного проще, поэтому в любом случае его следует пересмотреть.   -  person Andriy Tylychko    schedule 22.09.2011
comment
@AndyT: PPL автоматически доступен в Visual Studio 2010, который я использую - ничего настраивать, просто включать и код - мне не нужно беспокоиться об установке чего-либо и настройке библиотеки для каждого прототипа (это можно автоматизировать, но все равно время дорогое - даже с CMake). Если я могу прототипировать что-то в PPL и быть уверенным, что он будет работать и компилироваться без модификации с помощью ITBB, тогда я могу начать непосредственно с PPL и использовать ITBB в реальном проекте - это кроссплатформенный.   -  person Klaim    schedule 22.09.2011
comment
@AlexFarber: Не по теме: мне нужно специально попрактиковаться в распараллеливании на основе задач. Я уже знаю, когда хватит OpenMP.   -  person Klaim    schedule 22.09.2011
comment
@Klaim: сравните: а) загрузите и установите TBB (~ час); б) позже переключиться на TBB (даже если TBB очень похож на PPL, это может занять намного больше часа)   -  person Andriy Tylychko    schedule 22.09.2011
comment
ох, и лицензирование. Я не знаю, взимает ли MS плату за коммерческое использование PPL?   -  person Andriy Tylychko    schedule 22.09.2011
comment
@AndyT Настройка каждого прототипа для включения ITBB может быть затратной по времени по сравнению с простым использованием PPL и без необходимости ничего менять. Я не знаю, сколько времени занимает b), поэтому я спрашиваю, потому что из того, что я читал, кажется, так мало различий, что это может быть просто замена всех файлов, которые нужно получить из PPL в TBB. Если у вас есть более конкретная информация о коммутаторе, будь моим гостем и опубликуйте полный ответ. :)   -  person Klaim    schedule 22.09.2011
comment
PPL - это параллельная библиотека шаблонов? Что касается затрат, это библиотека времени компиляции. Вы можете свободно использовать вывод компилятора даже с бесплатными выпусками Express.   -  person MSalters    schedule 22.09.2011


Ответы (1)


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

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

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

person Alexey Kukanov    schedule 23.09.2011
comment
Отличный ответ, очень точный! Теперь я понимаю нечеткую информацию об обеих библиотеках: каждый раз, когда что-то расширяется, но все же отличается добавлением от чего-то еще, это сбивает всех с толку. См., Например, C и C ++ ... в любом случае спасибо! Я буду использовать TBB с самого начала. - person Klaim; 23.09.2011
comment
@ Nik-Lz, на протяжении многих лет мы не видели значительного спроса на совместимость исходного кода между TBB и PPL. Что касается TBB, мы сохраняем исходную совместимость с предыдущими версиями библиотек и, возможно, со старыми версиями PPL. Но мы не следили за развитием PPL, поэтому в TBB наверняка пропущены дополнения. В то же время многие из общих классов / функций были расширены в TBB, например, для поддержки семантики перемещения C ++. Я думаю, что теперь TBB и PPL - это две достаточно разные библиотеки потоков с ограниченным общим подмножеством API. - person Alexey Kukanov; 30.10.2018