СКИПОДы конспект лекций (1127769), страница 21
Текст из файла (страница 21)
Язык Фортран-DVM.DVM-модель выполнения параллельной программы охватывает параллелизм по данным и параллелизмзадачи (см. также проект [ИСП РАН/Java-DVM]). В рамках DVM-модели программист (в рамкахпространства глобальных имен - единое адресное пространство) определяет:распределение элементов массивов по процессорам;распределение витков циклов по процессорам;организацию эффективного доступа к данным, расположенным на иных процессорах;организацию эффективного выполнения редукционных операций (например, sum, min, max элементов распределенного массива).Язык Фортран-DVM: Фортран-77, со вставкой специальных комментариев.Компиляция для однопроцессорных (последовательных) платформ: спецкомментарии прозрачныдля стандартных компиляторов;Компиляция для многопроцессорных платформ: собственный Фортран-DVM компиляторрасширяет спецкомментарии в конструкции с обращениями к библиотеке run-time support.Язык Си-DVM: стандартный Си, с библиотекой специальных макросов (с "пустым" определениеммакросов), реализующих DVM-модель.Компиляция для однопроцессорных (последовательных) платформ: спецмакросы прозрачны длястандартных компиляторов, так как они имеют пустое определение;Компиляция для многопроцессорных платформ: собственный Си-DVM компилятор расширяетспецмакросы в конструкции с обращениями к библиотеке run-time support.Имеются средства трассировки (последовательного и параллельного исполнения одной и той жепрограммы), сравнения трасс, измерения параметров эффективности (распараллеливания) исполненияпрограмм.Компиляция программ на языках Фортран/Си-DVM поддержана на платформы:обычные (последовательные) ЭВМ со стандартным языком Фортран-77/Си (последовательнаяотладка и т.п.);параллельные ЭВМ с MPI + Фортран/Си (в том числе: МВС-100);параллельные ЭВМ с PVM + Фортран/Си (в том числе: HP Convex SPP-1000);параллельные ЭВМ с GNS или ОС Router + Фортран/Си (в том числе: МВС-100).51Язык Fortran DVM (FDVM) представляет собой язык Фортран 77 [5], расширенный спецификациямипараллелизма.
Эти спецификации оформлены в виде специальных комментариев, которые называютсядирективами. Директивы FDVM можно условно разделить на три подмножества: Распределение данных Распределение вычислений Спецификация удаленных данныхМодель параллелизма FDVM базируется на специальной форме параллелизма по данным: однапрограмма – множество потоков данных (ОПМД). В этой модели одна и та же программа выполняется накаждом процессоре, но каждый процессор выполняет свое подмножество операторов в соответствии сраспределением данных.В модели FDVM пользователь вначале определяет многомерный массив виртуальных процессоров, насекции которого будут распределяться данные и вычисления.
При этом секция может варьироваться отполного массива процессоров до отдельного процессора.На следующем этапе определяются массивы, которые должны быть распределены междупроцессорами (распределенные данные). Эти массивы специфицируются директивами отображения данных(раздел 4). Остальные переменные (распределяемые по умолчанию) отображаются по одному экземпляру накаждый процессор (размноженные данные). Размноженная переменная должна иметь одно и то же значениена каждом процессоре за исключением переменных в параллельных конструкцияхМодель FDVM определяет два уровня параллелизма: параллелизм по данным на секции массива процессоров; параллелизм задач – независимые вычисления на секциях массива процессоров.Параллелизм по данным реализуется распределением витков тесно-гнездового цикла междупроцессорами.
При этом каждый виток такого параллельного цикла полностью выполняется на одномпроцессоре. Операторы вне параллельного цикла выполняются по правилу собственных вычислений.Параллелизм задач реализуется распределением данных и независимых вычислений на секциимассива процессоров .При вычислении значения собственной переменной процессору могут потребоваться как значениясобственных переменных, так и значения несобственных (удаленных) переменных.
Все удаленныепеременные должны быть указаны в директивах доступа к удаленным данным.70. Язык Sisal.!! вроде как - язык описания поточных алгоритмовSisal - функциональный язык программирования. Программист не заботится о параллельных свойствахпрограмм, компилятор определяет все зависимости, распределяет работу по процессорам, вставляетнеобходимые пересылки и синхронизации.Заметное место среди языков функционального программирования занимают языки организациираспределенных и параллельных вычислений. Практики с большой похвалой отзываются о языкефункционального программирования Erlang фирмы Ericsson.
Здесь мы рассмотрим один из довольноизвестных — язык функционального программирования SISAL [11].создание универсального функционального языка;разработка техники оптимизации для высокоэффективных параллельных программ;достижение эффективности исполнения, сравнимой с императивными языками типа Fortran и C;внедрение функционального стиля программирования для больших научных программ.Название языка расшифровывается как "Streams and Iterations in a Single Assignment Language", сам онпредставляет собой дальнейшее развития языка VAL, известного в середине 70-х годов. Среди целейразработки языка SISAL следует отметить наиболее характерные, связанные с функциональным стилемпрограммирования:Эти цели создателей языка SISAL подтверждают, что функциональные языки способствуют разработкекорректных параллельных программ.
Одна из причин заключается в том, что функциональные программысвободны от побочных эффектов и ошибок, зависящих от реального времени. Это существенно снижаетсложность отладки. Результаты переносимы на разные архитектуры, операционные системы илиинструментальное окружение. В отличие от императивных языков, функциональные языки уменьшаютнагрузку на кодирование, в них проще анализировать информационные потоки и схемы управления.
Легкосоздать функциональную программу, которая является безусловно параллельной, если ее можно писать,52освободившись от большинства сложностей параллельного программирования, связанных с выражениемчастичных отношений порядка между отдельными операциями уровня аппаратуры. Пользователь Sisal-аполучает возможность сконцентрироваться на конструировании алгоритмов и раз работке программ втерминах крупноблочных и регулярно организованных построений, опираясь на естественный параллелизмуровня постановки задачи.Начнем с примера программы:1.
Вычисление числа π (пи).For% инициирование циклаApprox := 1.0;Sign := 1.0;Denom := 1.0;i := 1while i <= Cycles do% предусловие завершения циклаSign := -Sign;% однократныеDenom := Denom + 2.0;% присваиванияApprox := Approx + Sign / Denom;% образуютi := i + 1% тело циклаreturns Approx * 4.0% выбор и вычисление результата циклаend for2. Это выражение также вычисляет число π (пи).for i in [1..Cycles/2] do% пространство параллельно% исполнимых итерацийval := 1.0/real(4*i-3) — 1.0/real(4*i-1);% тело цикла, для каждого i% исполняемое независимоreturns sum( val )% выбор и свертка результатов% всех итераций циклаend for * 4.0% вычисление результата% выраженияЭто выражение вычисляет сумму всех вычисленных значений val и умножает результат на 4.0.3, 4.
В for-выражениях операции dot и cross могут порождать пары индексов при формированиипространства итерирования:for i in [1..2] dot j in [3..4] do% для пар индексов [1,3] и% [2,4]returns product (i+j)% произведение суммend for% = 24for i in [1..2] cross j in [3..4] do% для пар [1,3], [1,4], [2,3]% и [2,4]returns product (i+j)% произведение суммend for% = 6005. Итеративное for-выражение с обменом данными между итерациями:for53I := 1while I < S doK := I;I := old I + 2;% значение из предыдущей итерацииJ := K + I;returns product(I+J)end forКак это свойственно языкам функционального программирования, Sisal язык математически правильный —функции отображают аргументы в результаты без побочных эффектов, и программа строится каквыражение, вырабатывающее значение.
Наиболее интересна форма параллельного цикла. Она включает всебя три части: генератор пространства итераций, тело цикла и формирователь возвращаемых значений.SISAL-программа представляет собой набор функций, допускающих частичное применение, т.е. вычислениепри неполном наборе аргументов. В таком случае по исходному определению функции строятся егопроекции, зависящие от остальных аргументов, что позволяет оперативно использовать эффектысмешанных вычислений и определять специальные оптимизации программ, связанные с разнообразиемиспользуемых конструкций и реализационных вариантов параллельных вычислений.function Sum (N);% Сумма квадратовresult (+ ( sqw (1 ..
N)));Обычно рассматривают оптимизации, обеспечивающие устранение неиспользуемого кода, чистку циклов,слияние общих подвыражений, перенос участков повторяемости для обеспечения однородностираспараллеливаемых ветвей, раскрутку или разбиение цикла, втягивание константных вычислений,уменьшение силы операций, удаление копий агрегатных конструкций и др.71. Система программирования Норма.Декларативный язык Норма предназначен для описания решения вычислительных задач сеточнымиметодами.