Параллельный ОВС-Фортран получили путем развития последовательного Фортрана дополнением его операторами группового и индивидуального взаимодействия, операторами организации отказоустойчивых вычислений. Каждый новый оператор поддерживается автономной подпрограммой. Эти подпрограммы сведены в библиотеку системных операторов, которая при начальной загрузке загружается в ЛОП каждой элементарной машины (ЭМ). Необходимость вызова этих подпрограмм указывается в текстах известным оператором вызова CALL…(кол). Взаимодействие между параллельными ветвями (процессами) разных ЭМ организует ядро МОС после обращения к нему локальной ОС из ЭМ и пересылки из ЭМ паспорта её задания на взаимодействие с другой ЭМ обрабатывающей части, а в составе этого паспорта поступает паспорт событий (вектор семафоров) для проверки условий синхронизации асинхронных процессов. Ядро МОС проверяет эти условия, выполняет операции над целочисленными значениями семафоров и векторами признаков их закрытия-открытия и, если совокупность семафоров открыта процессу-заявителю, выполняет адресную маршрутизацию, прокладывая логический канал связи между взаимодействующими машинами, используя для этого имеющиеся неизменные физические линии связи между процессорами.
Командно-алгоритмическое программирование каждой из параллельных вевей в каждой каждой из параллельных ветвей в каждой ЭМ остается традиционным. Новым является метод задания их взаимодействия и синхронизации. При групповом взаимодействии синхронизация выполняется упрощенно. Операторы, задающие групповое взаимодействие, должны присутствовать во всех ветвях, вступающих в такое взаимодействие. Взаимодействие разрешается ядром МОС только тогда, когда все названные ветви параллельной программы выйдут на такой оператор. Если хотя бы одна ветвь группы взаимодействия не выйдет на него, то событие взаимодействия не наступит, и остальные ветви, уже вышедшие на такой оператор, должны находиться в состоянии ожидания этого события. После этого основная задача МОС – адресная маршрутизация и прокладка логических каналов связи между процессорами в соответствии со значениями параметров (аргументов) оператора взаимодействия.
Применяется 7 типов операторов группового взаимодействия, в том числе:
1) Трансляционный обмен
BEXC(N2, N1,N, A,B) – это передача N слов массива А из ветви с еомером N1 в массивы В всех ветвей со спецификатором N2, где спецификатор – это номер подмножества элементарных машин. В самой ветви N1 никаких действий с массивами А и В не производится.
2) Дифференцированный обмен
DEXC(N2, N1,N, A,B, z1,z2,…,zk) – это передача N слов массива А из веви N1 в массив В ветвей с номерами z1,z2,…,zk спецификатором N2, т. е. только в указанную часть ветвей подмножества N2. Если среди {zi} имеется и номер z1=N1, то эти же слова массива А передаются и в массив В ветви N1.
3) Конвейерно-параллельный обмен (обмен сдвигом):
МЕXC(N2,X, N,A, B) – это передача N слов из массива А каждой ветви со спецификатором N2 в массив В соседней ветви с тем же спецификатором N2. Номер соседней вычисляется по разному в зависимости от параметра Х: при х=0 как Ni+1=Ni+1, а при х=1 как Ni+1Ni-1. Ветви подмножества N2 условно объединяются в кольцевой конвейер, и тогда, например при х=1, данные по кольцу из первой ветви передаются в последнюю ветвь.
4) Обобщенный условный переход:
GCP(N2,F):GOTO M – Это проверка во всех ветвях (в каждую вписан такой оператор) со спецификатором N2 предиката F<0. Если во всех ветвях подмножества N2 : F<0, то управление передается на метку М; если же F³0, то – на следующий оператор во всех ветвях.
Остальные операторы называются:
коллективный обмен, трансляционно-циклический обмен, групповая синхронизация.
Индивидуальное взаимодействие организуется только между двумя ветвями параллельной программы. Оператор индивидуального взаимодействия присутствует только в одной ветви, инициализирующей взаимодействие. Адрес инициируемой второй ветвиявляется параметром названного оператора.
Разрещающим событием для взаимодействия является факт готовности другой инициируемой ветви участвовать в данном взаимодействии. Причины её негативности см. в п. 3.3.3. «Синхронизация».
Ветвь-инициатор и ядро МОС узнают о готовности запрашиваемой ветви по содержимому её паспорта события, который хранится в ЛОП ЭМ. Паспорт одного события хранится в ячейке ALO каждой ЛОП.
В ячейке может храниться от одного шестнадцатиразрядного значения семафора при d=1 до шестнадцатимерного вектора однобитовых признаков открытия-закрытия шестнадцати семафоров, т. е. k=[16/d] семафоров, как целая часть дроби, т. е.
семафоров, как целая часть дроби В отличие от семафоров Дейкстра здесь допускаются только положительные значения семафоров, а операции над ними выполняются по mod (2d-1). Число, модифицирующее значение семафора, может быть любым |Ai|£2d-1. Выполняется только сложение вида:

