VC10 PPL или подготовка к потоку STL

Я использую MSVC 2010, запускаю новый MFC-проект и теперь пытаюсь решить, какую библиотеку использовать для параллельных задач. Я знаю о новых функциях потоков C++0x, но они не реализованы в VC10. VC12 пока не вариант, но он появится в будущем. У меня есть Microsoft PPL, который мне кажется хорошим, но мы можем перейти с Windows на Linux для новых проектов, так что для повторного использования кода, может быть, использование STL более переносимо? Для этого у меня есть возможность использовать boost, чтобы перейти на стандартную версию с VC12.

Мой вопрос в том, что я должен предпочесть, PPL или временно повысить, а затем std? Я хотел бы услышать ваш опыт с обоими, какой из них более мощный, более удобный, преимущества и недостатки.


person DaBrain    schedule 20.05.2013    source источник


Ответы (2)


Библиотеки параллелизма PPL и C++11 на самом деле не являются прямыми заменами. PPL предлагает более высокий уровень, основанный на задачах подход к параллелизму, и с ним проще работать и он более эффективен, чем управление потоками напрямую с помощью std::thread или аналогичных библиотек потоков. PPL также включает в себя такие вещи, как параллельные алгоритмы (parallel_for_each, parallel_transform, parallel_reduce, parallel_sort и т. д.) и параллельные контейнеры, которые не включены в библиотеки параллелизма C++11.

Также стоит отметить, что PPL и Intel TBB (Threading Building Blocks) в значительной степени предназначены для совместного использования одного и того же интерфейса, а TBB поддерживается в Linux, поэтому при использовании PPL существует некоторая межплатформенная переносимость. У Intel, Microsoft и NVIDIA есть совместное предложение по библиотеке параллельных алгоритмов для будущих версий стандарта C++ (C++14 и выше), основанных на PPL/TBB.

person mattnewport    schedule 22.05.2013

Потоки Boost просты, переносимы, хорошо документированы и являются моей обычной формой параллелизма в C++ в наши дни. Если вы думаете о сборке Linux, не полагайтесь на какие-либо функции VC, иначе ваш переход будет очень болезненным (я сам делал это раньше...).

При этом новый STL-контент во многих отношениях очень похож на boost, поэтому вы можете без особых проблем использовать boost в качестве трамплина для перехода к std. Я бы прочитал этот пост о различиях между boost и C++11 threads и интерпретировать для вашего варианта использования, прежде чем я приму конкретное решение.

Мой опыт работы с PPL довольно ограничен, но создание задач (потоков) может немного отличаться от традиционных потоков и иметь другие параметры пути управления. Вы также, скорее всего, исправитесь в Visual Studio/Windows, если пойдете по маршруту PPL, так что учитывайте это при оценке выбора библиотеки. Я читал, что хорошие примеры PPL немного разрежены (вероятно, поэтому быстрый поиск не дал мне лучшего результата при сравнении PPL с другими библиотеками параллелизма).

person Pyrce    schedule 20.05.2013