ПОД (пособие) (1184372), страница 51
Текст из файла (страница 51)
При входе впараллельную область приватные копии этих данных инициализируются оригинальнымизначениями.4. Runtime-процедуры и переменные средыВ целях создания переносимой среды запуска параллельных программ, в OpenMPопределен ряд переменных среды, контролирующих поведение приложения.В OpenMP предусмотрен также набор библиотечных процедур, которые позволяют:во время исполнения контролировать и запрашивать различные параметры, определяющиеповедение приложения (такие как число нитей и процессоров, возможность вложенногопараллелизма); процедуры назначения параметров имеют приоритет над соотвествующимипеременными среды.использовать синхронизацию на базе замков (locks).Язык Фортран-DVM.1.2. DVM–подход к разработке параллельных программDVM-система предоставляет единый комплекс средств для разработки параллельныхпрограмм научно-технических расчетов на языках Си и Фортран 77.Модель параллелизма DVM. Модель параллелизма DVM базируется на моделипараллелизма по данным.
Аббревиатура DVM отражает два названия модели:распределенная виртуальная память (Distributed Virtual Memory) и распределеннаявиртуальная машина (Distributed Virtual Mashine). Эти два названия указывают наадаптацию модели DVM как для систем с общей памятью, так и для систем сраспределенной памятью. Высокоуровневая модель DVM позволяет не только снизитьтрудоемкость разработки параллельных программ, но и определяет единуюформализованную базу для систем поддержки выполнения, отладки, оценки и прогнозапроизводительности.Языки и компиляторы. В отличие от стандарта HPF в системе DVM не ставилась задачаполной автоматизации распараллеливания вычислений и синхронизации работы с общимиданными.
С помощью высокоуровневых спецификаций программист полностью управляетэффективностью выполнения параллельной программы. С другой стороны, припроектировании и развитии языка Fortran DVM отслеживалась совместимость сподмножеством стандартов HPF1 и HPF2.Единая модель параллелизма встроена в языки Си и Фортран 77 на базе конструкций,которые “невидимы” для стандартных компиляторов, что позволяет иметь один экземплярпрограммы для последовательного и параллельного выполнения. Компиляторы с языков CDVM и Fortran DVM переводят DVM-программу в программу на соответствующем языке(Си или Фортран 77) с вызовами функций системы поддержки параллельного выполнения.Поэтому единственным требованием к параллельной системе является наличиекомпиляторов с языков Си и Фортран 77.169Технология выполнения и отладки.
Единая модель параллелизма позволяет иметь для двухязыков единую систему поддержки выполнения и, как следствие, единую систему отладки,анализа и прогноза производительности. Выполнение и отладка DVM-программ можетосуществляться в следующих режимах:Последовательное выполнение и отладка средствами стандартных компиляторов с языковСи и Фортран 77.Псевдо-параллельное выполнение на рабочей станции (среда WINDOWS и UNIX).Параллельное выполнение на параллельной ЭВМ.При псевдо-параллельном и параллельном выполнении возможны следующие режимыотладки:автоматическая проверка правильности директив параллелизма;трассировка и сравнение результатов параллельного и последовательного выполнения;накопление и визуализация трассировки данных;накопление данных о производительности и прогноз производительности параллельноговыполнения.2.
Обзор языка2.1. Модель программирования и модель параллелизмаЯзык Fortran DVM (FDVM) представляет собой язык Фортран 77 [5], расширенныйспецификациями параллелизма. Эти спецификации оформлены в виде специальныхкомментариев, которые называются директивами. Директивы FDVM можно условноразделить на три подмножества:Распределение данных (разделы 2, 3, 4, 8, 9)Распределение вычислений (разделы 5, 7)Спецификация удаленных данных (раздел 6)Модель параллелизма FDVM базируется на специальной форме параллелизма по данным:одна программа – множество потоков данных (ОПМД).
В этой модели одна и та жепрограмма выполняется на каждом процессоре, но каждый процессор выполняет своеподмножество операторов в соответствии с распределением данных.В модели FDVM пользователь вначале определяет многомерный массив виртуальныхпроцессоров, на секции которого будут распределяться данные и вычисления. При этомсекция может варьироваться от полного массива процессоров до отдельного процессора.На следующем этапе определяются массивы, которые должны быть распределены междупроцессорами (распределенные данные). Эти массивы специфицируются директивамиотображения данных (раздел 4). Остальные переменные (распределяемые по умолчанию)отображаются по одному экземпляру на каждый процессор (размноженные данные).Размноженная переменная должна иметь одно и то же значение на каждом процессоре заисключением переменных в параллельных конструкциях (см.
раздел 5.1.3, 5.1.4 и 7.5).Модель FDVM определяет два уровня параллелизма:параллелизм по данным на секции массива процессоров;параллелизм задач – независимые вычисления на секциях массива процессоров.Параллелизм по данным реализуется распределением витков тесно-гнездового цикла междупроцессорами (раздел 5). При этом каждый виток такого параллельного цикла полностьювыполняется на одном процессоре. Операторы вне параллельного цикла выполняются поправилу собственных вычислений (раздел 5.2).170Параллелизм задач реализуется распределением данных и независимых вычислений насекции массива процессоров (раздел 7).При вычислении значения собственной переменной процессору могут потребоваться какзначения собственных переменных, так и значения несобственных (удаленных)переменных.
Все удаленные переменные должны быть указаны в директивах доступа кудаленным данным (раздел 6).Язык Sisal.Цели создания языка SISAL:создание универсального функционального языка;разработка техники оптимизации для высокоэффективных параллельных программ;достижение эффективности исполнения, сравнимой с императивными языками типа Fortranи C;внедрение функционального стиля программирования для больших научных программ.Название языка расшифровывется как "Streams and Iterations in a Single AssignmentLanguage", сам он представляет собой дальнейшее развития языка VAL, известного всередине 70-х годов. Среди целей разработки языка SISAL следует отметить наиболеехарактерные, связанные с функциональным стилем программирования:Эти цели содателей языка SISAL подтверждают, что функциональные языки способствуютразработке корректных параллельных программ.
Одна из причин заключается в том, чтофункциональные программы свободны от побочних эффектов и ошибок, зависящих отреального времени. Это существенно снижает сложность отладки. Результаты переносимына разные архитектуры, операционные системы или инструментальное окружение. Вотличие от императивных языков, функциональные языки уменьшают нагрузку накодирование, в них проще анализировать информационные потоки и схемы управления.Легко создать функциональную программу, которая является безусловно параллельной,если ее можно писать, освободившись от большинства сложностей параллельногопрограммирования, связанных с выражением частичных отношений порядка междуотдельными операциями уровня аппаратуры. Пользователь 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% тело цикла171returns 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-выражение с обменом данными между итерациями:forI := 1while I < S doK := I;I := old I + 2;% значение из предыдущей итерацииJ := K + I;returns product(I+J)end forКак это свойственно языкам фукнционального программирования, Sisal языкматематически правильный — функции отображают аргументы в результаты без побочныхэффектов, и программа строится как выражение, вырабатывающее значение.
Наиболее172интересна форма параллельного цикла. Она включает в себя три части: генераторпространства итераций, тело цикла и формирователь возвращаемых значений.SISAL-программа представляет собой набор функций, допускающих частичноеприменение, т.е. вычисление при неполном наборе аргументов. В таком случае поисходному определению функции строятся его проекции, зависящие от остальныхаргументов, что позволяет оперативно использовать эффекты смешанных вычислений иопределять специальные оптимизации программ, связанные с разнообразием используемыхконструкций и реализационных вариантов параллельных вычислений.function Sum (N); % Сумма квадратов result (+ ( sqw (1 ..