Автоматическое распараллеливание

Автоматическое распараллеливание

Автоматическое распараллеливание — оптимизация программы компилятором, состоящая в автоматическом ее преобразовании в форму, работающую на параллельном компьютере, например, на SMP или NUMA машине. Целью автоматизации распараллеливания является освобождение программиста от трудоемкого и подверженному ошибкам процесса ручного распараллеливания. Несмотря на то, что качество автоматического распараллеливания улучшалось последние годы, полное распараллеливание последовательных программ остается слишком сложной задачей, требующей сложнейших видов анализа программ.

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

Содержание

Анализ программ

Компиляторы проводят анализ перед проведением распараллеливания, чтобы ответить на следующие вопросы:

  • Безопасно ли распараллеливать данный цикл? Требуется аккуратный анализ зависимостей (en:Dependence analysis) и анализ независимости указателей или алиасов (en:alias analysis).
  • Стоит ли распараллеливать цикл? Ответ на этот вопрос требует надежной оценки (моделирования) работы программы и учета свойств параллельной системы.

Сложности

Автоматическое распараллеливание сложно для компиляторов по причинам:

  • Анализ зависимостей сложен для кода, использующего косвенную адресацию, указатели, рекурсию, вызовы функций по косвенности (например, виртуальные функции заранее неизвестного класса).
  • Циклы могут иметь неизвестное заранее количество итераций, усложняется выбор циклов, требующих распараллеливания.
  • Доступ к глобальным ресурсам тяжело координировать в терминах выделения памяти, ввода-вывода, разделяемых переменных.

Из-за сложности полного автоматического распараллеливания существует несколько подходов для его упрощения:

  • Дать программистам возможность добавлять к программе подсказки компилятору, чтобы влиять на процесс распараллеливания (либо чтобы упростить анализы, пометив указатели как непересекающиеся либо указав «горячие» циклы). Среди решений, требующих достаточно подробные инструкции для компилятора, можно указать High Performance Fortran для систем с распределенной памятью и OpenMP для систем с общей памятью.
  • Создать интерактивную систему компиляции, в работе которой принимал бы участие человек. Такие системы созданы в рамках подпроекта «SUIF Explorer» (проект SUIF — The Stanford University Intermediate Format compiler, http://suif.stanford.edu/), в компиляторах Polaris и ParaWise (среда CAPTools).
  • Добавить в аппаратуру спекулятивную многопоточность (en:speculative multithreading).

Ранние распараллеливающие компиляторы

Многие ранние распараллеливающие компиляторы работали с программами, написанными на фортране, из-за его более строгих ограничений на пересечение указателей (aliasing) по сравнению с Си. Кроме того на фортране написано большое количество программ вычислительной математики, требующие больших ресурсов для своей работы. Примеры компиляторов:

  • Rice Fortran D compiler
  • Vienna Fortran compiler
  • Paradigm compiler
  • Polaris compiler
  • SUIF compiler

Современные компиляторы с поддержкой распараллеливания

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Автоматическое распараллеливание" в других словарях:

  • Sun Studio — Скриншот среды разработки Sun Studio 12 Тип Среда разработки программного обеспечения Разработчик Sun Microsystems …   Википедия

  • Glasgow Haskell Compiler — Тип Компилятор Разработчик Университет Глазго Операционная система Кроссплатформенное программное обеспечение Последняя версия 7.6.1 (6 сентября 2012) Лицензия BSD …   Википедия

  • Intel C++ compiler — Тип Компилятор Разработчик Intel Операционная система Linux, Microsoft Windows и Mac OS X Аппаратная платформа x86, x86 64, IA 64 Последняя версия …   Википедия

  • Визуальное программирование — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (25 мая 2011) …   Википедия

  • Oracle Solaris Studio — Скриншот среды разработки Sun Studio 12 Тип Среда разработки программного обеспечения Разработчик …   Википедия

  • Wolfram Finance Platform — Тип Среда финансовых расчётов Разработчик Wolfram Research Лицензия Проприетарное программное обеспечение, коммерческая Сайт http://www.wolfram.com/finance platform/ Wolfram Finance Pl …   Википедия

  • Zabbix — 1.1 alpha 6 running under GNU/Linux …   Википедия

  • T++ — Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование, функциональное, параллельное программирование Тип исполнения: компилируемый Появился в: 1980 е …   Википедия

  • lftp — Тип клиент FTP Разработчик Александр Лукьянов Операционная система Unix like, Windows[источник не указан 37 дней] Последняя версия 4.3.6 (1 апреля 2012) Лицензи …   Википедия

  • Т-Система — средство автоматического динамического распараллеливания программ, призванное облегчить процесс разработки и использования сложных параллельных программ и их эффективное использование на различном, в том числе и неоднородном оборудовании.… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»