СКИПОДы 2007 полная версия (1127795), страница 43
Текст из файла (страница 43)
Семантика COMMON-блоков впределах одной задачи - традиционная.1393.1. Создание процессов.Для создания процессов в динамической модели параллелизма используетсястандартная функция NEWTASK. Обращение к этой функции производится операторамиприсваивания вида:it = NEWTASK (n, ia) , гдеn - имя программной единицы-задачи;ia - константа, имя переменной, элемента массива или массива целого типа; значенияэтого параметра определяют виртуальные номера вычислителей, на которыхсоздаются порождаемые процессы.it - имя переменной, элемента массива или массива типа TASKID, куда заносятся имена(системные идентификаторы) порожденных процессов.Функция NEWTASK создает по описанию задачи с именем n вычислительныепроцессы, количество которых определяется числом виртуальных номеров вычислителей.Это число равно количеству элементов массива параметра ia или равно одному дляскалярного параметра.Результатом выполнения функции NEWTASK является имя процесса или массив имен(системных идентификаторов) созданных процессов.
Эти имена присваиваютсяпеременным it.Если n не совпадает с именем программной единицы-задачи, по которой образовантекущий процесс, то оно должно быть описано. По аналогии с оператором EXTERNAL, дляописания имен внешних задач вводится оператор спецификации TASK EXTERNAL,имеющий вид:TASK EXTERNAL n [, ni ]... гдеn, ni - имена программных единиц-задач.Имена, указанные в списке этого оператора, разрешается использовать в качествефактических параметров процедур (в том числе в качестве параметров функций NNAME иNEWTASK) и в качестве адресатов в операторе SEND. Если в качестве таковых параметровиспользуется имя текущей единицы - задачи, то оно также должно быть описано каквнешнее. Таким образом, передать сообщение процессу можно, идентифицируя его именемпрограммной единицы-задачи, по которой он был образован (по имени класса), или посистемному имени. Оператор TASK EXTERNAL должен быть размещен в программезадаче до первого исполняемого оператора.
Имена (системные идентификаторы) процессовне имеют внешнего представления, они скрыты от пользователя, их можно присваиватьпеременным типа TASKID. Процесс может определить собственное имя, имя процесса,породившего его, и имя главного процесса программы с помощью стандартныхфункций MYTASKID, РАRENT и МАSTER. Определение имен процессов по номерамвиртуальных процессоров приведено в п.
7.Созданные процессы загружаются и сразу начинают выполняться напроцессорах,виртуальные (логические) номера которых заданы значениями параметра ia.Допускается использование одинаковых логических номеров для размещения процессов наодном виртуальном процессоре (для статической модели параллелизма это не так !).Конкретное отображение виртуальных номеров процессоров на процессоры рабочеймашины, способ загрузки процессов определяется реализацией, например, конструкциямиязыка описания конфигурации (аналогично тому, как номера каналов ввода-вывода встандартах Фортрана не закреплены, а определяются реализацией, в частности, языкомуправления заданиями).
Процедура создания главного процесса программы и порядок егоразмещения на процессоре также определяется реализацией.При реализации статической модели параллелизма распределение процессов попроцессорам производиться статически, на этапе подготовки задания. В этом случае,функции NEWTASK в программе отсутствуют и процессы запускаются при инициализациизадачи. В статическом варианте имена процессов (системные идентификаторы)140определяются с помощью функции GETTASKID, имеются еще ряд стандартных функцийдля работы в этом режиме (см.
7.).Примеры использования функций порождения процессовОператоры порождения будут иметь окружение программы-задачи С.TASK PROGRAM CTASK EXTERNAL A,B,READ,PRINTTASKID TI, TM(100),TM2(100,2)INTEGER K,KM(100),KM2(100,2).............ENDИнициализация процессов: 1 TI = NEWTASK(A,K)2 TM=WweWTASK(A,KM)3 TM2=WweWTASK(A,KM2)DO 4 I=1,1004 TМ(I) = NEWTASK(A,KМ(I))DO 5 I=1,100TМ2(I,1) = NEWTASK(A,KМ2(I,1))5 TМ2(I,2) = NEWTASK(B,KМ2(I,2))Операторы с метками 2 и 4 (3 и 5) производят одинаковые действия, но инициализация вформе 2 (3) предпочтительнее, так как эта запись позволяет производить инициализациюпроцессов параллельно.Отсутствие в Фортране 77 аппарата вырезок из массивов не позволяет иметь такуюзапись для алгоритмов:DO 6 I=1,99,2TМ(I) = NEWTASK(A,KМ(I))6TМ(I+1) = NEWTASK(В,KМ(I+1))илиTМ(1) = NEWTASK(READ,KМ(1))TМ(100) = NEWTASK(PRINT,KМ(100))DO 7 I=2,997TМ(I) = NEWTASK(В,KМ(I))В результате выполнения операторов: TI = NEWTASK(PRINT,1)8 TI =NEWTASK(READ,2))на виртуальном процессоре с номером 1 будет образован и запущен процесс PRINT,внутреннее имя которого потеряно и недоступно программе из-за выполнения оператора8.Доступ к нему для передачи сообщений возможен только по программному имени,заказать от него прием сообщений невозможно.
C процессом на втором процессоревозможен обмен сообщениями в обе стороны.В языке определена только одна синтаксическая конструкция использования функцииNEWTASK - в операторе присваивания. Тем не менее входные языки могут разрешатьиспользование этой функции и в других контекстах, там, где употребляются переменныетипа TASKID. Например, оператор:SEND (NEWTASK(PRINT,MI)) RES породив процесс печати, передает ему данные черезRES.Виртуальные номера процессоров.Кодировка виртуальных номеров процессоров произвольная, также как задание номераметок программы. Эти номера могут быть переданы процессу, который порождает другие,через каналы ввода, операторами передачи сообщений, а также сгенерированы программно.Одинаковые номера процессоров могут быть использованы для оптимальногораспределения ресурсов путем выравнивания времени работы процессов.
Определив времяработы (число операций) самого время-емкого процесса, можно объединять на одном141процессоре выполнение нескольких других процессов, если их суммарное времяменьше.При этом можно ускорить выполнение программы из-за упрощения коммуникациймежду процессами, выполняемых на одном процессоре.Виртуальные номера процессоров могут быть использованы для настройкирешающего поля.
Параллельные алгоритмы, формулируемые в теоретической постановкеобычно как n-размерные, при программировании приводятся к параметрам реальнойструктуры решающего поля. Алгоритмы, реализуемые как стандартные процедуры, такжедолжны адаптироваться к структуре выделяемых ресурсов. Настройка структуры (под)программ под параметры вычислительной среды может управляться заданием номеров виртуальных вычислителей.При запуске программы на конкретной вычислительной платформе возможнопотребуется сопроводить программу спецификацией об используемых значениях номероввиртуальных процессоров и схемой их оптимальной дислокации на вычислителяхплатформы, и об именах задач, связанных с этими номерами для последующей загрузкисоответствующих процессов. Конкретные реализации, оговаривая правила загрузки задач напроцессоры, могут содержать средства задания порядка выполнения (приоритета) нескольких процессов на одном процессоре.Для статической модели параллелизма балансировка загрузки вычислительной системыможет производиться на уровне языка конфигурации, размещением на одном физическомпроцессоре нескольких виртуальных.3.2.
Завершение программы и завершение процессов Выполнение программы наязыке Fortran GNS завершается в следующих случаях:а) при завершении выполнения главного процесса (процедурой STOP или выходомчерез END главной программной единицы);б) при "авосте" в главном процессе;в) при выполнении в каком-либо процессе программы стандартных процедур ABORTи FINISH.г) при выполнении в каком-либо процессе программы оператора FINISH.Из определения следует, что для завершения программы не требуется ожиданияестественного (или авостного) завершения всех инициированных процессов программы, вчастности, завершения всех обменов сообщениями между ними и выборки поступившихсообщений из почтовых ящиков. Вопрос о буферах ввода-вывода при "авосте" в главномпроцессе решается соглашениями ОС.Выполнение одного процесса завершается в следующих случаях:а) если выполняется одно из указанных выше условий, приводящих к завершениювсей программы;б) при выполнении оператора STOP в данном процессе;в) при выполнении оператора END в задаче, по которой образован процесс;RETURN,END в функциях и процедурах имеет традиционный смысл.г) в случае "авоста" в данном процессе.Таким образом любой процесс может завершить выполнение всей программывыполнением стандартных процедур ABORT, FINISH; завершение процесса другимиспособами не прекращает выполнение программы.
В частности, при выполнении оператораEND в задаче, процесс завершается, ссылка на него сохраняется. Проблема почтовыхящиков завершенных процессов решаются при реализации языка.При статической модели параллелизма работа программы завершается выполнением водном из процессов ABORT или FINISH.В языке нет средств для определения статуса процесса, поэтому, проблемыиспользования процессора,освободившегося по завершению выполняемого на немпроцесса, связаны с наличием динамической загрузки процессов и должны решатьсяпрограммированием синхронизирующих механизмов.142Средства передачи и приема сообщений в языке Фортран-GNS.Передача сообщенийОбмен информацией между процессами осуществляется с помощью передачисообщений.
Для этого используются операторы:SEND - послать сообщение и RECEIVE - принять сообщение.4.1. Способы передачи сообщенийПредусмотрено три способа передачи сообщений: синхронный, асинхронный ипередача без ожидания.а. Синхронный способПри синхронном способе передачи сообщений посылающий и принимающийпроцессы приостанавливают выполнение своих программ и переходят в состояниеожидания до тех пор, пока не выполнятся оба синхронных оператора SEND и RECEIVE.Сообщения данного типа могут передаваться без использования буферов почтовыхящиков, так как передача синхронного сообщения будет производиться только приготовности абонентов к обмену и может происходить непосредственно из памятипередающего процесса в память принимающего процесса.Процесс может посылать синхронные сообщения как отдельному процессу, так и игруппе процессов. В последнем случае процесс отправитель продолжит выполнение толькопосле получения подтверждения о выполнении соответствующих операторов RECEIVE вовсех процессах - получателях.
Получив сообщение, получатель группового синхронногосообщения может продолжить работу, не ожидая завершения всех остальных обменов поданному оператору SEND. Получатель синхронного сообщения может ждать его только отпроцесса, имя которого указано в параметре оператора RECEIVE, т.е нельзя заказать водном операторе ожидание синхронных сообщений от нескольких процессов.б. Асинхронный способПри асинхронном способе передачи сообщения посылающий процесс продолжаетвыполнение независимо от того, выполнил ли получающий процесс оператор RECEIVE илинет.Сразу же после выполнения оператора SEND процесс может изменить значенияданных, перечисленных в списке передаваемых значений этого оператора, однако абонентупередаются те значения, которые были на момент выполнения оператора SEND.Выполнение асинхронного оператора RECEIVE и продолжение работы процесса получателя производиться только после поступления сообщения.