ПОД (пособие) (1184372), страница 43
Текст из файла (страница 43)
Структура системногоидентификатора определяется реализацией, это имя не имеет внешнего представления.Для манипулирования именами процессов внутри программы в язык Fortran GNS вводитсяновый для Фортрана тип данных - тип TASKID. Значения этого типа представляют собойимена процессов, которые вырабатываются функцией порождения процессов.При статической модели параллелизма системные идентификаторы процессоввырабатываются системой запуска программы и могут быть получены пользователемвстроенными функциями.Добавляется константа .NOTASKID., которая представляет собой "нулевое" значение дляобъектов этого типа. Данные типа TASKID должны быть описаны в операторе TASKID,синтаксис которого аналогичен синтаксису операторов объявления типа в Фортране 77.Данные этого типа могут использоваться в операторах EQUIVALENCE, но при этом могутбыть эквивалентными только данным типа TASKID.
Допускается использование TASKID вкачестве описателя типа подпрограммы-функции.Использование переменных данного типа в операторах СOMMON оговаривается винструкциях по использованию языка на конкретных установках, в них же приводятсяразмеры имени процесса для расчетов длин общих блоков. В реализации на базе ФортранМВК [3] допускается использование данных типа TASKID в общих блоках, их длина - однослово (как у данных типа INTEGER).Для данных типа TASKID определены следующие операции: операции .EQ. , .NE.
иприсваивание (когда операнды операций,левая и правая части операторов присваиванияимеют тип TASKID).Данные типа TASKID используются в операторах передачи/приема сообщений SEND и RECEIVE для задания абонентов - получателя или отправителя . Такие данныемогут также передаваться в качестве параметров процедурам и функциям, а также могутбыть переданы другим процессам с помощью операторов передачи сообщений.138Значения типа TASKID не могут использоваться в списках ввода-вывода, так как неимеют внешнего представления.Начальная инициализация переменных этого типа также, как и других переменныхФортрана, не предусматривается, поэтому использование данных до присваивания имзначений некорректно. Присвоение начальных значений зтим данным в операторах DATAне предусмотрено.Спецификация данных типа TASKID в виде массива, структура которого совпадает сконфигурацией вычислительной системы, облегчает программирование задачи, например,может унифицировать операторы передачи данных между соседними процессами.
В языкеесть возможность заданием идентификатора массива данных типа TASKID указатьмассовую операцию для всех его элементов: в функциях порождения процессов,редукции иоперациях передачи сообщений. Такая запись может ускорить выполнение программы, таккак такие массовые операции могут выполняться параллельно.Для задания массовых операций над частью массива - подмассива можно присвоитьподмассиву имя оператором EQUIVALENCE, динамическое формирование структурподмассивов можно производить операторами языка Фортран МВК. Например:TASKID T1(100),T2(100),TMDIMENSION TM(100,2)EQUIVALENCE (TM(1,1),T1(1)),(TM(1,2),T2(1))При статической модели параллелизма инициализация данных этого типа производитсяфункциями преобразования номеров виртуальных процессоров в имена задач.3.
Задачи и процессыВ языке вводится дополнительный вид программных единиц - программные единицызадачи. Программа может содержать (помимо традиционных для Фортрана программныхединиц) одну или более программных единиц-задач.Главная программная единица (main program) определяет главный и единственный начальной процесс программы.Эта единица может иметь заголовок:PROGRAM n, где n - имя программы.По Фортрану, заголовок программы может отсутствовать.Имя программы (MAIN при его отсутствии) идентифицирует главную программнуюединицу программы, ссылки на него невозможны. (Конкретные реализации могутразрешать использование этого имени в операторах передачи сообщений в качествеадресата.)При запуске начального процесса ему присваивается другое имя - системныйидентификатор, по которому на него могут ссылаться другие процессы программы припередаче сообщений или при выполнении функций редукции.
Это имя может бытьполучено любым процессом при помощи встроенной функцией MASTER без параметров.Результат функции имеет тип TASKID.Программная единица-задача являются описанием задачи. Вычислительные процессысоздаются по описанию задачи динамически и во время создания им присваиваютсяуникальные имена - системные идентификаторы. По одному описанию задачи может бытьобразовано произвольное число процессов данного класса.Первым оператором программной единицы-задачи является оператор заголовка,имеющий вид: TASK PROGRAM n, где n - имя программной единицы-задачи.В остальном, структура программной единицы-задачи не отличается от структурыглавной программной единицы Фортрана 77.
В частности, последним оператором, какобычно, является оператор END.Задачи не могут иметь общей памяти с другими задачами, в частности, с главной,поэтому общие блоки (COMMON-блоки) задач локальны в пределах каждой задачи ипрограммных единицах, которые в ней используются. Семантика 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-размерные, при программировании приводятся к параметрам реальнойструктуры решающего поля. Алгоритмы, реализуемые как стандартные процедуры, такжедолжны адаптироваться к структуре выделяемых ресурсов. Настройка структуры (под)программ под параметры вычислительной среды может управляться заданием номеров виртуальных вычислителей.При запуске программы на конкретной вычислительной платформе возможнопотребуется сопроводить программу спецификацией об используемых значениях номероввиртуальных процессоров и схемой их оптимальной дислокации на вычислителяхплатформы, и об именах задач, связанных с этими номерами для последующей загрузкисоответствующих процессов.