Переход от OpenMP к среде выполнения с параллелизмом

Среда выполнения с параллелизмом позволяет использовать самые разные модели программирования. Эти модели могут перекрываться с моделями других библиотек или дополнять их. Документы в этом разделе сравнивают OpenMP с средой выполнения параллелизма и предоставляют примеры переноса существующего кода OpenMP для использования среды выполнения параллелизма.

Модель программирования OpenMP определяется открытым стандартом и обладает четко определенными привязками к языкам программирования Fortran и C/C++. OpenMP версии 2.0 и 2.5, поддерживаемые компилятором Microsoft C++, хорошо подходят для параллельных алгоритмов, которые являются итеративными; то есть они выполняют параллельную итерацию по массиву данных. OpenMP 3.0 поддерживает неитеративные задачи в дополнение к итеративным задачам.

OpenMP работает наиболее эффективно при предопределенной степени параллелизма и соответствующем уровне доступных ресурсов в системе. Модель OpenMP является особенно хорошим совпадением для высокопроизводительных вычислений, где очень большие вычислительные проблемы распределяются по ресурсам обработки одного компьютера. В этом сценарии среда оборудования, как правило, исправлена, и разработчик может разумно ожидать монопольного доступа ко всем вычислительным ресурсам при выполнении алгоритма.

Однако менее ограниченные вычислительные среды могут не быть хорошим совпадением для OpenMP. Например, рекурсивные проблемы (например, алгоритм быстрого сортировки или поиск дерева данных) сложнее реализовать с помощью OpenMP 2.0 и 2.5. Среда выполнения параллелизма дополняет возможности OpenMP, предоставляя библиотеку асинхронных агентов и библиотеку параллельных шаблонов (PPL). Библиотека асинхронных агентов поддерживает грубое параллелизм задач; PPL поддерживает более подробные параллельные задачи. Среда выполнения параллелизма предоставляет инфраструктуру, необходимую для параллельного выполнения операций, чтобы сосредоточиться на логике приложения. Однако, поскольку среда выполнения параллелизма включает различные модели программирования, ее планирование может быть больше, чем другие библиотеки параллелизма, такие как OpenMP. Поэтому рекомендуется постепенно протестировать производительность при преобразовании существующего кода OpenMP для использования среды выполнения параллелизма.

При переходе из OpenMP в среду выполнения параллелизма

Возможно, рекомендуется перенести существующий код OpenMP для использования среды выполнения параллелизма в следующих случаях.

Обращения Преимущества среды выполнения параллелизма
Требуется расширяемая параллельная платформа программирования. Многие функции в среде выполнения с параллелизмом можно расширить. Кроме того, можно объединять существующие функции для создания новых. Так как OpenMP использует директивы компилятора, его нельзя легко расширить.
Ваше приложение может воспользоваться совместными блокировками. Если блоки задач, так как для него требуется ресурс, который еще недоступен, среда выполнения параллелизма может выполнять другие задачи, пока первая задача ожидает ресурса.
Ваше приложение может воспользоваться динамической балансировкой нагрузки. Среда выполнения параллелизма использует алгоритм планирования, который корректирует выделение вычислительных ресурсов по мере изменения рабочих нагрузок. В OpenMP, когда планировщик выделяет вычислительные ресурсы параллельному региону, эти выделения ресурсов фиксируются на протяжении всего вычисления.
Требуется поддержка обработки исключений. PPL позволяет перехватывать исключения как внутри, так и за пределами параллельного региона или цикла. В OpenMP необходимо обрабатывать исключение внутри параллельного региона или цикла.
Требуется механизм отмены. PPL позволяет приложениям отменять как отдельные задачи, так и параллельные деревья работы. OpenMP требует, чтобы приложение реализовало собственный механизм отмены.
Требуется параллельный код для завершения в другом контексте, с которого он запускается. Среда выполнения параллелизма позволяет запускать задачу в одном контексте, а затем ждать или отменять эту задачу в другом контексте. В OpenMP все параллельные работы должны завершиться в контексте, с которого он запускается.
Требуется расширенная поддержка отладки. Visual Studio предоставляет окна параллельных стеков и параллельных задач, чтобы упростить отладку многопоточных приложений.

Дополнительные сведения о поддержке отладки среды выполнения параллелизма см. в разделе "Использование окна задач", "Использование окна параллельных стеков" и пошаговое руководство. Отладка параллельного приложения.

Если не выполнять миграцию из OpenMP в среду выполнения параллелизма

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

Обращения Описание
Ваше приложение уже соответствует вашим требованиям. Если вы удовлетворены производительностью приложения и текущей поддержкой отладки, миграция может оказаться неправильной.
Параллельные тела цикла выполняют небольшую работу. Издержки планировщика задач среды выполнения параллелизма могут не преодолеть преимущества параллельного выполнения цикла, особенно если тело цикла относительно небольшое.
Приложение написано на языке C. Так как среда выполнения параллелизма использует множество функций C++, она может быть не подходит, если вы не сможете писать код, позволяющий приложению C полностью использовать его.

Практическое руководство. Преобразование параллельного цикла for OpenMP для использования среды выполнения с параллелизмом

Учитывая базовый цикл, использующий параллель OpenMP и для директив, демонстрирует, как преобразовать его для использования параллелизма среды выполнения параллелизма::p arallel_for алгоритма.

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

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

Практическое руководство. Преобразование цикла OpenMP, использующего переменную сокращения для использования среды выполнения с параллелизмом
Учитывая параллель OpenMP для цикла, использующего предложение сокращения, демонстрирует, как преобразовать его для использования среды выполнения параллелизма.

См. также

Среда выполнения с параллелизмом
OpenMP
Библиотека параллельных шаблонов
Библиотека асинхронных агентов