ПОД конспект (1184369), страница 14
Текст из файла (страница 14)
Распараллелить цикл, используя упорядоченные секции исемафоры:DO I=2,NA(I) = 2*A(I) + C(I)B(I) = C(I)*sin(X(I))Y(I) = Y(I-1) + X(I)D(I) = P(I)*B(I)/A(I)ENDDOИногда, почти полностью распараллеливающийся по данным, алгоритм имеет единственную зависимостьданных, которая на векторных машинах может потребовать расщепления цикла, чтобы изолироватьзависимость.Например:DO I = 1,NA(I) = EXP(SIN(B(I))) * EXP(COS(B(I)))C(I) = (D(I) + E(I)) / F(I) * A(I)X(I) = S * X(I-1) + C(I)Z(I) = X(I) * Y(I) + EXP(Z(I))ENDDOОператор присваивания X(I) включает рекурсию, что запрещает векторизацию. Обычно либо компилятор,либо программист выделит этот оператор в отдельный скалярный цикл, чтобы позволить другим тремоператорам присваивания выполняться в параллельном режиме.Это не всегда необходимо делать при распараллеливании.
Если имеется достаточно работы выше и/илиниже оператора присваивания X(I) и N достаточно велико, можно достичь эффективного параллельного32выполнения цикла путем помещения оператора присваивания X(I) в упорядоченную критическую секцию.Она будет обеспечивать доступ только одной нити в один и тот же момент явным или неявнымзамковым (lock) механизмом. В данном случае требуется выполнять итерации в таком порядке, чтобыудовлетворить требования рекурсии для вычисления X.Реальная система синхронизации для SEQCALL SETSEQ (SEQ,0)* инициализация, установка SEQ=0С$DIR DO_PARALLEL (ORDRED)DO I = 1,NA(I) = EXP(SIN(B(I))) * EXP(COS(B(I)))C(I) = (D(I) + E(I)) / F(I) * A(I)CALL WAITSEQ (SEQ,I-1)* ждать, пока SEQ будет равно I-1X(I) = S * X(I-1) + C(I)CALL POSTSEQ (SEQ,I)* установить SEQ в IZ(I) = X(I) * Y(I) + EXP(Z(I))ENDDOСемантика (для случая четырех процессоров): Инициализируются вычисления первых четырех итераций в заданном порядке на четырехпараллельных процессорах. Все четыре процессора вычисляют свои A(I),C(I) одновременно. Первый процессор выполнит для I=1 присваивание X(1), в то время как другие ждут. Первый процессор для I=1 вычисляет Z(1), в то время как X(2) вычисляется вторым процессоромдля I=2. Первый процессор начинает вычислять новую итерацию для I=5, в то время как другие трипроцессора проходят сквозь критическую секцию также упорядочено.Теперь, если работа по выполнению цикла хорошо сбалансирована, первый процессор для I=5достигает точки WAITSEQ как раз тогда, когда четвертый процессор для I=4 закончит POSTSEQ.
С этойточки все процессоры работают без простоя, пока они не достигнут последние четыре итерации цикла.55. Статический и динамический способы образования параллельных процессов."Процесс - группа ячеек памяти, содержимое которых меняется по определенным правилам. Этиправила описываются программой, которую интерпретирует процессор." /Цикритзис Д./.Вычислительный процесс можно рассматривать как последовательность команд ЭВМ, котораяработает с данными ей ресурсами. (Задача, задание, процесс, нить, TASK). Так, на микропроцессоре могутработать одновременно несколько независимых процессов: счет вычислительной задачи, редактированиетекстов и т.д.
Далее рассматриваются вычислительные процессы, одновременно выполняющиеся нанескольких процессорах для решения общей задачи. Работа такой задачи может начинаться с порожденияглавного процесса, который при работе может порождать другие процессы динамически. Эти процессымогут работать параллельно с главной и также порождать другие процессы.Другим способом порождения процессов является статический способ, когда производитсяодновременная инициализация на всех процессорах одинаковых процессов (SPMD – Single ProgramMultiple Data).
Эти процессы опрашивают состояние решающего поля и настраиваются на выполнениесвоей части вычислений.(Они могут узнать: сколько их порождено, свои уникальные, внутренние имена, ит.д.)Процессы, работающие на равных правах (не вызовы процедур и не процессы, связанные понятиями"главная-подчиненная"), иногда называемые сопроцессами, могут выполняться параллельно и при этомобщаться друг с другом - не часто (слабо связанные процессы).3356.
Требования к системам программирования методом передачи сообщений.57. Система программирования MPI.Главные цели создания системы параллельного программирования: Создать интерфейс прикладного программирования для МРР систем; Обеспечить возможность эффективных коммуникаций для коммуникации точка-точка,коллективных операций, группы процессов. Допускать удобное сопряжение с языками C, Fortran 77, Fortran 90 и C++; Простой способ создания процессов для модели SPMD (одна программа используется дляобработки разных данных на разных процессорах);Основные понятия языкаГруппа - упорядоченное (от 0 до ранга группы) множество идентификаторов процессов Группы служатдля указания адресата при посылке сообщений (процесс-адресат специфицируется своим номером вгруппе), определяют исполнителей коллективных операций.
Являются мощным средством функционального распараллеливания - позволяют разделить группу процессов на несколько подгрупп, каждая изкоторых должна выполнять свою параллельную процедуру. При этом существенно упрощается проблемаадресации при использовании параллельных процедур.Контекст - область "видимости" для сообщений, аналогичное области видимости переменных в случаевложенных вызовов процедур. Сообщения, посланные в некотором контексте, могут быть приняты тольков этом же контексте. Контексты - также важные средства поддержки параллельных процедур.Коммуникаторы - позволяют ограничить область видимости (жизни, определения) сообщений рамкаминекоторой группы процессов, т.е. могут рассматриваться как пара - группа и контекст.
Кроме того, онислужат и для целей оптимизации, храня необходимые для этого дополнительные объекты.Имеются предопределенные коммуникаторы (точнее, создаваемые при инициализации MPI-системы): *MPI_COMM_ALL - все процессы и операции над группами (локальные, без обмена сообщениями),например, Дай размер группы.
MPI_GROUP_SIZE(IN group, OUT size) Дай номер в группе обратившегосяпроцесса. MPI_GROUP_RANK(IN group, OUT rank)Основные операции - send, receiveОперации могут быть блокирующими и неблокирующими.В операции send задается: адрес буфера в памяти; количество посылаемых элементов; тип данных каждого элемента; номер процесса-адресата в его группе; тег сообщения; коммуникатор.MPI_SEND(IN start, IN count, IN datatype, IN dest, IN tag, IN comm) Типы данных - свои в MPI,но имеется соответствие между ними и типами Fortran и С.В операции receive задается: адрес буфера в памяти; количество принимаемых элементов; тип данных каждого элемента; номер процесса-отправителя в его группе; тег сообщения; коммуникатор; ссылка на объект-статус, содержащий необходимую информацию о состоянии ирезультате операции.Имеется возможность указать "любой отправитель" и "любой тег".Имеется три режима коммуникаций - стандартный, режим готовности и синхронный.34В стандартном режиме последовательность выдачи операций send и receive произвольна, операция sendзавершается тогда, когда сообщение изъято из буфера и он уже может использоваться процессом.В режиме готовности операция send может быть выдана только после выдачи соответствующей операцииreceive, иначе программа считается ошибочной и результат ее работы неопределен.
В синхронном режимепоследовательность выдачи операций произвольна, но операция send завершается только после выдачи иначала выполнения операции receive. Во всех трех режимах операция receive завершается послеполучения сообщения в заданный пользователем буфер приема.Неблокирующие операции не приостанавливают процесс до своего завершения , а возвращают ссылку накоммуникационный объект, позволяющий опрашивать состояние операции или дожидаться ее окончания.Имеются операции проверки поступающих процессу сообщений, без чтения их в буфер (например, дляопределения длины сообщения и запроса затем памяти под него).MPI относится к классу систем параллельного программирования, основанного на расширениистандартного последовательного языка описания процессов, библиотечными функциями для обменасообщениями между процессами.
В настоящее время MPI становится стандартом de facto и вытесняетранние версии библиотечных расширений последовательных языковдля параллельногопрограммирования, например, таких как p4, PVM,Express и PARMACS. MPI - сложная система. Полностьюона включает 129 функций, многие из которых имеют разнообразные параметры или варианты. Однакоключевая концепция MPI сосредоточена примерно в наборе из 20-25 функций, которые обеспечиваютболее чем адекватную поддержку для широкого спектра приложений.Основное назначение инструментальных средств MPI - дать пользователю средства для организациилокальной, глобальной и асинхронной связи между процессами и обеспечить разработку модульныхпрограмм, как из последовательных, так и из параллельных компонентов.В модели программирования MPI вычисление включает один или большее количество процессов (потоковкоманд), связь между которыми осуществляется сообщениями, инициируемыми вызовом библиотечныхподпрограмм.
В большинстве MPI реализациях набор процессов зафиксирован и создан на этапеинициализации программы по одному процессу на процессор. Однако эти процессы могут выполнятьразличные программы. Следовательно, модель программирования MPI относится к классу multiple programmultiple data (MPMD) в отличие от SPMD модели (simple program multiple data), в которой все процессорывыполняет одну программу. Во многих реализациях MPI параллельных процессов может быть и больше,чем реальных процессоров в вычислительной системе, тогда в функции MPI входит и распределениепроцессов.