ПОД конспект (1184369), страница 21
Текст из файла (страница 21)
При этом секция может варьироваться отполного массива процессоров до отдельного процессора.На следующем этапе определяются массивы, которые должны быть распределены междупроцессорами (распределенные данные). Эти массивы специфицируются директивами отображения данных(раздел 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.
Система программирования Норма.Декларативный язык Норма предназначен для описания решения вычислительных задач сеточнымиметодами. Возможно применение для иных задач (нет более подробных данных).Высокий уровень абстракции языка позволяет описывать задачи в нотации, близкой к исходной постановкипроблемы математиком (программирование без программиста), получать описание не ориентированное наконкретную архитектуру и/или конкретные методы организации параллельного выполнения. Язык несодержит традиционные конструкции языков программирования, фиксирующие порядок вычисления и/илииным образом "скрывающие/ограничивающие" параллелизм (например, COMMON-блоки).После двух фаз компиляции (анализ информационных зависимостей и генерация ярусно-параллельногографа алгоритма) вывод результирующей программы возможен в следующих форматах:Фортран 77-для выполнения на последовательных ЭВМ;Фортран/PVM-для выполнения на любых системах с Фортран/PVM;Фортран/GNS-для выполнения на МВС-100 и других системах с Фортран/GNS-см.
проектИПМ/GNS;Фортран/Convex-для выполнения на HP Convex SPP-100 и других системах с Фортран/Convex;(в разработке) Фортран/MPI-для выполнения на любых системах с Фортран/MPI;http://parallel.ru/tech/norma/Непроцедурный язык Норма предназначен для записи численных методов решения задач математическойфизики разностными методами. Процесс разработки программ для решения таких задач можно разбить наследующие этапы:Постановка задачи. Выходом этого этапа является обычно система дифференциальных уравнений,описывающих задачу.Выбирается пространственно-временная сетка и производится дискретизация уравнений с помощьюодного из разностных методов.Производится выбор метода решения дискретных уравнений.
В результате получаются формулы(соотношения), описывающие необходимые вычисления в узлах сетки.54Полученные формулы программируются на некотором языке, который обеспечивает решениезадачи на вычислительной машине.Главная идея, положенная в основу языка Норма, заключается в том, что полученное на третьем этапеописание решения задачи, почти непосредственно используется для ввода его в вычислительную систему ипроведения счета.Таким образом, язык Норма дает прикладному математику возможность сформулировать свою задачу впривычных для него терминах.
Организация процесса вычислений с учетом архитектуры ЭВМ(возможностей параллельной, векторной обработки и т.п.) - это задача транслятора с языка Норма.Запись на языке Норма - это, по существу, строгая запись численных методов решения математическойзадачи, запись еще не алгоритмов, а просто расчетных формул и остальной необходимой информации,которую необходимо знать, чтобы написать программу для ЭВМ.Расчетные формулы, получаемые прикладным специалистом, обычно записываются в виде соотношений.Отметим, что в записи на Норме не требуется никакой информации о порядке счета, способах организациивычислительных (циклических) процессов. Порядок предложений языка может быть произвольным информационные взаимосвязи будут выявлены и учтены при организации процесса счета транслятором.Выбор уровня языка Норма определяет характерную его черту - в этом языке нет необходимости вводитьтакие понятия, как оператор присваивания и возможность переприсваивания значений (типа Х:=Х+1) иоператоры перехода.