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

Поделись знанием:
Перейти к: навигация, поиск

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

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





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

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

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

Сложности

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

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

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

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

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

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

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

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

См. также

Напишите отзыв о статье "Автоматическое распараллеливание"

Примечания

  1. 1 2 3 4 5 6 7 8 Patrick Lam. [patricklam.ca/p4p/2011/notes/pdf/L12.pdf Lecture 12. We'll talk about automatic parallelization today]. ECE459: Programming for Performance (February 10, 2011). Проверено 17 ноября 2013.
  2. 1 2 Robert van Engelen. [www.cs.fsu.edu/~engelen/courses/HPC/syllabus.html High-Performance Computing and Scientific Computing]. HPC @ Florida State University (October 3, 2012). Проверено 17 ноября 2013.

Ссылки

  • [eyolfson.ca/media/teaching/uwaterloo/ece459/1121/lectures/lecture-08.pdf Lecture 08 - Automatic Parallelization] // ECE 459: Programming for Performance, Jon Eyolfson, University of Waterloo, January 20, 2012

Отрывок, характеризующий Автоматическое распараллеливание

– Ведь получил же в прошлом году NN табакерку с портретом, – говорил l'homme a l'esprit profond, [человек глубокого ума,] – почему же SS не может получить той же награды?
– Je vous demande pardon, une tabatiere avec le portrait de l'Empereur est une recompense, mais point une distinction, – сказал дипломат, un cadeau plutot. [Извините, табакерка с портретом Императора есть награда, а не отличие; скорее подарок.]
– Il y eu plutot des antecedents, je vous citerai Schwarzenberg. [Были примеры – Шварценберг.]
– C'est impossible, [Это невозможно,] – возразил другой.
– Пари. Le grand cordon, c'est different… [Лента – это другое дело…]
Когда все поднялись, чтоб уезжать, Элен, очень мало говорившая весь вечер, опять обратилась к Борису с просьбой и ласковым, значительным приказанием, чтобы он был у нее во вторник.
– Мне это очень нужно, – сказала она с улыбкой, оглядываясь на Анну Павловну, и Анна Павловна той грустной улыбкой, которая сопровождала ее слова при речи о своей высокой покровительнице, подтвердила желание Элен. Казалось, что в этот вечер из каких то слов, сказанных Борисом о прусском войске, Элен вдруг открыла необходимость видеть его. Она как будто обещала ему, что, когда он приедет во вторник, она объяснит ему эту необходимость.
Приехав во вторник вечером в великолепный салон Элен, Борис не получил ясного объяснения, для чего было ему необходимо приехать. Были другие гости, графиня мало говорила с ним, и только прощаясь, когда он целовал ее руку, она с странным отсутствием улыбки, неожиданно, шопотом, сказала ему: Venez demain diner… le soir. Il faut que vous veniez… Venez. [Приезжайте завтра обедать… вечером. Надо, чтоб вы приехали… Приезжайте.]
В этот свой приезд в Петербург Борис сделался близким человеком в доме графини Безуховой.


Война разгоралась, и театр ее приближался к русским границам. Всюду слышались проклятия врагу рода человеческого Бонапартию; в деревнях собирались ратники и рекруты, и с театра войны приходили разноречивые известия, как всегда ложные и потому различно перетолковываемые.
Жизнь старого князя Болконского, князя Андрея и княжны Марьи во многом изменилась с 1805 года.
В 1806 году старый князь был определен одним из восьми главнокомандующих по ополчению, назначенных тогда по всей России. Старый князь, несмотря на свою старческую слабость, особенно сделавшуюся заметной в тот период времени, когда он считал своего сына убитым, не счел себя вправе отказаться от должности, в которую был определен самим государем, и эта вновь открывшаяся ему деятельность возбудила и укрепила его. Он постоянно бывал в разъездах по трем вверенным ему губерниям; был до педантизма исполнителен в своих обязанностях, строг до жестокости с своими подчиненными, и сам доходил до малейших подробностей дела. Княжна Марья перестала уже брать у своего отца математические уроки, и только по утрам, сопутствуемая кормилицей, с маленьким князем Николаем (как звал его дед) входила в кабинет отца, когда он был дома. Грудной князь Николай жил с кормилицей и няней Савишной на половине покойной княгини, и княжна Марья большую часть дня проводила в детской, заменяя, как умела, мать маленькому племяннику. M lle Bourienne тоже, как казалось, страстно любила мальчика, и княжна Марья, часто лишая себя, уступала своей подруге наслаждение нянчить маленького ангела (как называла она племянника) и играть с ним.
У алтаря лысогорской церкви была часовня над могилой маленькой княгини, и в часовне был поставлен привезенный из Италии мраморный памятник, изображавший ангела, расправившего крылья и готовящегося подняться на небо. У ангела была немного приподнята верхняя губа, как будто он сбирался улыбнуться, и однажды князь Андрей и княжна Марья, выходя из часовни, признались друг другу, что странно, лицо этого ангела напоминало им лицо покойницы. Но что было еще страннее и чего князь Андрей не сказал сестре, было то, что в выражении, которое дал случайно художник лицу ангела, князь Андрей читал те же слова кроткой укоризны, которые он прочел тогда на лице своей мертвой жены: «Ах, зачем вы это со мной сделали?…»