11.16. Обзор особенностей FDP, связанных с распараллеливанием
В FDP действия над командами, арифметические операции и обращения к
памяти выполняются параллельно. В связи с этим пришлось изменить некоторые
стандартные команды ЦВМ, а также ввести несколько новых команд. Выше уже
упоминались затруднения при выполнении команд перехода, вызванные поточным
исполнением команд. В качестве выхода из положения было решено переходить к
выполнению команды, следующей за командой перехода, не дожидаясь окончания
проверки условия перехода. Такая схема вполне допустима при наличии в тексте
программы одиночных (изолированных) команд перехода. Если же встречаются
цепочки переходов, то зависимость получаемых результатов от входных
(обрабатываемых) данных настолько сложна, что программисту будет трудно
разобраться в работе машины. Для решения проблемы было предложено ввести
команду «пропуск при переходе» SOJ (skip on jump), записываемую в левых 18 разрядах, если в правых 18 разрядах
записана команда перехода. При этом, хотя проверка условия выполнения перехода
еще не закончена, последующая команда вызывается, но пока не исполняется.
Следовательно, сохраняется возможность отмены этой команды, если в результате
проверки условия перехода выяснится, что переход необходим. Таким образом, за
счет команды SOJ переход в
становится аналогичным переходу в
обычной ЦВМ, но при этом приходится терять 150 нс на вызов отменяемой команды.
В
большинстве ЦВМ переходы соответствуют различным арифметическим условиям: в
накопителе находится нулевое или отрицательное число, произошло переполнение и
т. д. Поскольку в
используются четыре арифметических
устройства, то ситуация усложняется. Эта трудность преодолевается
соответствующим выбором формата команды:
|
6
|
8
|
|
|
|
|
Переход
по
|
арифметическому
условию
|
|
|
|
|
|
Четыре
разряда справа определяют, какое АУ является управляющим. Если какое-либо из
равно 1, то
переход произойдет, когда в соответствующем арифметическом устройстве АУ; будет
выполнено условие перехода. Если несколько
равно 1, то переход происходит
согласно логической функции ИЛИ. Так, если
, то переход по команде JPR (jump if R is positive —
переход при положительном
) произойдет, если хотя бы в одном из
четырех регистров
окажется положительное число. Другим
методом обработки условий перехода в
является использование команды
блокировки
(nullify). При параллельной работе четырех АУ может потребоваться, чтобы
каждое АУ работало по своей программе, зависящей от получаемых результатов
(данных). Команда
позволяет заблокировать любую совокупность
АУ, в результате чего состояния этих АУ не будут изменяться, даже если на них
будут поступать соответствующие команды. Код команды
имеет следующий формат:
|
6
|
|
3
3 АУ1 АУ2
|
3
А
УЗ
|
2
АУ4
|
Для
каждого АУ возможны восемь условий блокировки:
|
|
|
000 001 010
011
100
101
110
111
|
не блокировать
блокировать, если
блокировать, если
блокировать, если
блокировать, если
блокировать, если
блокировать, если
блокировать
|
|
В
дополнение к команде
имеется команда
(activity)
снятия блокировки с АУ, по условию или безусловно отменяющая блокировку АУ. Обе
команды —
и
—
исполняются с задержкой на время выполнения одной команды, что позволяет выполнить
в АУ две команды после проверки условия выполнения команды NUL и одну после проверки условия выполнения команды
.
Еще
одна трудность связана с разделением памяти на ЗУ программы и ЗУ чисел, а
также с наличием синхронного поточного обращения к ЗУ
. Такое обращение может
привести к сбоям, если разрешается как считывание, так и запись в
. Если же запись не
разрешается, то программы нельзя изменять, а это весьма неудобно. Например,
программы БПФ и обратного БПФ отличаются лишь пятью или шестью командами.
Кроме того, программа может быть большой и не помещаться в 512 ячейках, имеющихся
в
.
Поэтому, чтобы скорость обработки существенно не изменялась, излишек текста программы
следует хранить в ЗУ
и
, предусмотрев
возможность быстрого считывания из этих ЗУ в Мс. В
это обеспечивается командой
пересылки массива, при выполнении которой управление передается специальному
устройству, единственной задачей которого является пересылка
команд из ЗУ
и
в ЗУ
. Число
пересылаемых команд и их размещение в ЗУ задаются кодом команды пересылки
массивов. При описании
уже отмечалось, что процессор
оперирует с 18-разрядными словами. Следует, однако, помнить, что полная длина
слова команды равна 36 разрядам, а так как к ЗУ
и
можно обращаться для записи или
считывания одновременно, то в распоряжении программиста имеются и
36-разрядные числа. Более того, наличие четырех АУ позволяет формировать и обрабатывать
72-разрядные числа. Предусматривая все эти варианты, проектировщики постарались
обеспечить в
широкие
возможности для программного изменения точности вычислений. Для этого используется
команда объединения
(link). С
ее помощью можно разряд переноса передать из
в
, а с применением команд сдвига —
перемещать числа из
в
АУИ и обратно. Например, команда
используется
для сложения 36-разрядных чисел. Первыми складываются младшие 18 разрядов, а
затем — старшие. Если в команде
все четыре определяющих разряда —
единицы, то все 72 разряда в четырех регистрах
можно сдвинуть (по кольцу) вправо или
влево на один разряд, используя только одну 18-разрядную команду.