Переход от OpenMP к среде выполнения с параллелизмом
Среда выполнения с параллелизмом позволяет использовать самые разные модели программирования. Эти модели могут частично совпадать с моделями других библиотек или дополнять их. В документах в этом разделе OpenMP сравнивается со средой выполнения с параллелизмом. Также даны примеры миграции существующего кода OpenMP для использования среды выполнения с параллелизмом.
Модель программирования OpenMP определяется открытым стандартом и имеет четко определенные привязки к языкам программирования Fortran и C/C++. OpenMP версий 2.0 и 2.5, поддерживаемых компилятором Visual 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 для использования среды выполнения с параллелизмом
Показывает, как преобразовать простой цикл, использующий директивы parallel и for OpenMP, для использования алгоритма Concurrency::parallel_for среды выполнения с параллелизмом.Практическое руководство. Преобразование цикла OpenMP, использующего отмену для использования среды выполнения с параллелизмом
Показывает, как преобразовать цикл OpenMP parallel for, для которого не требуется выполнение всех итераций, для выполнения с использованием механизма отмены среды выполнения с параллелизмом.Практическое руководство. Преобразование цикла OpenMP, использующего обработку исключений для использования среды выполнения с параллелизмом
Показывает, как преобразовать цикл OpenMP parallel for, выполняющий обработку исключений, для использования механизма обработки исключений среды выполнения с параллелизмом.Практическое руководство. Преобразование цикла OpenMP, использующего переменную сокращения для использования среды выполнения с параллелизмом
Показывает, как преобразовать для использования среды выполнения с параллелизмом цикл parallel for OpenMP, использующий предложение reduction.
См. также
Основные понятия
Среда выполнения с параллелизмом
Библиотека параллельных шаблонов
Библиотека асинхронных агентов