СКИПОДы 2007 полная версия (1127795), страница 50
Текст из файла (страница 50)
Каждая директива может иметьнесколько дополнительных атрибутов - клауз. Отдельно специфицируются клаузы дляназначения классов переменных, которые могут быть атрибутами различных директив.Порождение нитейPARALLEL ... END PARALLELОпределяет параллельную область программы. При входе в эту область порождаются новые(N-1), образуется "команда" из N нитей, а порождающая нить получает номер 0 истановится основной нитью команды (т.н.
"master thread"). При выходе из параллельнойобласти основная нить дожидается завершения остальных нитей, и продолжает выполнениев одном экземпляре. Предполагается, что в SMP-системе нити будут распределены поразличным процессорам (однако это, как правило, находится в ведении операционнойсистемы).Каким образом между порожденными нитями распределяется работа - определяетсядирективами DO,SECTIONS и SINGLE. Возможно также явное управление распределениемработы (а-ля MPI) с помощью функций, возвращающих номер текущей нити и общее числонитей. По умолчанию (вне этих директив), код внутри PARALLEL исполняется всеминитями одинаково.Вместе с PARALLEL может использоваться клауза IF(условие) - й параллельная работаинициируется только при выполнении указанного в ней условия.166Параллельные области могут динамически вложенными.
По умолчанию (если вложенныйпараллелизм не разрешен явно), внутренняя параллельная область исполняется однойнитью.Разделение работы (work-sharing constructs)Параллельные циклыDO ... [ENDDO]Определяет параллельный цикл.Клауза SCHEDULE определяет способ распределения итераций по нитям:STATIC,m - статически, блоками по m итерацийDYNAMIC,m - динамически, блоками по m (каждая нить берет на выполнение первый ещеневзятый блок итераций)GUIDED,m - размер блока итераций уменьшается экспоненциально до величины mRUNTIME - выбирается во время выполнения .По умолчанию, в конце цикла происходит неявная синхронизация; эту синхронизациюможно запретить с помощью ENDDO NOWAIT.Параллельные секцииSECTIONS ...
END SECTIONSНе-итеративная параллельная конструкция. Определяет набор независимых секций кода(т.н., "конечный" параллелизм). Секции отделяются друг от друга директивой SECTION.Примечание. Если внутри PARALLEL содержится только одна конструкция DO или толькоодна конструкия SECTIONS, то можно использовать укороченную запись: PARALLEL DOили PARALLEL SECTIONS.Исполнение одной нитьюSINGLE ... END SINGLEОпределяет блок кода, который будет исполнен только одной нитью (первой, котораядойдет до этого блока).Явное управление распределением работыС помощью функций OMP_GET_THREAD_NUM() и OMP_GET_NUM_THREADS нитьможет узнать свой номер и общее число нитей, а затем выполнять свою часть работы взависимости от своего номера (этот подход широко используется в программах на базеинтерфейса MPI).Директивы синхронизацииMASTER ... END MASTERОпределяет блок кода, который будет выполнен только master-ом (нулевой нитью).CRITICAL ...
END CRITICALОпределяет критическую секцию, то есть блок кода, который не должен выполнятьсяодновременно двумя или более нитямиBARRIERОпределяет точку барьерной синхронизации, в которой каждая нить дожидается всехостальных.ATOMIC167Определяет переменную в левой части оператора "атомарного" присваивания, котораядолжна корректно обновляться несколькими нитями.ORDERED ... END ORDEREDОпределяет блок внутри тела цикла, который должен выполняться в том порядке, в которомитерации идут в последовательном цикле. Может использоваться для упорядочения выводаот параллельных нитей.FLUSHЯвно определяет точку, в которой реализация должна обеспечить одинаковый вид памятидля всех нитей.
Неявно FLUSH присутствует в следующих директивах: BARRIER,CRITICAL, END CRITICAL, END DO, END PARALLEL, END SECTIONS, END SINGLE,ORDERED, END ORDERED.В целях синхронизации можно также пользоваться механизмом замков (locks).3. Классы переменныхВ OpenMP переменные в параллельных областях программы разделяются на два основныхкласса:SHARED (общие; под именем A все нити видят одну переменную) иPRIVATE (приватные; под именем A каждая нить видит свою переменную).Отдельные правила определяют поведение переменных при входе и выходе изпараллельной области или параллельного цикла: REDUCTION, FIRSTPRIVATE,LASTPRIVATE, COPYIN.По умолчанию, все COMMON-блоки, а также переменные, порожденные вне параллельнойобласти, при входе в эту область остаются общими (SHARED).
Исключение составляютпеременные - счетчики итераций в цикле, по очевидным причинам. Переменные,порожденные внутри параллельной области, являются приватными (PRIVATE). Явноназначить класс переменных по умолчанию можно с помощью клаузы DEFAULT.SHAREDПрименяется к переменным, которые необходимо сделать общими.PRIVATEПрименяется к переменным, которые необходимо сделать приватными. При входе впараллельную область для каждой нити создается отдельный экземпляр переменной,который не имеет никакой связи с оригинальной переменной вне параллельной области.THREADPRIVATEПрименяется к COMMON-блокам, которые необходимо сделать приватными. Директивадолжна применяться после каждой декларации COMMON-блока.FIRSTPRIVATEПриватные копии переменной при входе в параллельную область инициализируютсязначением оригинальной переменной.LASTPRIVATEПо окончании параллельно цикла или блока параллельных секций, нить, которая выполнилапоследнюю итерацию цикла или последнюю секцию блока, обновляет значениеоригинальной переменной.168REDUCTION(+:A)Обозначает переменную, с которой в цикле производится reduction-операция (например,суммирование).
При выходе из цикла, данная операция производится над копиямипеременной во всех нитях, и результат присваивается оригинальной переменной.COPYINПрименяется к COMMON-блокам, которые помечены как THREADPRIVATE. При входе впараллельную область приватные копии этих данных инициализируются оригинальнымизначениями.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.