Автоматизация параллельного программирования — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Автоматизация параллельного программирования

2021-01-31 56
Автоматизация параллельного программирования 0.00 из 5.00 0 оценок
Заказать работу

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

– разметка участков программы, допускающих автоматическое распарал- леливание;

– анализ участков и причин, препятствующих распараллеливанию про- граммы;

– выбор участков программы, допускающих их техническое приведение к форме, пригодной для распараллеливания;

– изобретение рецептов полуручного преобразования текста программы с целью расширения возможностей распараллеливания;

 
приведение текста программы к предельно распараллеливаемой форме;

– прогон распараллеленной версии программы для оценки выигрыша от параллелизма;

– частичное перепрограммирование и отладка фрагментов программы для исключения или смягчения эффектов, препятствующих достижению нужных характеристик производительности;

– установление частичной функциональной эквивалентности исходной программы и результирующей ее версии.

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

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


 

 

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

Предлагаются средства и методы типизации управления процессами, удобными для подготовки программ, ориентированных на исполнение с по- мощью Open MP или MPI. Идеи языков программирования по сетевому пред- ставлению типов управления и дисциплины работы с памятью еще не полу- чили удобной системной поддержки. Компонентно-ориентированная разра- ботка ПО может следовать единому сетевому определению семантики языков программирования и процесса разработки программ.

 
Некоторую поддержку работ по подготовке программ, использующих па- раллельные процессы, обеспечивает созданная фирмой Microsoft техноло- гия.NET, позволяющая применять общие системные библиотеки в програм- мах на разных языках программирования. Лидирующие в области поддержки параллелизма фирмы Intel и Microsoft предлагают разработчикам высокопро- изводительных вычислений новые решения, направленные на преобразова- ния программ в процессе их создания и распараллеливания:

– помощник по параллельному программированию (Parallel Advisor XE);

– компиляторы-отладчики и библиотеки (Parallel Composer XE2011);

– анализатор потоков и памяти (Parallel Inspector XE);

– профилировщик производительности (Parallel Amplifier XE).

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

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

 
Профилировщик производительности позволяет наблюдать эксперимен- тальную проверку достигнутой производительности программы.

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


 

 

конфигурацию. Часть проблем решает схема подготовки параллельных про- грамм с использованием библиотек преобразований исходного и объектного кода.

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

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

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

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

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


 

 

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

При анализе пригодности программы к распараллеливанию анализируются следующие потенциальные зоны риска:

– объявление и использование глобальных переменных;

– области видимости переменных и констант;

– определения распараллеливаемых процедур, содержащие внутренние вызовы других процедур;

– рекурсивные определения;

 
заголовки циклов, управляющие кратностью выполнения распараллели- ваемого тела цикла;

– ветвления и переключатели, дающие развилки потоков;

– обработчики исключений;

– реакции на события и сообщения;

– позиции возможного обмена данными между потоками;

– тиражирование данных в общей памяти и в файлах;

– списки параметров функций, возможно преобразуемые в данные в об- щей памяти;

– декомпозиция управления циклом и реорганизация соответствующих структур данных;

– границы участков изменения значений переменных;

– переменные для значений промежуточных вычислений;

– многократно выполняемые идентичные вычисления – избыточные;

– инкрементные переменные, динамику изменения которых желательно сохранять для пост-анализа;

– позиции диагностической аранжировки для пост-анализа;

– фактически не задействованные переменные и константные или не ис- пользуемые вычисления;

– параметризация зависимостей частей многопоточной программы от но- мера потока.

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


 

 

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

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

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

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

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

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


 

 

 
Лишь в последние годы в работах ИСП РАН наметилось более серьезное отношение к проблемам отладки параллельных программ, что представлено в форме появления теорий для обработки информации, подверженной искажениям, и методики сравнительной отладки программ, в которой задействовано понятие эталонной программы и схемы распределенного отладчика28.

 


Поделиться с друзьями:

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.038 с.