Автоматическое распараллеливание
Автоматическое распараллеливание — оптимизация программы компилятором, состоящая в автоматическом её преобразовании в форму, работающую на параллельной вычислительной системе, например, на SMP или NUMA машине. Целью автоматического распараллеливания является освобождение программиста от трудоемкого и подверженного ошибкам процесса ручного распараллеливания. Несмотря на то, что качество автоматического распараллеливания улучшалось последние годы, полное распараллеливание последовательных программ остается слишком сложной задачей, требующей сложнейших видов анализа программ. Автоматический параллелизатор обычно фокусируется на таких управляющих конструкциях, как циклы, обрабатывающие массивы, поскольку, в общем случае, большая часть выполнения программы проходит внутри каких-то циклов. Распараллеливающий компилятор пытается разделить цикл на части так, чтобы его отдельные итерации могли исполняться на разных вычислительных узлах одновременно. Анализ программКомпиляторы проводят анализ перед проведением распараллеливания, чтобы ответить на следующие вопросы:
СложностиАвтоматическое распараллеливание сложно для компиляторов по причинам:
Из-за сложности полного автоматического распараллеливания существует несколько подходов для его упрощения:
Ранние распараллеливающие компиляторыМногие ранние распараллеливающие компиляторы работали с программами, написанными на Фортране, из-за его более строгих ограничений на пересечение указателей (aliasing) по сравнению с Си. Кроме того, на Фортране написано большое количество программ вычислительной математики, требующих больших ресурсов для своей работы. Примеры компиляторов:
Современные компиляторы с поддержкой распараллеливанияСм. такжеПримечания
Ссылки
|
Portal di Ensiklopedia Dunia