Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ - EmuStudio (http://zx-pk.ru/showthread.php?t=18027)

Patron 19th December 2012 12:26

Quote:

Originally Posted by Titus (Post 560353)
У ВМ2 есть предвыборка слова команд, а стало быть это можно рассматривать, как кэш на одно слово.

Не вполне. У ВМ2 в принципе невозможна предвыборка данных, а команды предзагружаются только при выполнении команд EIS. При выполнении обычных команд предвыборка у ВМ2 ( насколько я понял ) такая же, как и у ВМ1 ( весьма похоже, что у ВМ1 предвыборка тоже есть, только без дополнительного буфера - сразу в основной ).

---------- Post added at 10:26 ---------- Previous post was at 10:19 ----------

Кстати, вполне возможно, что и у ВМ2 нет специального буфера предвыборки, а предвыборка осуществляется, как и у ВМ1 - в основной буфер, но по более продвинутому алгоритму.

Patron 19th December 2012 15:18

Команды EIS характерны тем, что приёмник всегда регистр, поэтому после загрузки операндов и начала операции - можно начинать предвыборку, т.к. запись результата операции в память гарантированно не потребуется.

Учитывая, что команды EIS были в военных версиях ВМ1 - весьма похоже, что и предвыборка у ВМ1 мало чем отличается от предвыборки ВМ2.

А чем вообще предвыборка у ВМ2 может отличаться от предвыборки у ВМ1 ?

NovaStorm 19th December 2012 15:19

Вот кстати пишут на http://en.wikipedia.org/wiki/PDP-11_architecture#Speed про PDP-11/70
Quote:

Any case where addressed memory was not in the cache added 1.02 microseconds.
То есть кэш всё-таки встречался.

Patron 19th December 2012 15:31

Quote:

Originally Posted by NovaStorm (Post 560454)
added 1.02 microseconds

Это 10 тактов шины 10 МГц.
Т.е. при полном попадании в кеш - команда
Code:

        ADD        @TAB1(R0), @TAB2(R1)
использующая 8 обращений к памяти - выполнится на таком процессоре на 80 тактов быстрее, чем на 1801ВМ2.

Titus 19th December 2012 16:11

Quote:

Originally Posted by Patron (Post 560423)
Не вполне. У ВМ2 в принципе невозможна предвыборка данных, а команды предзагружаются только при выполнении команд EIS. При выполнении обычных команд предвыборка у ВМ2 ( насколько я понял ) такая же, как и у ВМ1 ( весьма похоже, что у ВМ1 предвыборка тоже есть, только без дополнительного буфера - сразу в основной ).

Не знаю, какая предвыборка у ВМ1, но явно иная. А у ВМ2 действительно есть предвыборка слова команд. И я это даже реализовывал в своем эмуляторе.
Подробно об этом можно почитать в доках на ВМ2, которые я выкладывал.

Patron 19th December 2012 16:32

Quote:

Originally Posted by Titus (Post 560463)
Не знаю, какая предвыборка у ВМ1, но явно иная. А у ВМ2 действительно есть предвыборка слова команд. И я это даже реализовывал в своем эмуляторе. Подробно об этом можно почитать в доках на ВМ2, которые я выкладывал.

Подробного описания алгоритма предвыборки в доках ВМ2 мне найти не удалось. То, что там написано о предвыборке - довольно малоинформативно.

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

Главная причина в том, что цикл чтения занимает кучу тактов, поэтому начать предвыборку до завершения любой команды, которая работает с операндами в памяти - невозможно. Но это значит, что предвыборку нельзя начать и до того момента, пока текущая команда не будет раскодирована и не станет ясно, потребуются ли ей дальнейшие циклы шины или нет.

Процессор ВМ1 выполняет две последовательных команды TST R0 быстрее, чем одну команду TST (R0). Такое возможно только при наличии предвыборки регистровых команд.

Titus 19th December 2012 16:42

Quote:

Originally Posted by Patron (Post 560471)
Подробного описания алгоритма предвыборки в доках ВМ2 мне найти не удалось. То, что там написано о предвыборке - довольно малоинформативно.

Процессор ВМ1 выполняет две последовательных команды TST R0 быстрее, чем одну команду TST (R0). Такое возможно только при наличии предвыборки регистровых команд.

Ну нифига себе) Там несколько листов на эту тему, причем как в томе-1, так и в том-2. Когда я писал эмулятор, у меня был только первый том. Да еще и в схемах все это есть.

Еще раз повторюсь, ничего не знаю о предвыборке на ВМ1, но она явно должна отличаться. Иначе вообще какой смысл было городить ВМ2) Только из-за нескольких расширенных команд?

Patron 19th December 2012 17:05

Quote:

Originally Posted by Titus (Post 560473)
Там несколько листов на эту тему, причем как в томе-1, так и в том-2.

Значит я плохо смотрел и Вы меня где надо поправите.

И ВМ1 и ВМ2 выполняют регистровые команды ( например, команды TST R0 ) фактически со скоростью чтения памяти - это достигается за счёт того, что пока арифметический блок "переваривает" текущую команду - управляющий блок уже заказывает у интерфейсного блока чтение кода следующей команды. При этом циклы чтения идут на шине непрерывно.

Если же команде нужно прочитать операнд ( как, например - в команде TST (R0) ) - то между циклом чтения кода команды и циклом чтения операнда у ВМ1 появляется "просвет" в 1 дополнительный такт. Поэтому, процессор 1801ВМ1 выполняет две команды TST R0 быстрее, чем одну команду TST (R0).

Вряд ли у ВМ2 может быть как-то иначе.

Возьмём для примера другую команду: MOV (R0),(R1)
Где там "внутри команды" ВМ2 может успеть выполнить предвыборку, если во время выполнения этой команды шинные циклы идут почти "без зазора", а после выполнения последнего из них ( запись результата по адресу, находящемуся в R1 ) - команда уже завершена ?

Получается, что и в процессе выполнения этой команды механизм предвыборки ВМ1 и ВМ2 работает одинаково.

А когда они работают по-разному? Когда процессор ВМ2 может успеть "впихнуть" цикл чтения предвыборки "внутрь" выполнения любой команды, кроме команды EIS.. Не вижу таких вариантов.

Titus 19th December 2012 17:14

Quote:

Originally Posted by Patron (Post 560478)
А когда они работают по-разному? Когда процессор ВМ2 может успеть "впихнуть" цикл чтения предвыборки "внутрь" выполнения любой команды, кроме команды EIS.. Не вижу таких вариантов.

А если один из операндов - это непосредственные данные, следующие за кодом команды? ВМ1 - будет их читать все равно из памяти или же возьмет из прекешированного слова? У ВМ2 - второй вариант, на сколько я помню.

Patron 19th December 2012 17:37

Quote:

Originally Posted by Titus (Post 560480)
А если один из операндов - это непосредственные данные, следующие за кодом команды? ВМ1 - будет их читать все равно из памяти или же возьмет из прекешированного слова? У ВМ2 - второй вариант, на сколько я помню.

Такой вариант исключён и для ВМ1 и для ВМ2. Они хранят только одно прочитанное слово и это слово всегда команда.

Дело в том, что предвыборка у ВМ1 и ВМ2 начинается только тогда, когда точно известно, что больше обращений к шине у текущей команды не будет. Такое бывает лишь в 2х случаях:

1. Операция начата, а приёмник результата операции - регистр.
2. Запись результата операции в память уже выполнена.

Легко заметить, что в обоих этих случаях следующее слово, загружаемое из памяти - команда.


All times are GMT +4. The time now is 02:45.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.