Сравнение среды выполнения с параллелизмом с другими моделями параллелизма

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

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

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

Подразделы

  • Сравнение планирования с вытеснением и совместного планирования

  • Сравнение среды выполнения с параллелизмом с Windows API

  • Сравнение среды выполнения с параллелизмом с OpenMP

Сравнение планирования с вытеснением и совместного планирования

Модели планирования с вытеснением и совместной работой являются распространенными способами распределения вычислительных ресурсов (например, процессоров или потоков оборудования) среди нескольких задач.

Планирование с вытеснением и совместной работой

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

Различия между планировщиками с вытеснением и совместной работой

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

Планировщик с вытеснением в режиме ядра требует зависимости кода приложения от операционной системы для принятия решений по планированию. Напротив, планировщик с совместной работой в режиме пользователя позволяет коду приложения выносить решения по планированию самостоятельно. Поскольку планирование с совместной работой позволяет приложению принимать большое количество решений по планированию, в этом случае значительно снижается нагрузка на систему, связанная с синхронизацией в режиме ядра. Как правило, если не имеется никакой другой работы для планирования, планировщик с совместной работой передает принятие решений по планированию ядру операционной системы. Планировщик с совместной работой также передает полномочия планировщику операционной системы, если имеется операция блокировки, передаваемая ядру, но не передаваемая планировщику в режиме пользователя. В операционных системах, поддерживающих планируемые потоки в режиме пользователя (UMS), планировщик среды выполнения с параллелизмом преобразует упомянутые операции блокировки в совместные операции блокировки.

Планирование совместной работы и эффективность

Для планировщика с вытеснением все задачи, имеющие один уровень приоритета, равны. Как правило, планировщик с вытеснением планирует потоки в том порядке, в котором они были созданы. Кроме того, планировщик с вытеснением предоставляет каждому потоку отрезок времени по принципу циклического перебора на основе приоритета потока. Хотя такой механизм обеспечивает равномерность (каждый поток продвигается вперед), эффективность работы при этом несколько снижается. Например, многие алгоритмы с большим объемом вычислений не требуют равномерного распределения ресурсов. В этих случаях гораздо важнее, чтобы общее время, затраченное на завершение связанных задач, было как можно меньше. Планирование с совместной работой позволяет приложению более эффективно планировать работу. Рассмотрим, например, приложение с большим количеством потоков. Планирование потоков, не использующих ресурсы совместно при параллельном выполнении, позволяет снизить нагрузку на систему при синхронизации и тем самым повысить эффективность. Еще одним эффективным способом планирования задач является выполнение конвейеров задач (где каждая последующая задача работает с выходными данными предыдущей) на одном процессоре, чтобы входные данные каждого этапа конвейера автоматически загружались в кэш памяти.

Одновременное использование планирования с вытеснением и совместной работой

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

[в начало]

Сравнение среды выполнения с параллелизмом с Windows API

Программный интерфейс приложений Microsoft Windows, который, как правило, называют Windows API (ранее известный как Win32) предоставляет модель программирования, позволяющую использовать в приложениях параллелизм. Среда выполнения с параллелизмом использует интерфейс Windows API для предоставления дополнительных моделей программирования, недоступных в базовой операционной системе.

Среда выполнения с параллелизмом использует потоковую модель Windows API для выполнения параллельной работы. Кроме того, среда выполнения использует механизмы управления памятью Windows API и локальной памяти потоков. В Windows 7 и Windows Server 2008 R2 среда выполнения с параллелизмом использует поддержку планируемых пользователями потоков и компьютеров, имеющих более 64 аппаратных потоков, интерфейсом Windows API. Среда выполнения с параллелизмом расширяет модель интерфейса Windows API, предоставляя планировщик совместных заданий и алгоритм переноса нагрузки для максимально эффективного использования вычислительных ресурсов и разрешая существование нескольких экземпляров планировщика одновременно.

Дополнительные сведения об интерфейсе Windows API см. в разделе Обзор интерфейса Windows API.

Языки программирования

