Главная страница
Навигация по странице:

  • 4.3 Автоматизация распараллеливания алгоритмов 4.3.1 Распараллеливающие компиляторы

  • 4.3.2 Автоматическое распараллеливание с помощью Т-системы Разработка технологии автоматического динамического распараллелива- ния программ (названная ‘Т-система’) веде

  • 4.3.3 Непроцедурный декларативный язык НОРМА

  • Параллельные вычисления


    Скачать 1.75 Mb.
    НазваниеПараллельные вычисления
    Дата06.05.2019
    Размер1.75 Mb.
    Формат файлаpdf
    Имя файла[Bakanov_V.M.]_Parallelnuee_vuechisleniya__Uchebno(z-lib.org).pdf
    ТипУчебное пособие
    #76301
    страница15 из 16
    1   ...   8   9   10   11   12   13   14   15   16
    овые средства Linda на самом деле допускают широкие возможности по синхронизации процессов, реализации работающих по схеме
    ‘главный/подчиненный’ программ и т.д. Linda эффективна для многопроцес- сорных вычислительных систем, обладающих общей памятью (только в при размещении пространства кортежей в памяти такого типа возможно реали- зовать быстроту операций с кортежами); при реализации Linda для систем с распределенной памятью возникают проблемы, аналогичные NUMA- системам (VSM - Virtual Share Memory - виртуальная разделяемая память в системе Linda реализуется программно).
    В настоящее время Linda коммерчески поддерживается образованной в
    1980 г. фирмой SCA (Scientific Computing Associates, Inc.), торговая марка
    TCP Linda (
    http://www.lindaspaces.com, lunix-support@LindaSpaces.com
    ) включа- ют графическую отладочную среду Tuplescope. На основе VSM фирмой SCA разработаны системы Piranha (средство объединения персональных ЭВМ в многопроцессорную вычислительную систему), JParadise (система поддерж- ки распределенных прикладных Java-программ), SCA предлагает также Win- dows-вариант системы программирования Linda и (совместно с OptTek
    Systems, Inc., http://www.opttek.com
    ) параллельную версию библиотеки
    OptQuest Callable программных пакетов многомерной оптимизации.
    Linda использована при разработке системы Gaussian'03 (изучение элек- тронной структуры химических веществ), применена при разработке системы
    Paradise для параллелизации процесса обнаружения знаний в базах данных
    (технология Data Mining), используется фирмой Motorola, Inc. при проекти-

    - 106 - ровании микросхем, для поддержки финансовой деятельности, обработки данных геофизических исследований при морской нефтедобыче и др.
    Низкоуровневая модель передачи сообщений (MPI). Модели параллелизма: по данным (HPF), по данным и по управлению (DVM), гибридная модель параллелизма по управлению с передачей сообщений (OpenMP+MPI), сис- тема НОРМА.
    4.3 Автоматизация распараллеливания алгоритмов
    4.3.1 Распараллеливающие компиляторы
    Желание автоматизировать процесс перевода в параллельный вариант ог- ромного количества наработанного (и вновь разрабатываемого) программно- го обеспечения является более чем естественным.
    Разработка полностью автоматически распараллеливающего компилято-
    ра, казалось, может снять все проблемы программиста. К сожалению, реаль- ные разработки в этом направлении не впечатляют своей эффективностью.
    Во-первых, априори невозможно создать такой компилятор универсальным
    (вследствие наличия значительного количества архитектур ЭВМ и систем команд процессоров, при этом оптимизированный для одной системы ком- пилятор окажется малоэффективным для другой). Во-вторых, (на основе опыта уже разработанных систем параллельного программирования) пред- ставляется проблематичной сама идея полностью автоматического распа- раллеливания (подобная система должна обладать существенными чертами искусственного интеллекта и, скорее всего, будет громоздкой и трудно на- страиваемой). Весьма проблематична (хотя на сегодняшний день уже скорее чисто технически) разработка единой схемы распараллеливания произволь- ного алгоритма с отображением на архитектуру реальной ЭВМ (именно здесь как нельзя более полезны приемы классификации и описания архитектур).
    Именно поэтому обычно ограничиваются задачей синтаксического анализа исходно-параллельного текста с целью выявления потенциального паралле- лизма и генерацией распараллеленного исходного текста (часто в стиле MPI), компиляция этой программы осуществляется машинно-зависимым компиля- тором с поддержкой библиотеки MPI (частично такие системы описаны в подразделе 3.2).
    Например, в состав полнофункционального пакета Forge90 (APR - Applied
    Parallel Research, Inc., http://www.infomall.org/apri//index.html, forge@netcom.com
    )
    входят препроцессоры dpf, spf, xhpf
    (для систем с распределенной памятью, общей памятью и для использования программирования в HPF-стиле соот- ветственно), позволяющие на основе исходного текста последовательного алгоритма сформировать текст, уже распараллеленный в технологии PVM на
    Fortran’77; подобные пакеты объемны и дорогостоящи.

    - 107 -
    4.3.2 Автоматическое распараллеливание с помощью Т-системы
    Разработка технологии автоматического динамического распараллелива- ния программ (названная ‘Т-система’) ведется с конца 80-х г.г. в Институте программных средств РАН (г. Переславль-Залесский). В целом стиль Т- программирования близок традиционным языкам программирования
    (Fortran, C/C++), причем явное указание на параллельность выполнения бло- ков программы в тексте отсутствует.
    Базовые принципы Т-системы основаны на результатах общей теории
    функционального программирования (ФП). Теоретические основы импера-
    тивного (операторного) программирования были заложены в 1930-х г.г.
    (Алан Тьюринг, Джон фон Нейман), положенная в основу функционального подхода теория родилась в 1920
    ÷
    1930-х г.г. (комбинаторная логика - Мозес
    Шенфинкель, Хаскелл Карри, лямбда-исчисление - Алонзо Черч, 1936).
    Математические функции выражают связь между параметрами (входом) и результатом (выходом) некоторого процесса. Вычисление – также процесс, имеющий вход и выход, при этом функция является вполне подходящим и адекватным средством описания вычислений. Именно этот простой принцип положен в основу функциональной парадигмы и функционального стиля программирования. Функциональная программа представляет собой набор определений функций. Функции определяются через другие функции или рекурсивно через самих себя. В процессе выполнения программы функции получают параметры, вычисляют и возвращают результат, в случае необхо- димости вычисляя значения других функций. Программируя на функцио- нальном языке, программист не должен описывать порядок вычислений - ему необходимо лишь описать желаемый результат в виде системы функций.
    Функции в ФП не имеют побочных эффектов. Обращение к функции не вызывает иного эффекта, кроме вычисления результата (в этом смысле при- вычные вызовы традиционных языков программирования суть процедуры, а не функции в понятии ФП); это устраняет серьезный источник ошибок и де- лает порядок выполнения функций несущественным (так как побочные эф- фекты не могут изменять значение выражения, оно может быть вычислено в
    любое время).
    Теория функционального программирования долгое время оставалась
    ‘гадким утенком’ (в противоположность идеям императивного программиро- вания) до момента разработки первого почти функционального языка про- граммирования Lisp (Джон МакКарти, 1950). К началу 1980-х г.г. появились
    ФП-языки ML, Scheme, Hope, Miranda, Clean и др.; одной из популярных в настоящее время реализаций ФП-подхода является язык Haskell (Хаскелл
    Карри, начало 1990-х г.г., http://www.haskell.org
    ).

    - 108 -
    Важной особенностью Haskell является механизм ‘ленивых (отложенных)
    вычислений’. В традиционных языках программирования (например, Fortran,
    C/С++) вызов функции приводит к вычислению всех аргументов (‘вызов-по-
    значению’); при этом если какой-либо аргумент не использовался в функции, то результат вычислений пропадает, т.е. вычисления были произведены впус- тую. Альтернативой вызова-по-значению является вызов-по-необходимости
    (этом случае аргумент вычисляется, только если он действительно необходим для вычисления результата); понятный программисту пример – выполнение оператора конъюнкции
    &&
    из C/C++, который никогда не вычисляет значе- ние второго аргумента, если первый аргумент суть ‘ложь’. Языки, исполь- зующие отложенные вычисления, называются нестрогими (примеры –
    Haskell, Gofer, Miranda); если функциональный язык не поддерживает отло- женные вычисления, он является строгим (языки Scheme, Standard ML,
    Caml, в таких языках порядок вычисления строго определен).
    Одно из главенствующих понятий Т-системы – ‘чистые’ функции (функ- ции без побочных эффектов при вычислениях); чистая функция может быть выполнена параллельно с основной программой. Чистыми (отсутствуют по-
    бочные эффекты) обычно являются нестрогие языки.
    В каждый момент времени выделяются готовые к вычислению ‘подвыра- жения’ и распределяются по имеющимся процессорам, при этом за основу берется граф, узлы которого представляют выбранные функции, а дуги соот- ветствуют отношению ‘выражение-подвыражение’.
    Для использования возможностей функционального программирования в традиционные языки вводится понятие неготового значения. В применении к
    С это выражается введением дополнительного атрибута tval описания пере- менных, tval int j определяет переменную, значение которой может быть це- лым числом или неготовым (пока не посчитанным) значением, в описании функции без побочных эффектов необходим атрибут tfun
    , выходного значе- ния – tout
    , глобальной ссылки на неготовую переменную - tptr
    (измененный таким образом С++ получил название Т++, см. Приложение 3).
    Т-система запускает чистые функции как ветви параллельной программы, а
    неготовые переменные (НП) являются основным средством синхронизации их выполнения. При чтении НП происходит блокировка процесса вычисле- ния, выполнившего такое обращение, причем ожидание продлится до тех пор, пока переменная не получит готового значения (исключение – операция присваивания НП, при этом блокировка не возникает). При записи обычного значения в НП она становится готовой для всех выражений, в которые она входит; ранее заблокированные на ней процессы выходят из блокировки.
    Т-система снабжена развитыми системами отладки – от начальной прогон- ки программы на последовательной машине (
    t
    -атрибуты в этом режиме игно- рируются) до использования спецметодов (трассировка, профилировка и др.) для оптимизации при выполнении на многопроцессорной ЭВМ.

    - 109 -
    Преимущества Т-системы заключается в практически полном освобожде- нии программиста от обдумывания деталей описания распараллеливания, не- достатки – в требовании описания алгоритма в функциональном стиле (фор- мально необходимо составить программу в виде набора чистых Т-функций, что непривычно). Вычислительная сложность Т-функций (она задает размер гранулы параллелизма) также должна определяться программистом (излишне малая приведет к чрезмерным накладным расходам по обмену данными ме- жду процессорами, слишком большая – к неравномерной загрузке вычисли- тельных узлов).
    4.3.3 Непроцедурный декларативный язык НОРМА
    Свободно распространяемым инструментом автоматизации создания па- раллельных MPI-программ является система HOPМА
    (h ttp://www.keldysh.ru/pages/norma
    ), позволяющая (на основе специализирован- ного декларативного языка) синтезировать исходный Fortran/С - текст с вы- зовами MPI [9]. Непроцедурный язык НОРМА является проблемно- ориентированным и предназначен для автоматизации решения сеточных
    задач на вычислительных системах с параллельной архитектурой. Этот язык позволяет исключить фазу параллельного программирования, которая необ- ходима при переходе от расчетных формул, заданных прикладным специали- стом, к программе.
    Концепция непроцедурного языка НОРМА (Непроцедурное Описание Раз-
    ностных Моделей Алгоритмов или НОРМАльный уровень общения приклад-
    ного математика с компьютером, http://www.keldysh.ru/pages/norma
    ) предло- женная еще в 60-х г.г. в ИПМ им.М.В.Келдыша РАН.
    Язык НОРМА называют декларативным вследствие упора именно на описание правил вычисления значений, а не на исчерпывающе подробную конкретизацию алгоритма. Разработчик прикладных программ абстрагиру- ется от особенностей конкретных ЭВМ и мыслит в привычных терминах своей предметной области (сеточные методы математической физики, в ос- новном метод конечных разностей - МКР). Система НОРМА включает синте- затор, назначением которого является преобразование НОРМА-текста в
    (один из привычных) языковых стандартов параллельного или последова- тельного программирования (в настоящее время существует возможность получения Fortran’MPI, Fortran’PVM, Fortran’77 или соответствующих C- текстов). Именно синтезатор учитывает архитектуру конкретной ЭВМ, в са- мом языке НОРМА не предусмотрено никаких указаний на параллелизм или описания структуры целевого компьютера (см. Приложение 4).
    Эффективный автоматический синтез параллельного кода на основе НОР-
    МА-программы достигается определенными ограничениями языка, важное из которых – отсутствие многократного присваивания (при этом несущественна

    - 110 - последовательность операторов, отсутствуют глобальные переменные, за- прещена рекурсия, нет побочных эффектов при вычислениях и др., [9]). Ис- ходный текст на НОРМА в высшей степени близок к записи численного ме- тода решения конкретной задачи. В записи на языке НОРМА отсутствуют избыточные информационные связи (полный анализ которых как раз и явля- ется ‘ахиллесовой пятой’ систем выявления скрытого параллелизма), что и позволяет реализовать эффективное автоматическое распараллеливание. За- метим явное сходство парадигмы системы НОРМА с (использованной при разработке Т-системы) идеей функционального программирования.
    Программа на НОРМА содержит не менее одного раздела. Возможны раз- делы трех видов: главный (ключевые слова MAIN PART), простой (PART) и
    раздел-функция (FUNCTION), разделы могут вызывать друг друга по имени
    (рекурсия запрещена) и обмениваться данными с помощью механизма фор- мальных и фактических параметров или путем использования внешних фай- лов (описания INPUT и OUTPUT). Все описанные в списке формальных па- раметров до слова RESULT являются входными данными, далее – выходные
    (для раздела FUNCTION слово RESULT не используется, т.к. результат вы- числения функции связывается с именем и типом последней). Описанные в разделе переменные являются локальными, глобальных переменных не су- ществует.
    В теле раздела могут быть заданы (в произвольном порядке) описания,
    операторы и итерации. Важным понятием НОРМА является одномерная об-
    ласть, путем операции произведения областей строится многомерная область
    (с каждой размерностью связывается имя индекса). Возможна операция мо-
    дификации областей (добавление/удаление точек, изменение диапазона). Ус-
    ловная область представляет собой подобласть, определяемую выполнением некоторого условия над значениями точек области. Мощность языка НОРМА выражена коллективными операциями над узлами областей (поддерживается линейная топология и двумерная решетка).
    В НОРМА определены имеющие привычные типы REAL, INTEGER,
    DOUBLE и идентифицируемые именами скалярные величины и величины на
    области (последние связаны с конкретной областью и индексированы).
    Скалярные операторы вычисляют арифметические значения скаляров, оператор ASSUME вычисляет арифметические значения величин на областях
    (вычисляются все значения по индексам области). Для выполнения итераций имеется специальная конструкция ITERATION. В НОРМА определены стан- дартные арифметические функции, функции редукции и внешние функции
    пользователя (могут быть вызовами функций на Fortran'е). Заключенные в ограничители # ... # операторы выполняются строго в порядке их следования в программе. Более подробно описание языка см. в [9] и на сайте http://www.keldysh.ru/norma

    - 111 -
    Однако для создания НОРМА-программы все же требуется программист, знакомый с правилами языка и формально ‘набивающий’ (после этапа обду- мывания) исходный текст программы. Особенности НОРМА позволяют сде- лать следующий шаг в сторону, противоположную операции разработки про- граммы в виде последовательной записи операторов, т.е. вообще не приме- нять текстовое представление программы. Логично снабдить синтезатор
    НОРМА интерактивной графической подсистемой, позволяющей манипули- ровать с программой как с отображением в виде графики и гипертекста сово- купности объектов (включая формулы, вводимые пользователем в отдель- ные поля гипертекстовых форм) [5].
    Рисунок 26 — Этапы создания исполняемых программ: a) - классический подход, б) - использование НОРМА-программирования совместно с оболочкой ‘Интерактив- ная НОРМА’
    С этой целью на кафедре ИТ-4 МГAПИ разрабатывается система ‘Интерак- тивная НОРМА’ (
    http://norma.deniz.ru
    ), позволяющая создавать параллельные программы практически без написания исходных текстов на языке програм- мирования (рис.26б).
    4.4 Стандартные предметно-ориентированные
    библиотеки параллельных вычислений
    При всей широте средств разработки параллельных программ создавать такие программы (и особенно эффективные!) все же очень и очень непросто.
    Одним из путей разработки эффективных параллельных программ является использование предметно-ориентированных библиотек.

    - 112 -
    В этом случае оптимизация вообще скрыта от проблемного программиста.
    Чем больший объем работы внутри программы отводится подпрограммам такой библиотеки, тем большим будет итоговый выигрыш в скорости ее ра- боты. Собственно же программа пишется на обычном языке программирова- ния безо всяких упоминаний о MPI и строится стандартным компилятором; от программиста требуется лишь указать при компоновке имя соответствую- щего библиотечного файла и запускать полученный в итоге исполняемый файл как MPI-программу. Т.о. чем большую часть вычислений удастся пере- ложить на библиотечные подпрограммы (а они особенно тщательно протес- тированы, отлажены и оптимизированы), тем более эффективной получится результирующая программа.
    Наиболее известны библиотеки программ для решения задач матфизики
    (матричные операции, численное решение систем дифуравнений и т.п.).
    Напр., разработанный в Sandia Laboratories пакет AZTEC
    (
    http://www.cs.sandia.gov/CRF/aztec1.html
    ) специализирован на решение с ис- пользованием многопроцессорных систем линейных алгебраических уравне- ние (СЛАУ) с разреженными матрицами. AZTEC включает в себя процедуры, реализующие итерационные методы Крылова:
    • метод сопряж
    1   ...   8   9   10   11   12   13   14   15   16


    написать администратору сайта