ПОД конспект (1184369), страница 16
Текст из файла (страница 16)
Обращение к этой функции производится операторами присваивания вида:it = NEWTASK (n, ia) , гдеn - имя программной единицы-задачи;ia - константа, имя переменной, элемента массива или массива целого типа; значения этого параметраопределяют виртуальные номера вычислителей, на которых создаются порождаемые процессы.it - имя переменной, элемента массива или массива типа TASKID, куда заносятся имена (системныеидентификаторы) порожденных процессов.Функция NEWTASK создает по описанию задачи с именем n вычислительные процессы, количествокоторых определяется числом виртуальных номеров вычислителей. Это число равно количеству элементовмассива параметра ia или равно одному для скалярного параметра.Результатом выполнения функции NEWTASK является имя процесса или массив имен (системныхидентификаторов) созданных процессов.
Эти имена присваиваются переменным it.37Если n не совпадает с именем программной единицы-задачи, по которой образован текущий процесс,то оно должно быть описано. По аналогии с оператором EXTERNAL, для описания имен внешних задачвводится оператор спецификации TASK EXTERNAL, имеющий вид:TASK EXTERNAL n [, ni ]... гдеn, ni - имена программных единиц-задач.Имена, указанные в списке этого оператора, разрешается использовать в качестве фактическихпараметров процедур (в том числе в качестве параметров функций NNAME и NEWTASK) и в качествеадресатов в операторе SEND. Если в качестве таковых параметров используется имя текущей единицы задачи, то оно также должно быть описано как внешнее.
Таким образом, передать сообщение процессуможно, идентифицируя его именем программной единицы-задачи, по которой он был образован (по именикласса), или по системному имени. Оператор TASK EXTERNAL должен быть размещен в программе-задачедо первого исполняемого оператора. Имена (системные идентификаторы) процессов не имеют внешнегопредставления, они скрыты от пользователя, их можно присваивать переменным типа TASKID.
Процессможет определить собственное имя, имя процесса, породившего его, и имя главного процесса программы спомощью стандартных функций MYTASKID, РАRENT и МАSTER. Определение имен процессов пономерам виртуальных процессоров приведено в п. 7.Созданные процессы загружаются и сразу начинают выполняться на процессорах, виртуальные(логические) номера которых заданы значениями параметра ia.
Допускается использование одинаковыхлогических номеров для размещения процессов на одном виртуальном процессоре (для статической моделипараллелизма это не так !).Конкретное отображение виртуальных номеров процессоров на процессоры рабочей машины, способзагрузки процессов определяется реализацией, например, конструкциями языка описания конфигурации(аналогично тому, как номера каналов ввода-вывода в стандартах Фортрана не закреплены, а определяютсяреализацией, в частности, языком управления заданиями).
Процедура создания главного процессапрограммы и порядок его размещения на процессоре также определяется реализацией.При реализации статической модели параллелизма распределение процессов по процессорампроизводиться статически, на этапе подготовки задания. В этом случае, функции NEWTASK в программеотсутствуют и процессы запускаются при инициализации задачи. В статическом варианте имена процессов(системные идентификаторы) определяются с помощью функции 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 TМ = NEWTASK(A,KМ)3 TМ2 = NEWTASK(A,KМ2)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.Доступ к нему для передачи38сообщений возможен только по программному имени, заказать от него прием сообщений невозможно.
Cпроцессом на втором процессоре возможен обмен сообщениями в обе стороны.В языке определена только одна синтаксическая конструкция использования функции NEWTASK - воператоре присваивания. Тем не менее входные языки могут разрешать использование этой функции и вдругих контекстах, там, где употребляются переменные типа TASKID. Например, оператор:SEND (NEWTASK(PRINT,MI)) RES породив процесс печати, передает ему данные через RES.Виртуальные номера процессоров.Кодировка виртуальных номеров процессоров произвольная, также как задание номера метокпрограммы.
Эти номера могут быть переданы процессу, который порождает другие, через каналы ввода,операторами передачи сообщений, а также сгенерированы программно.Одинаковые номера процессоров могут быть использованы для оптимального распределенияресурсов путем выравнивания времени работы процессов. Определив время работы (число операций) самоговремя-емкого процесса, можно объединять на одном процессоре выполнение нескольких других процессов,если их суммарное время меньше.При этом можно ускорить выполнение программы из-за упрощениякоммуникаций между процессами, выполняемых на одном процессоре.Виртуальные номера процессоров могут быть использованы для настройки решающего поля.Параллельные алгоритмы, формулируемые в теоретической постановке обычно как n-размерные, припрограммировании приводятся к параметрам реальной структуры решающего поля.
Алгоритмы, реализуемые как стандартные процедуры, также должны адаптироваться к структуре выделяемых ресурсов.Настройка структуры (под) программ под параметры вычислительной среды может управляться заданиемномеров виртуальных вычислителей.При запуске программы на конкретной вычислительной платформе возможно потребуется сопроводитьпрограмму спецификацией об используемых значениях номеров виртуальных процессоров и схемой ихоптимальной дислокации на вычислителях платформы, и об именах задач, связанных с этими номерами дляпоследующей загрузки соответствующих процессов. Конкретные реализации, оговаривая правила загрузкизадач на процессоры, могут содержать средства задания порядка выполнения (приоритета) несколькихпроцессов на одном процессоре.Для статической модели параллелизма балансировка загрузки вычислительной системы можетпроизводиться на уровне языка конфигурации, размещением на одном физическом процессоре несколькихвиртуальных.59.
Средства передачи и приема сообщений в языке Фортран-GNS.Обмен информацией между процессами осуществляется с помощью передачи сообщений. Дляэтого используются операторы:SEND - послать сообщение и RECEIVE - принять сообщение.Предусмотрено три способа передачи сообщений: синхронный, асинхронный и передача безожидания.Синхронный способПри синхронном способе передачи сообщений посылающий и принимающий процессыприостанавливают выполнение своих программ и переходят в состояние ожидания до тех пор, пока невыполнятся оба синхронных оператора SEND и RECEIVE.Сообщения данного типа могут передаваться без использования буферов почтовых ящиков, так какпередача синхронного сообщения будет производиться только при готовности абонентов к обмену иможет происходить непосредственно из памяти передающего процесса в память принимающего процесса.Процесс может посылать синхронные сообщения как отдельному процессу, так и группе процессов.В последнем случае процесс отправитель продолжит выполнение только после получения подтвержденияо выполнении соответствующих операторов RECEIVE во всех процессах - получателях.
Получивсообщение, получатель группового синхронного сообщения может продолжить работу, не ожидаязавершения всех остальных обменов по данному оператору SEND. Получатель синхронного сообщенияможет ждать его только от процесса, имя которого указано в параметре оператора RECEIVE, т.е нельзязаказать в одном операторе ожидание синхронных сообщений от нескольких процессов.Асинхронный способПри асинхронном способе передачи сообщения посылающий процесс продолжает выполнениенезависимо от того, выполнил ли получающий процесс оператор RECEIVE или нет.Сразу же после выполнения оператора SEND процесс может изменить значения данных,перечисленных в списке передаваемых значений этого оператора, однако абоненту передаются тезначения, которые были на момент выполнения оператора SEND.39Выполнение асинхронного оператора RECEIVE и продолжение работы процесса - получателяпроизводиться только после поступления сообщения. Если сообщение пришло к получателю довыполнения у него оператора RECEIVE, то сообщение помещается в почтовый ящик процесса безпрерывания его выполнения.