В интерфейсе Windows API модель программирования предоставляется с использованием языка программирования С. Среда выполнения с параллелизмом предоставляет интерфейс программирования С++, в котором реализованы все новейшие возможности языка C++. Например, лямбда-функции предоставляют более краткий, типобезопасный механизм определения параллельных рабочих функций. Дополнительные сведения о новейших возможностях языка C++, используемых в среде выполнения с параллелизмом, см. в разделе Общие сведения о среде выполнения с параллелизмом.

Потоки и пулы потоков

Центральным механизмом параллелизма в интерфейсе Windows API является поток. Как правило, для создания потоков используется функция CreateThread. Хотя потоки относительно легко создавать и использовать, операционная система выделяет на управление ими значительное количество времени и других ресурсов. Более того, несмотря на то что всем потокам одного уровня приоритета гарантируется равное время выполнения, соответствующая нагрузка на систему требует создания достаточно крупных задач. При работе с более мелкими или специфическими задачами нагрузка на систему при работе в режиме параллелизма может сводить к нулю преимущества от параллельного выполнения задач.

Пулы потоков являются одним из способов снижения затрат на управление потоками. Пользовательские пулы потоков и реализация пула потоков, предоставляемые интерфейсом Windows API, позволяют эффективно выполнять небольшие рабочие элементы в параллельном режиме. Пул потоков Windows помещает рабочие элементы в очередь, обслуживаемую по принципу "первым поступил — первым обслужен" (FIFO). Каждый рабочий элемент запускается в том порядке, в каком он был добавлен в пул.

Среда выполнения с параллелизмом реализует алгоритм переноса нагрузки для расширения механизма планирования FIFO. Этот алгоритм перемещает задачи, которые еще не были начаты, в потоки, в которых заканчиваются рабочие элементы. Алгоритм переноса нагрузки позволяет не только равномерно распределять рабочую нагрузку, но и изменять порядок рабочих элементов. Из-за изменения порядка последовательность запуска рабочих элементов может отличаться от последовательности передачи элементов в пул. Это свойство полезно использовать с рекурсивными алгоритмами, так как в этом случае выше вероятность совместного использования данных более новыми задачами, чем поступившими ранее. Приоритетное выполнение новых элементов позволяет снизить число пропусков попаданий в кэш и, вероятно, число ошибок страницы.

С точки зрения операционной системы перенос нагрузки не является "справедливым" методом работы. Однако если приложение реализует алгоритм или задачу для параллельного выполнения, адекватность распределения ресурсов между подзадачами часто не имеет значения. В этом случае важнее то, насколько быстро завершается общая задача. Для других алгоритмов FIFO является адекватной стратегией планирования.

Поведение в различных операционных системах

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

В Windows 7 и Windows Server 2008 R2 операционная система дополнительно обеспечивает поддержку параллелизма и масштабируемости. Так, эти операционные системы поддерживают компьютеры, имеющие более 64 аппаратных потоков. Чтобы воспользоваться преимуществами этих новых возможностей, необходимо изменить существующее приложение, использующее интерфейс Windows API. Однако приложение, включающее среду выполнения с параллелизмом, автоматически использует эти возможности и не требует изменений.

Windows 7 и Windows Server 2008 R2 обеспечивают, кроме того, поддержку планируемых потоков в режиме пользователя (UMS). UMS-потоки повышают эффективность планирования работы планировщиками в режиме пользователя и ядром. Хотя UMS не отказывается от принципов вытеснения, эффективность в данном случае повышается благодаря возможности приложений и библиотек выполнять совместное планирование без переходов в режиме ядра. UMS также возвращает контроль приложению, если поток заблокирован в ядре, чтобы приложение за оставшуюся часть выделенного временного отрезка могло выполнить дополнительную работу. Среда выполнения с параллелизмом автоматически использует UMS-планирование, если оно поддерживается операционной системой. Дополнительные сведения о UMS см. в разделе Планирование в режиме пользователя.

[в начало]

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

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

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

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

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

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

[в начало]

См. также

Ссылки

Общие сведения о Windows API

Основные понятия

Среда выполнения с параллелизмом

Общие сведения о среде выполнения с параллелизмом

Библиотека параллельных шаблонов

Библиотека асинхронных агентов

Другие ресурсы

OpenMP in Visual C++

Журнал изменений

Дата

Журнал

Причина

Июль 2010

Добавлены сведения о миграции и взаимодействии.

Улучшение информации.