Значения модифицирующих констант {Ai} хранятся в двух ячейках ЛОП.
![]() | |
| |
Кроме этого в ячейке AL1 паспорта события хранится код двоичной маски вектора семафоров, выделяющий те семафоры, которые должны быть использованы в логической операции над семафорами для проверки факта готовности инициируемой ветви к данному взаимодействию.
Знак имени I паспорта в ячейке AL0 является признаком одной из двух логических операций, выполняемой над их двоичными признаками вида:

Если I>0 над незамаскированными компонентами вектора семафоров выполняется конъюнкция:

а при I<0 – дизъюнкция:
.
В параллельных программах создается несколько паспортов событий с разными именами I, содержимое ячеек которых AL0,AL1,AL2 заготавливает программист в результате анализа всех критических интервалов и необходимых условий синхронизации во взаимодействии параллельных ветвей.
Паспорт событий обрабатывается следующим образом.
По имени I выбирается требуемый паспорт. I обычно – параметр команды взаимодействия. Маской из ячейки AL1 маскируются ненужные светофоры в данном взаимодействии. В соответствии со знаком I над незамаскированными светофорами выполняется логическая операция, а по её результату, если он =0, ветвь-инициатор блокируется, а если он =1, то считается, что событие готовности второй ветви свершилось. Тогда путем прибавления содержимого ячейки AL2 модифицируются значения семафоров в ячейке AL0 для подготовки этого же паспорта к проверке готовности в следующем сеансе взаимодействия этих же ветвей. И только после этого выполняется под управлением ядра МОС адресная маршрутизация, прокладка логического канала между ветвями и передача управления ветви-инициатору, которая по проложенному каналу обращается в ЛОП удаленной ЭМ для записи в нее своего или чтения из него чужого блока данных. По окончании передачи управления возвращается к ядру МОС, которое переходит к обслуживанию следующего запроса на взаимодействие.
Программное управление аппаратом события осущкствляетсяследующими операторами языка:
1. Задать паспорт событий: INP(d, I,P) – это внести в ячейку AL0 указанные здесь параметры d и I и обнулить значения семафоров в этой ячейке.
Параметр Р, включаемый во все команды означает: если Р=0, то ветвь-инициатор лишь ожидает события; если Р=1, то она передает управление фоновой программе по метке М. В последнем случае нужно добавлять код перехода: INP(d, I,P), GOTO M.
2. Удалить паспорт событий: IAP(I, P) –удаляется паспорт с именем I. Смысл тот же.
3. Записать в паспорт событий: IWS(I, AL1,AL2,P) – содержание параметров AL1, AL2 тождественно заносятся в ячейки паспорта AL1 и AL2. Количество значений в AL1 и AL2 обязательно равно k=[16/d], где d – это параметр предыдущей первой команды. Так как в операторе 1 семафоры обнуляются, то их значения полностью определяются содержимым AL2 и последующими модификациями путем прибавления его к содержимому поля {Si} ячейки AL0.
4. Прочитать паспорт событий: IRS(I, AL, P) – переписать содержимое ячейки AL0 в другую ячейку AL в ЛОП ЭМ.
В программы ветвей-инициаторов могут вписываться следующие типы операторов индивидуального взаимодействия:
1. Индивидуальная запись: IW(I, AL1,AL2,L, A,N, B,P) – это передача N слов из массива А той ветви – инициатора, в которой встретился этот оператор JW, в массив В ветви с номером L. Перед этим по семофорам, которые хранятся в паспорте события с именем J, проверить готовность удаленной ветви L к приему данных. Проверять только семафоры незамаскированные содержимым ячейки AL1. После наступления события перед передачей данных модифицировать значение семафоров в паспорте J в ячейке AL0 константы {Ai} из ячейки AL2.
2. Индивидуальное чтение: JR(J, AL1,AL2,L, A,N, B,P) – это аналогично предыдущему обратная передача N слов из массива В ветви L в массив А той ветви, где этот оператор JR встретится. Под А и В в командах 1,2 понимаются начальные адреса блоков данных длиной N слов.
3. Неструктурированный переход: UG(J, AL1,AL2,L, B,P) – это внешнее прерывание программ в другой ветви L по инициативе той ветви, в которой встретился данный оператор, и передача управления в удаленной ветви L на оператор под адресом В в локальной памяти ЛОПL L-го процессора.
4. Продолжение счета: MW1 без параметров. Применяется, если необходимо продолжить счет ранее прерванной фоновой программы. Фоновая программа запускается, если в названных выше операторах параметр Р=1 и оператор дополнен GOTOM, а из-за несвершения события синхронизации основной оператор блокируется. Тогда, чтобы загрузить процессор, запускается программа по метке М, но она сразу же прерывается в момент свершения события основного оператора, и чтобы ее завершить, например в паузе загрузки процессора, возможной при групповом взаимодействии, можно применить при параллельном программировании данный оператор MW1.
Организация отказоустойчивых вычислений основана на введении в программы с помощью специальных операторов контрольных точек и точек возврата для преодоления сбойных ситуаций путем двух или трехкратного прохода одного и того же участка программы.
Более глубоко вопросы отказоустойчивой организации ЭВМ изучаются в отдельной дисциплине.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



