Данному образовательному сайту пришлось несколько раз менять свое имя. С 2011 года доступ к нему обеспечивается по URL
http://educomp.runnet.ru

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта

Система команд параллельных Удвоителей

Система команд ПУ1-ПУ9

Начнем с более простой системы команд «периферийных» вычислителей ПУ1 – ПУ9. Их главные команды, как и в случае классического Удвоителя, это умножение на два (кратко будем обозначать эту команду 2) и прибавление единицы (команда 1). Будем считать, что эти действия производятся над числами, находящимися в специальном регистре устройства – сумматоре (сокращенно см).

КомандаСодержание операцииКол-во тактов
1см = см + 11
2см = см * 21
0см = 01
операции обмена данными:
iввод значения из ПУ0 в см2+ожидание
oвывод значения из см в ПУ03+ожидание
Aсм = см + введенное число2+ожидание
операции с памятью:
M0M = 01
MWM = см1
M+M = M + см1
MRсм = M1

Очевидно, что начальное значение сумматора не определено. Можно предложить для инициализации сумматора заносить туда ноль (команда 0). А можно для расширения количества задач предусмотреть ввод начального значения в сумматор из главного Удвоителя ПУ0 (команда i). Альтернативная команда ввода A отличается от i только тем, что вводимое число суммируется со значением, лежащим в сумматоре, а не замещает его.

Последняя из операций обмена данными – команда o, возвращает результат вычислений из сумматора в центральный Удвоитель ПУ0.

Для того чтобы не путать между собой команды 0 и o, а также 1 и i в тексте при обозначении этих команд везде будут использованы строчные латинские буквы.

Еще раз подчеркнем, что каждый из ПУ1 – ПУ9 способен обмениваться данными только с ПУ0, но не между собой. Кроме того, невозможно напрямую ввести в них исходные числа или сразу вывести результат вычислений на экран – такими функциями наделен лишь ПУ0.

Для расширения спектра решаемых задач в ПУ добавлена ячейка памяти (вспомним, что она есть даже в самой убогой модели калькулятора!) Память обслуживается четырьмя командами: M0 обнуляет содержимое ячейки памяти, MW записывает в нее число из сумматора, MR производит обратное действие, т.е. читает содержимое ячейки в сумматор, и, наконец, M+ прибавляет к числу, которое хранится в памяти, содержимое сумматора.

В последнем столбце таблицы указано количество условных машинных тактов, которое необходимо для выполнения каждой операции. Время вычислений прямо пропорционально количеству тактов, что дает возможность легко сравнивать между собой эффективность различных алгоритмов.

Предполагается, что все вычислительные инструкции выполняются за 1 такт, как это происходит в современных процессорах. Команды ввода при отсутствии ожидания требуют 2 такта, а вывода – 3 («несимметрия» обусловлена принятым в модели алгоритмом обмена).

Система команд ПУ0

ПУ0 обладает во многом похожей системой команд. Поэтому кратко опишем только ее особенности.

Первое отличие состоит в записи команд обмена. Поскольку ПУ0 способен обмениваться с любым из остальных ПУ, в команде требуется обязательно указывать номер нужного ПУ. Команды i0, o0 и a0 для ПУ0 лишены смысла (устройству незачем передавать данные самому себе!), поэтому их появление в тексте фиксируется как ошибка. С другой стороны, ПУ1–ПУ9 могут обмениваться данными только с ПУ0, поэтому номер указывать не нужно. В этом случае команды i0, o0 или a0 программа считает корректными, но ради единообразия «0» из их записи автоматически удаляется.

Выделенные в таблице команды R и W дают ПУ0 возможность принимать аргументы для вычислений и выводить результаты на экран. Устройства ввода-вывода предполагаются «быстрыми», поэтому указанные команды всегда выполняются без ожидания за 2 такта.

КомандаСодержание операцииКол-во тактов
1см = см + 11
2см = см * 21
0см = 01
операции обмена данными:
iNввод значения из ПУN в см2+ожидание
oNвывод значения из см в ПУN3+ожидание
ANсм = см + введенное число2+ожидание
Rчтение значения в см2
R+см = см + прочитанное число2
Wвывод значения см на экран2
операции с памятью:
M0M = 01
MWM = см1
M+M = M + см1
MRсм = M1

Пример 1

Написать программу для ПУ0, которая умножит исходное число на 10.

Расчетная формула: 10z = 2z + 8z.

Программа:
2 MW 2 2 M+ MR

Программа работает так. Начальное значение удваивается и сохраняется в память. Затем полученное число еще дважды умножается на 2 (в итоге результат будет больше исходного значения в 8 раз) и добавляется к памяти. После этого сумма 2z и 8z считывается из памяти в см.

Заметим, что если взять этот фрагмент и дописать его еще раз, то получится программа умножения числа на 100.

Пример 2

Передать в ПУ1 и ПУ2 его номер; ПУ должны возвратить его, увеличив на 1.

Программа для ПУ0:
0 1 o1 1 o2 i1 W i2 W

Нетрудно видеть, что ПУ0 получает в сумматоре 1 и передает ее в ПУ1, а затем, прибавив еще раз 1, передает число 2 в ПУ2. После этого главный Удвоитель по очереди принимает результаты из ПУ1 и ПУ2, выводя каждое из чисел на экран.

Программа для ПУ1 и ПУ2:
i 1 o

Эта программа еще проще. Приняв число из ПУ0, каждый ПУ увеличивает его на 1 и передает обратно.


© Е.А.Еремин, 2017


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com