Просмотр полной версии : Сравнение скорости копирования ОЗУ разными камнями и ЭВМ
О измерениях быстродействия 1801-й и некотрых 1806 процессоров уже было написано.
А вот практические задачи по типу как копирование массива ОЗУ ( например, 1 Кбайт ) - пока что-то не было написано.
Прошу принять участие владельцев всех типов ЭВМ, особенно на Z80 - 3.5 мгц, 580ВМ80-2.5 мгц и некотрых др.
Допускаются любые способы оптимизации исполняемого кода.
( Очень даже вероятно, что БК11М-4 мгц существенно отстанет от Z80-3.5 мгц 48 Кбайт ДОЗУ ).
Образец текста программы для ДВК/БК , набирать с 1000 адресу :
001000 : 012700 010000 012701 000200 012702 002000 012703 004000
001020 : 012223 012223 012223 012223 012223 012223 012223 012223
001040 : 077111 077020 000000
Что делает программа ?
Копирует 4096 раз массив 1 2 Кбайт ( длина 002000 слов / 004000 байтов ) с адреса 002000 в адрес 004000.
Для особо точного измерения можно потом в адресе 001040 число 077111 заменить на 077101 и замерить время Холостого Хода ( чисто время организации цикла ).
Результат мумрулятора ДВК-2 МС1201.01 5.3 мгц :
33 сек, ХХ - 2.5 сек, производительность - 134.3 Кбайт/с ( 1 Кбайт = 1024 байт ).
LeoN65816
06.03.2019, 14:50
Прошу принять участие владельцев всех типов ЭВМ
ПЭВМ: АГАТ-9 (https://zx-pk.ru/threads/29686-obshchie-voprosy-po-uknts.html?p=993345&viewfull=1#post993345), ЦП: 6502/65802, частота: стандарт 1.021МГц, турбо 3.5 Маха и 5 Махов, операция: копирование блока памяти и заполнение блока памяти константой.
72499
Lethargeek
06.03.2019, 21:23
( Очень даже вероятно, что БК11М-4 мгц существенно отстанет от Z80-3.5 мгц 48 Кбайт ДОЗУ ).
конечно, отстанет, на z80 даже тупо цепочка ldi даст 16 тактов/байт ~ 213 кб/с, переброска стеком ~ 248 кб/с
не говоря уже про ~ 325 кб/с ld-push (но там уже оптимизация не только кода, но и формата данных)
Измерил на БК11М - 4 мгц : 52.5 сек, ХХ - 3.5 сек.
Чистое время выполнения - 49 сек, итого скорость копирования 83.6 Кбайт/с. ( Точно - 171 Кбайт/с )
- - - Добавлено - - -
В калькуляторе на Н1806ВМ2-5.5 мгц 0 тактов СОЗУ - 18.5 сек, ХХ - 2.2 сек, итого чистое время - 16.3 сек.
Быстродействие - 251.3 кбайт/с. ( Точно - 513 Кбайт/с )
Lethargeek
06.03.2019, 22:01
переброска стеком ~ 248 кб/с
...или даже 256 кб/с, если порции не 16 байт
Измерил на БК11М - 4 мгц : 52.5 сек, ХХ - 3.5 сек.
Чистое время выполнения - 49 сек, итого скорость копирования 83.6 Кбайт/с.
в три раза :v2_eek: :v2_wacko: "самый 16-битный компьютер в мире" :v2_clapp:
"самый 16-битный компьютер в мире"
Скорее самый нетрезвый комп в мире.
:v2_dizzy_vodka4:
LeoN65816
06.03.2019, 23:04
Для особо точного измерения можно потом в адресе 001040 число 077111 заменить на 077101 и замерить время Холостого Хода ( чисто время организации цикла ).
077101 - это NOP вместо чтения-записи что ли? Если да, то время на его выполнение все равно же тратится, поэтому данную методу вычисления "чистого времени" выполнения следует считать некорректной... Только полное время! ;)
077101
Это SOB - вычитание 1 из регистра ( R1 ) и ветвление назад на ( 1 ) слов.
*
012700 010000 - занести в R0 число 010000 ( 4096 - дес. )
012701 000200 - занести в R1 число 000200 ( 128 - дес. )
012702 002000 - занести в R2 число 002000 ( 1024 дес. )
012703 004000 - занести в R3 число 004000 ( 2048 дес. )
012223 - переслать из адреса, содержащегося в R2 в адрес, содержащийся в R3. После команды увеличить R2 на 2 и R3 на 2 ( автоинкремент ).
077111 - вычесть из R1 единицу и в случае, если R1 не =0, перейти на 11 ( 8 ) слов назад, к адресу 1020
077020 - вычесть из R0 единицу и в случае, если R0 не =0, перейти на 20 ( 8 ) слов назад, к адресу 1004
LeoN65816
06.03.2019, 23:58
MM, ясно, спасибо. Однако:
1. С адреса 001020 восемь словных пересылок - итого 16 байт, значит для килобайта пересыла нужно грузить в R1 не 128, а 64 итерации (внутренний цикл).
2. Даже с заменой 077111 на 077101 эти восемь словных пересылок все равно выполняются 4096 раз (внешний цикл). То есть это никак не холостой ход, и метода все-таки некорректна...:confused:
3. Раз это "практическая задача по типу как копирование массива ОЗУ", то и измерять время надо вместе с исполнением цикла. И не важно какой он (цикл) - обычный или развёрнутый (ты же сам указал "допускаются любые способы оптимизации исполняемого кода"), то есть полное время.
За понимание! :v2_dizzy_vodka2:
для килобайта пересыла нужно грузить в R1 не 128, а 64 итерации (внутренний цикл).
Ну да, извиняюсь :o
Значит результат удваиваем !
БК11М - 83.6 Кбайт/с х 2 = 167.2
Калькулятор -251.3 кбайт/с х 2 = 502.6 Кбайт/с
Теперь больше похоже на правду...
- - - Добавлено - - -
восемь словных пересылок все равно выполняются 4096 раз (внешний цикл)
При смещении в команде SOB "1" цикл идет сам на себя, и др. команд не выполняется - 77101 чисто холостой цикл.
Lethargeek
07.03.2019, 06:49
в полтора раза еще куда ни шло, но тоже невесело
но тоже невесело
Интересно посмотреть на правильно спроектированном дизайне, ибо серия БК мало того, что отклоняется от генеральной линии QBUS, так ещё и спроектирована по технологии ТяпусЛяпус.
- - - Добавлено - - -
001000 : 012700 010000 012701 000200 012702 002000 012703 004000
001020 : 012223 012223 012223 012223 012223 012223 012223 012223
001040 : 077111 077020 000000
|
V
MOV #^D<4096>, R0
10$:
MOV #^D<128>, R1
MOV #^O<2000>, R2
MOV #^O<4000>, R3
20$: .REPT 8.
MOV (R2)+, (R3)+
.ENDR
SOB R1, 20$
SOB R0, 10$
LeoN65816
07.03.2019, 13:48
При смещении в команде SOB "1" цикл идет сам на себя, и др. команд не выполняется - 77101 чисто холостой цикл.
Это ты изменяешь внутренний цикл. А что у тебя во внешнем цикле? Ведь специально здесь (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002494&viewfull=1#post1002494) расписал внутренний и внешний...
Неужели для тебя это не очевидно??? :confused:
Это ты изменяешь внутренний цикл. А что у тебя во внешнем цикле? Ведь специально здесь (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002494&viewfull=1#post1002494) расписал внутренний и внешний...
Неужели для тебя это не очевидно??? :confused:
Прекращаем троллить.
Здесь идет речь о скорости пересылки командой MOV, т.е. без каких-либо циклов, т.к. никто на ВМ1 делать ничего не будет, а в более поздних процессорах есть конвеер, для которого последовательность команд Очень критична ( т.к. ветвление сбрасывает конвеер ).
УКНЦ - 28.2 секунды (ЦП)
Да я и сам собирался измерить, но вот БП пока не готов...
https://pic.maxiol.com/thumbs/1551960522.531453702.2431.jpg (https://pic.maxiol.com/?v=1551960522.531453702.2431.jpg)
Квант-4С
На повторе 64 раза - 15 и 1.25
На повторе 128 раз - 30 и 2.5
Пардон, ошибся в последней строке - не 20 конечно, а 30. Поправил
- - - Добавлено - - -
Это вроде получается как 298 кб/с
Попробую завтра прогнать этот тест на прокачанной плате для Квант-а
Прокачанный Квант
На повторе 128 раз - 19.2 и 1.8
Примерно 471 кб/с
- - - Добавлено - - -
Заменил mov (R2)+, (R3)+ на mov R0, R0
На повторе 128 - 6.3 и 2.3
Примерно 10499000 операций регистр-регистр в секунду
- - - Добавлено - - -
На прокачанном
На повторе 128 - 4.2 и 1.8
Примерно 1748000 операций регистр-регистр в секунду
На обычном Кванте ошибся при написании - хх не 1.8, а 2.3. Поправил
- - - Добавлено - - -
Блин, ошибся в расчётах на прокачанном. Поправил
в расчётах
Не будет ли возможности привести частоты ( а желательно и осцилограммы ) тактовых импульсов процессоров ?
( Т.к.531ГГ1 выдает вовсе не 50/50 скважность - поэтому МС1201.03/04 так плохо разгоняется, т.к. ВМ3 использует оба фронта такта ).
Не будет ли возможности привести частоты
Ну, прокачанный - 6 МГц почти наверняка, а обычный - надо смотреть. Я так понимаю, нужна нога 60 проца?
Не будет ли возможности привести частоты ( а желательно и осцилограммы ) тактовых импульсов процессоров ?
https://www.youtube.com/watch?v=m-TfYwLSMUE
5 МГц, 50-50, щас попробую скриншот сделать (я ещё учусь пользоваться) :)
MM, хотя бы для Зеленоградских машинок пишите тест под RT-11 который сделает и выдаст что вам нужно, только что бы это нормальная программа была с запуском из системы, а не вводом с пульта и замером секундомером каким-то - такие измерения - им ценность 0,
Patron, Titus - делали программные тесты ) В крайнем случае пишите на системном Бейсике ?
Занимательно. Рабочая плата 4.464 с чем то, нерабочая - 5, прокачанная, как и говорил - 6 Мгц.
- - - Добавлено - - -
Для русскоговорящих (http://www.KpXX.Ru/KBAHT4C/Железо/МС1201.04/Осциллограммы Clk)
For English speaking (http://www.KpXX.Ru/KBAHT4C/Hardware/MS1201.04/Waveforms Clk)
Насчет измерений под RT-11 в ДВК - как-то в 1993 г. я собрал кучку всяких там ТМОС, разнообразных вариантов ОС и какую-то диковинную ОСь, которая была вовсе не RT-11 SJ, или даже вообще не RT-11. На всех ~10 дискетах МХ были разные измерители быстродействия - по датам файлов и даже по размеру.
Так вот, все варианты измерителей показывали разное быстродействие на 1 шт. МС1201.02 в ДВК МС507 - разница была в районе 10-20% для рег-рег. Тесты проводил несколько раз - смежные замеры вроде бы были идентичны.
С тех пор для академических измерений пользуюсь самодельным текстом, ориентированным на конвеерные процессоры ( ну типа профонации ... Да и Интел тоже так делает ... ).
( Т.к.531ГГ1 выдает вовсе не 50/50 скважность - поэтому МС1201.03/04 так плохо разгоняется, т.к. ВМ3 использует оба фронта такта ). А не пробовали приклеить рядом 1533ТМ2 делителем частоты, а частоту ГГ1 удвоить?
LeoN65816
10.03.2019, 13:42
Интересная табличка (https://web.archive.org/web/20010629144633/http://teleline.terra.es/personal/dzorita/espeed.html): Code "B", 20 МБ памяти копируется LDIR-ом (21 такт/байт) на Z80@3.57 за 135.01 секунду, итого ~155.3 КБ/с.
LeoN65816
12.03.2019, 14:10
Ни здесь (https://ru.wikipedia.org/wiki/MIPS_(быстродействие)), ни здесь (https://en.wikipedia.org/wiki/Instructions_per_second) не указано быстродействие PDP-11 процессоров... А по остальным можно сделать вполне очевидный вывод.
вот нашел сравнение производительности PDP-11 и VAX-7xx:
VUP : "VAX 11/780 Unit of Power"
VAX Model VUP Rating
--------- ----------
V- 725 0.3
V- 730 0.3
V- 750 0.6
V- 751 0.6
V- 780 1.0
V- 782 1.8
V- 785 1.5
MicroVAX Model VUP Rating
-------------- ----------
MV I 0.3
MV II 0.9
PDP-11 Model VUP Rating
------------ -----------
PDP-11/03 0.05
PDP-11/04 0.11
PDP-11/23 0.12
PDP-11/23+ 0.18
PDP-11/24 0.18
PDP-11/34A 0.21
PDP-11/53 0.29
PDP-11/53+ 0.29
PDP-11/44 0.42
PDP-11/73 0.45
PDP-11/70 0.60
PDP-11/84 0.72
PDP-11/83 0.72
PDP-11/94 1.00
PDP-11/93 1.00
DSNlink also has an article called "CPU types and their related VUP
Ratings" dated 15-Jul-94 for those who have access.
PDP-11 Model VUP Rating А это что за зверь? Он сохранился, или нет?
PDP-11/34A 0.21 И, кстати, как наш ВМ3 в сравнении с оригиналом?
А это что за зверь? Он сохранился, или нет?
Это заголовок - Модель PDP-11 - Рейтинг в единицах мощности VAX. Просто кому то наплевать на читабельность
как наш ВМ3 в сравнении
ОЧЕНЬ бы хотелось иметь данные о Зеленоградских процессорах в общепринятых для DEC-процессоров единицах.
ОЧЕНЬ бы хотелось иметь данные о Зеленоградских процессорах в общепринятых для DEC-процессоров единицах.
ну, в принципе тут на форуме есть доступ к железным pdp11/73 /23 /23+ /83 т.е. в теории можно создать какойто тест и потом пересчитать его единицы в эти вот указанные тут единицы... (предпологая что зависимость линейная, т.е. нужно всего лишь вычислить коэфициент пересчета одних попугаев в другие)
в теории можно создать какойто тест
А на практике надо использовать тот же тест, которым мерили тогда
А на практике надо использовать тот же тест, которым мерили тогдаТак этим я и интересовался, сохранился ли тот тест? А то ответили, как в том анекдоте: "-Где мы? / -На воздушном шаре!"
PDP-11 Model VUP Rating
А это что за зверь? Он сохранился, или нет?
Как спросил, так ответил - где тут хоть слово про тест?
наверное, этот тест называется - Dhrystone. Вроде на этом форуме кто-то говорил, что мерил им (кажется - ММ).
LeoN65816
15.03.2019, 20:37
Тут (https://ru.wikipedia.org/wiki/MIPS_(быстродействие)) же все указано.
Тут же все указано.
https://books.google.ru/books?id=_eU_CQAAQBAJ&pg=PA78&lpg=PA78&dq=vax+unit+of+performance+program&source=bl&ots=lgajs8AgTe&sig=ACfU3U0j4d3FGflJsnmO2wo3JWsvuoHfRQ&hl=ru&sa=X&ved=2ahUKEwjhscze2YThAhVEyaYKHY9cC4sQ6AEwBHoECAAQA Q#v=onepage&q=vax%20unit%20of%20performance%20program&f=false
из этой таблицы :
Zilog Z80 (sega genesis) 0.58 MIPS /4 MHz 0.145 1976
VAX-11/780 1 MIPS /5 MHz 0.2 1977
Задорнов говорил - американцы тупые. DEC зачем-то городили груду рассыпухи, а оказывется Z-80 лишь в полтора раза медленнее VAX-780. Синклеры надо было ставить на AVAX.
Задорнов говорил - американцы тупые
В данном случае тупые не американцы, а некоторые, кто не понимает - зачем. Объяснять не буду. Но будь Z-80 даже на гигагерце - нах он мне не сдался.
Раз Вы все понимаете, то поделитесь - о сравнении быстродействия Зеленоградских и DEC.
а оказывется Z-80 лишь в полтора раза медленнее VAX-780.
Только надо учитывать что в sega genesis первичный центральный процессор был Motorola 68000 (конкретно у меня на имеющейся плате стоит МС68НС000Р10). Z80 вторичный (LH00808 Z808-CPU)
Ну и память стоит побыстрее чем 1977г в ВАКСе. Кроме того на сеге прогу запустили с картриджа без всякой ОС, где прога исполнялась напрямую.
Мне казалось, что здесь - все люди взрослые. Эта ветка форума, вроде, про компьютеры, а не про телевизионные приставки, консоли, синклеры, сеги и прочее.
На компьютерах - деньги зарабатывают - они должны давать экономический эффект (даже УБПК стояли в отделениях сбербанка), а не в детские игры играют. Правда, Зеленоградские тоже плохо для работы подходят.
На компьютерах - деньги зарабатывают - они должны давать экономический эффект (даже УБПК стояли в отделениях сбербанка), а не в детские игры играют. Правда, Зеленоградские тоже плохо для работы подходят
Да, в основном согласен.
МС1201.01 - оскорбительно малое быстродействие ( на частоте 1801ВМ1А 4.608 мгц ). Но по надежности - на порядок лучше других ( гражданских ). Работал с ней с 1987 по 1990 г. по нескольку часов в день.
МС1201.02 - с быстродействием, в общем, неплохо ( особенно после смены массива ДОЗУ 56 Кбайт на СОЗУ 1 такт ). Даже успевала тянуть КНГМД МХ ( круто патченный ) на 1.44 диски.
МС1201.03 и 04 - конструкторский кал. 1801ВП1-119 не обеспечивала правильные тайминги для советских М_е_д_л_е_н_н_н_ы_х БИС ДОЗУ , особенно с буквой "Г" , да и с "В" не всё было в порядке. Прямо с "Кванта" вываливала кучи ошибок ДОЗУ ( Т4 ).
МС1201.02 - с быстродействием, в общем, неплохоС надежностью тоже неплохо. По крайней мере у тех нескольких штук, с которыми я имел дело. Да и в ремонт они попадали редко, и неисправности были чепуховые.
вот нашел про Зеленоградские dhrystones
https://zx-pk.ru/threads/23978-tsifrovaya-arkheologiya-1801-i-vse-vse-vse.html?p=999805&viewfull=1#post999805
1806ВМ2- 283 dhrystones/second.
1801ВМ2 - 225 dhrystones/second.
ОЧЕНЬ интересно узнать у MiX - как он получил эти данные.
https://ru.wikipedia.org/wiki/Dhrystone
от туда:
"Dhrystone выдает результат в форме: Количество итераций в секунду.
[итерации не путать с простыми операциями регистр-регистр и скоростью копирования памяти !]
Часто этот результат приводят к DMIPS (от Dhrystone MIPS)
путём деления на 1757 (результат Dhrystone/s для компьютера VAX 11/780,
то есть номинальной машине с 1 DMIPS).
DMIPS можно делить на частоту процессора, чтобы получить DMIPS/MHz.
Такие единицы позволяют сравнивать процессоры с разной тактовой частотой. "
Таким образом :
1801ВМ2 - 225 dhrystones/second => 225/1757=0,13 VAX
1806ВМ2 - 283 dhrystones/second => 283/1757=0,16 VAX
близкие к ним DEC:
на F-11 (1811)
PDP-11/23 0.12
PDP-11/23+ 0.18
на J-11 (1831)
PDP-11/53 0.29
PDP-11/73 0.45
Lethargeek
16.03.2019, 16:39
https://en.wikipedia.org/wiki/Instructions_per_second
чудеса какие в этой таблице - обрезок 8088 немножечко эффективнее полношинного 8086, а nec v20 эффективней в несколько раз (!)
какой-то википедик увидел в доках цифру "250 нс на инструкцию" (а это даже не все типа регистр-регистр)
и ничтоже сумняшеся нарисовал отсюда рейтинг в 4 дмипса на 8 мгц, как у арма))))
данные, которые я привел по DEC и Зеленоградским процессорам - то же надо уточнить. И только потом можно привести их к одной тактовой частоте и сравнивать эффективность реализации каждой модели.
Для этого надо выяснить - откуда они взялись и насколько авторитетен источник. Ну а полностью можно быть уверенным - только прогнав этот тест с соблюдением требуемых условий.
Надеюсь MiX отзовется.
1806ВМ2- 283 dhrystones/second.
1801ВМ2 - 225 dhrystones/second.
ОЧЕНЬ интересно узнать у MiX - как он получил эти данные.
Мне тоже интересно. Я активно использую Dhrystone для ARM-ов, но это сишный тест. Чтобы запустить его на какой-то конкретной машине надо скомпилировать программу на Си, результат получается интегральный - тестируется не только аппаратура, но и собственно компилятор. Если запускался именно Dhrystone, то любопытно какой Си компилятор был использован?
то любопытно какой Си компилятор был использован?
Я использовал уже откомпилированный (не мной) тест под RT11.
тест под RT11
Поделитесь, пожалуйста.
Мне казалось, что здесь - все люди взрослые.
Разные люди, при этом у каждого свой уровень восприятия данной темы независимо взрослые или нет.
Эта ветка форума, вроде, про компьютеры, а не про телевизионные приставки, консоли, синклеры, сеги и прочее.
В данной ветке да, но не на форуме в целом. Кроме того Вы сами упомянули про Z80 (sega genesis).
Смотреть- Здесь. (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1003630&viewfull=1#post1003630)
На компьютерах - деньги зарабатывают
а не в детские игры играют
На всём деньги зарабатывают, в том числе и на детских играх.
Правда, Зеленоградские тоже плохо для работы подходят. Вы почитайте отзывы о ПВК Электроника МС0585 для сравнения.
Поделитесь, пожалуйста.
Тест в образе из комплекта эмулятора Патрона.
Вы почитайте отзывы о ПВК Электроника МС0585 для сравнения Это изделие воронежских копипастеров
Тест в образе из комплекта эмулятора Патрона.
Как называется файл ? где он в эмуляторе ?
Откуда он взялся (история происхождения) ?
Вы его туда положили или он у Патрона был ?
LeoN65816
18.03.2019, 00:07
Немного о скорострельности (http://ftp.dbit.com/pub/pdp11/faq/faq.pages/prfmnc.html) PDP-11.
И интересный FAQ (http://ftp.dbit.com/pub/pdp11/faq/faq.html).
Кстати, порылся в Нете, четкого ответа не нашел, но ведь, похоже, 11/34 - UNIBUS-ная машинка, да?
И второй вопрос: А как на UNIBUS-ных машинках сделана большая (бодьше 256К) память? Нет, я понимаю, что память подключена отдельной шиной, и пошустрее, чем UNIBUS, но по ДМА-то она недоступна? И как там выкручиваются с RK, MT и т.п. ?
А как на UNIBUS-ных машинках сделана большая (бодьше 256К) память
Unibus mapping registers (их использование, например, включается сигналом UMAP на ВМ3)
И что они (регистры) делают? Как они помогут контроллеру МТ передать данные задаче, которая лежит с адреса 3500000 ?
Они транслируют 18-битный адрес в 22-битный. Идея та же, что и при трансляции диспетчером памяти - в зависимости от адреса от устройства выбирается одна из 31 пары регистров UMAP и содержимое пары складывается (с часть адреса), который выставило устройство. 31 пара потому что формально 32-пара отвечает за страницу в/в, а туда по прямому доступу в память записи нет. Детали не помню - читать надо - потому как в драйверах (по крайне мере RSX) большая часть делается за счёт стандартных процедур ядра - типа - загрузи в регистры то-то, вызови такую то процедуру, всё - инициируй запрос, я (ядро) уже усё подготовило. Устройство выставляет 18-ти битный адрес, но его обращение идёт через UMAP, а он преобразует 18-ти битный адрес в 22-ух
Они транслируют 18-битный адрес в 22-битный.
Только уточню что этого оборудования нет в ВМ3, это внешняя аппаратура.
вот что говорится в кратком описании "Электроники-79"(Unibus, клон 11/70):
"обращение со стороны канала [18 разрядов] к ОЗУ [22 разряда] производится с помощью ПРЕОБРАЗОВАТЕЛЯ АДРЕСОВ КАНАЛА [есть такое отдельное аппаратное устройство в составе этой машины], который осуществляет аппаратное преобразование 18-разрядного адреса канала в 22-разрядный адрес ОЗУ. Работа его может быть разрешена или запрещена разрядом 5 третьего регистра состояния диспетчера памяти."
в квадратных скобках написал я.
В 79ой машине использовались планы (контроллеры) ввода-вывода от 100/25ой - 18-ти разрядные.
Электроника 60.1 - Qbus на 1811(F-11) процессор М6 мог адресовать и 18 и 22 разряда. В первоначальный период, когда выпускаемая в СССР память была маленькой емкости (581РУ4,565РУ3,РУ6) про 22 разряда никто и не замахивался, а когда появились РУ5 (а потом и РУ7) - захотелось использовать 22 разряда.
А многие контроллеры ввода вывода под Qbus были 18-ти разрядными. Захотелось сделать такое же устройство, как в 79ой, но под Qbus. Было ли такое устройство у DEC или нет, возможно ли его сделать и использовать штатно в RSX - достоверно неизвестно.
Только уточню что этого оборудования нет в ВМ3, это внешняя аппаратура.
Ну это как бэ подразумевается, ибо ВМ3 QBus и выхода на на шину Unibus не имеет
Захотелось сделать такое же устройство, как в 79ой
Больше того - оно и нас было не только на Э79 - было на СМ-1600, было на СМ1420 - на обеих 22 битная шина в память и вагон и маленькая тележка unibus контроллеров
Было ли такое устройство у DEC
Было. PDP-11/83 - QBus, PDP-11/84 - с адаптером KTJ-11B для выхода на Unibus
не только 83 и 84, а еще и 23 и 24, 93 и 94.
KTJ-11B только преобразователь Qbus-Unibus или еще и преобразователь адресов ? Какой у него номер M... ?(что бы проще искать описание)
Как этот вопрос решался в 24й и 94й машинах ?
Возникает вопрос - будет ли работать по прямому доступу 1201.03 и 1201.04 с КН1,2 и RQDX 1,2,3 в 18-ти и 22-х разрядных режимах ?
PDP-11/84 - с адаптером KTJ-11B для выхода на UnibusА еще я где-то читал (вроде-бы, в Electronics'е) про адаптер QUnibus, это не то же самое?
PDP-11/84 - с адаптером KTJ-11B для выхода на Unibus
а преобразователь адресов для Q-bus ? У DEC, ведь - тоже были платы Qbus 18-ти разрядные. Как они думали их использовать с 22 разрядами ? Или не планировали использовать ?
- - - Добавлено - - -
адаптер QUnibus
вопрос не про преобразование интерфейса, а про преобразование адресов.
KTJ-11B только преобразователь Qbus-Unibus или еще и преобразователь адресов ? Какой у него номер M... ?(что бы проще искать описание)
Как этот вопрос решался в 24й и 94й машинах ?
Ищущий да обрящет ;)
будет ли работать по прямому доступу 1201.03 и 1201.04 с
Есть некоторый шанс, что я буду клепать преобразователь QBUS - UNIBUS вместе с UMAP регистрами под 1201.03 - 04
- - - Добавлено - - -
RQDX 1,2,3
А чёб им не работать - qbus ные адаптеры. По крайне мере про RQDX1 и RQDX3 в доках есть про 22 бита, на RQDX2 доку не нашёл.
>А чёб им не работать - qbus ные адаптеры. По крайне мере про RQDX1 и RQDX3 в доках есть про 22 бита, на RQDX2 доку не нашёл.
Насколько я знаю одно из основных отличий RQDX1/2 (так же как и КН1/2) - возможность работать в 32-битных системах.
То есть RQDX1(КН1, СМ1425.5140) в микровакс II не заработает, а RQDX2 (кн2, .5144)- легко и непринужденно.
возможность работать в 32-битных системах
Ну речь какбы и не про vax идет, вроде как на 03 и 04 ваксой не пахнет ;)
Есть ли у кого описание на КР1801ВП1-054 Адаптер магистралей Q-BUS и UniBus
или надо реверсить???
По крайне мере про RQDX1 и RQDX3 в доках есть про 22 бита
а в 18-ти разрядном режиме ?
Да и сомнения по поводу их работы не с DECовскими или Воронежскими платами в 22-х разрядном режиме, а с их работой с ними в 18-ти разрядном , и с Зеленоградскими в 18-ти и 22-х разрядных режимах. А с 18-ти разрядным Unibus_ом и его работой в 22-х разрядных система - вроде, разобрались. Не будем отвлекаться на Unibus, а разберемся с 18-ю и 22-мя разрядами в Qbus.
а разберемся с 18-ю и 22-мя разрядами в Qbus
И в чём же там принципиально отличие, а?
Цитата: "that uses a 16-, 18-, or 22-bit LSI-II bus."
Цитата: "Q-Bus blockmode DMA data transfers in 16-, 18-, or 22-bit addressing modes"
Но вместо того, что бы включить логику или на худой конец заглянуть в доки, продолжайте высасывать из пальцев догадки
Разбирайтесь дальше
- - - Добавлено - - -
или надо реверсить???
Его сделать надо. И не парится на позавчерашний день. Но ща набежит кучу советчиков про то, как надо правильно делать. И останетесь вы, как обычно, ни с чем.
- - - Добавлено - - -
Хотя можно и просто купить...
- - - Добавлено - - -
Хотя не, покупать не стоит - што то сомневаюсь, что там есть umap регистры..
одна надежда - придет Форм или, может, Колдун и все разъяснит.
это были цитаты из доков RQDX1 и RQDX3, если чё.
придет Форм или, может, Колдун
флаг в руки
одна надежда - придет Форм или, может, Колдун и все разъяснит.
Ога, всё бросят и напишут Nx10-страничный мануал. Персонально для Вас ;-)
Нашёл описание -054. Во-первых, работает в паре с -034, во-вторых, как я и ожидал UMAP там и не пахнет
Когда-то была у нас тема «Отечественные компьютеры: быстродействие» (https://zx-pk.ru/threads/25778-otechestvennye-kompyutery-bystrodejstvie.html), где сравнивались показатели по тестам Бейсика. Так вот, в итоговой таблице (https://docs.google.com/spreadsheets/d/1g-p_yYqrqbPtUJRAFRY3VcrXPQy0l8oCTPPm6wDvAis/edit?usp=sharing) есть немало советских компов на архитектуре PDP-11 и один из вариантов PDP – с номером 11/83. Если взять показатели одинаковой версии Бейсика (Basic-11/RT-11), то очень даже можно сравнить вполне реальную производительность наших и зарубежных ЭВМ с дековской архитектурой. Кстати, хороший показатель в таблице – тест ВМ3, он мало зависит от особенностей реализации арифметики в процессоре и не зависит от особеностей цикла FOR в конкретной версии Бейсика. А вот ВМ8 (но лучше ВМ8М) дает представление о скорости вычислений математических функций.
Интересные таблицы производительности на Фортране, Си и Бейсике были также, например, в журнале МПСС №4/1989. Большое сравнениние скорости разных компьютеров и процессоров на тесте «Решето Эратосфена» было в журнале Byte за январь 1983 г, правда и там тоже перемешаны разные языки от ассемблера до Бейсика и разные модификации железа.
А вот таблицы с показателями MIPS из Википедии, к сожалению, совершенно абсурдны и не подходят для сравнения старых компьютеров – по ним действительно VAX-11/780 всего в 2-3 раза быстрее простейших 8-битных процессоров или, например, 8086 на частоте 5 МГц медленее 6502 на 1 МГц и медленнее 8080 на 3 МГц.
сравнивались показатели по тестам Бейсика
В названии топика написано, что измеряется именно скорость копирования массива в ОЗУ, а не трезвость авторов реализаций языков высокого уровня.
Языки - они для научных и руководящих работников ( в сфере применения DEC-16 бит например ), а время выполнения одной отдельно взятой инструкции - это как раз для разработчиков ЭВМ интересно.
в итоговой таблице
очень не удобно смотреть эти таблицы - как бы сделать их читабельными и здесь выложить
- - - Добавлено - - -
время выполнения одной отдельно взятой инструкции - это как раз для разработчиков ЭВМ интересно.
интересно и это. Но данные такие данные почти по всем PDP-11_совместимым процессорам нашлись. А по машинам в целом при выполнении типичных программ - тоже очень интересно. Про Dhrystones расскажите, пожалуйста.
LeoN65816
10.04.2019, 18:16
Уравнял по частоте свой АГАТик со спектрумом и MSX (видео здесь (https://yadi.sk/d/iJmte9GMAMz9iA)). Результаты скорости копирования ОЗУ обновил в #2 (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002428&viewfull=1#post1002428).
чисто теоретические прикидки на счет к1816ве39, генератор Z (входы для кварца - CR1 CR2) способен работать на 11mhz, при этом внутренний CLK = Z/3; далее 1 машинный цикл 5 тактов CLK, т.е. 11/(3*5); загрузка в аккумулятор из внешней памяти 2 машинных цикла, значит 11/(3*5*2); ну и для переброски надо еще и выгрузить из аккумулятора в память что тоже 2 цикла, т.е. 11/(3*5*2*2) = 183333 байта/сек...
LeoN65816
04.05.2020, 23:04
Ещё разогнал АГАТик: теперь уже 5 Махов. Результаты скорости копирования ОЗУ обновил в #2 (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002428&viewfull=1#post1002428).
Жалко мало данных, даже по Z80 нет. :( Хотя это несложно посчитать, если взять Amstrad CPC/PCW, то там на LDIR/LDDR нужно 24 такта. При эффективной частоте 3.2 МГц получаем 133.33 Kбайт/сек. У Спека при работе с быстрой памятью на LDIR/LDDR - 21 такт при эффективной частоте 3.5 МГц, итого - 166.67 Kбайт/сек. Если развернуть цикл и использовать LDI/LDR, то будет 16 тактов на байт на обоих системах. Для супербыстрого заполнения можно использовать PUSH - 11 тактов на словo на Спеке - 636.36 Kбайт/сек.
ПЭВМ: АГАТ-9 (https://zx-pk.ru/threads/29686-obshchie-voprosy-po-uknts.html?p=993345&viewfull=1#post993345), ЦП: 6502/65802, частота: стандарт 1.021МГц, турбо 3.5 Маха и 5 Махов, операция: копирование блока памяти и заполнение блока памяти константой.
72499
Немного запутывающая таблица. На 6502 можно копировать байт за примерно 14 тактов, если использовать самомодифицирующийся код. И на 6502 использовать стек для копирования/заполнения ну никак нельзя (хотя на некоторых системах с ММУ используют), адрес стека там фиксированный и его размер 256 байт. Поэтому соответствующиу данные ни о чем. Для 65816 можно копировать самомодифицирующим кодом слово в первом банке за 16 тактов, для произвольных банков 18. И использование стека на 65816, хотя и не так сильно урезано, как на 6502, но урезано - там стек всегда в первом банке.
Посчитал результаты для Корвета (8080, 2.5 МГц). Быстрейшее копирование блока почти наверняка можно сделать кодом
ld hl,FROM
ld de,TO
ld bc,COUNT
loop ld a,(hl)
ld (de),a
inc hl
inc de
dec c
jp nz,loop
dec b
jp nz,loop
Получаем 39 тактов на байт, 2.5*10^6/39 ≈ 64.11 KБ/сек. Если цикл развернуть, то будет 24 тактa на байт, ≈ 104.17 KБ/сек. Тайминги брал с https://litwr2.github.io/8080-8085-z80-8088-6502/8080-Z80-8088.html
Интересно ещё по размеру коды сравнивать, для Z80 код самый короткий - 11 байт, для PDP-11 - 16 байт, для 8080 - 21 байта, для 6502 - от 38 байт.
8080
pop d
mov m,e
inx h
mov m,d
inx h
17 тактов/байт
- - - Добавлено - - -
Если в спековском стиле
lxi sp,откуда
pop b
pop d
pop h
lxi sp,куда
push h
push d
push b
то 13.8(3) такта/байт
- - - Добавлено - - -
еще вариант
pop h
shld
13 тактов/байт
Что касается PDP-11 ;)
Ну если данные подготовить для копирования, считать...
Три регистра надо:
адрес в первый откуда
адрес во второй куда
в третий сколько
далее всего две команды, пересылка MOV с автоинкрементом или автодекрементом (ну как хочется лучше)
и затем следующий SOB
Сама пересылка две команды или слова, или 4 байта :)
если учесть инициализацию, считая по тупому пересылку память -регистр, тогда 16 байт будет...
Но если исходные данные разместить по адресу четвёртого регистра, и считывать их инкрементом или декрементом то памяти будет менее, так как команды будут короче :) Но вырастет объём данных ;)
Так что... се ля ви... :)
пересылка MOV с автоинкрементом или автодекрементом (ну как хочется лучше)
Если у тебя блоки памяти перекрываются - то как хочется - не получится.
если учесть инициализацию, считая по тупому пересылку память -регистр, тогда 16 байт будет...
Если учесть вышесказанное - больше
затем следующий SOB
На котором можно легко слететь, если конкретный проц его не поддерживает
8080
pop d
mov m,e
inx h
mov m,d
inx h
17 тактов/байт
- - - Добавлено - - -
Если в спековском стиле
lxi sp,откуда
pop b
pop d
pop h
lxi sp,куда
push h
push d
push b
то 13.8(3) такта/байт
- - - Добавлено - - -
еще вариант
pop h
shld
13 тактов/байт
Такими кодами всех пидипишников напугать можно сильно. :) Только хорошо бы добавить, что нужно отключать прерывания и сохранять/восстанавливать SP, что второй код не загнать в цикл, что третий код потребует гораздо дольшей подготовки, чем само копирование. Ну и вообще странно, когда на копируемый байт нужно от 2 байт копирующего кода. :) Надо было мне написать "Быстрейшее НОРМАЛЬНОЕ копирование блока почти наверняка можно сделать кодом". ;)
Для 6502 аналогом 3-о кода будет
LDA
STA
8 тактов на байт и прерывания запрещать не надо. Команды копирования долгие и поэтому должны обеспечивать прерывания, что и сделано в Z80, 8086, 65816, ... - это кстати потребовало дополнительных усилий от разработчиков.
Только хорошо бы добавить, что нужно отключать прерывания
Не обязательно (метод Медноногова).
третий код потребует гораздо дольшей подготовки, чем само копирование.
Если подготовка один раз, а копирование постоянно, то нет проблем. Такой вариант и я сам использовал и видел в программах.
Быстрейшее НОРМАЛЬНОЕ копирование блока
Поэтому начинать надо с четких условий.
Не обязательно (метод Медноногова).
Если подготовка один раз, а копирование постоянно, то нет проблем. Такой вариант и я сам использовал и видел в программах.
Не знаю этого метода, просто он не гуглится. Но ничего кроме синхронизации с прерываниями предложить тут маловероятно. Буду вам признателен, если укажите альтернативу.
И такая синхронизация как и эти предложенные вами методы копирования годятся только для крутых демокодеров, ни для прикладных программ, ни даже игр это не подходит. В разделе ПДП как-то почти моветон. :)
Не знаю этого метода, просто он не гуглится.
Например тут (https://pmg.org.ru/gamedev/epic1.htm) (17 Nov 96). Квалифицированные спектрумовские программисты знают про это со второй половины 90х. Ладно спектрумисты, в векторовском разделе в последние годы обсуждали несколько раз подробно с примерами кода.
годятся только для крутых демокодеров, ни для прикладных программ, ни даже игр это не подходит.
Не говорю про спектрум, но даже в нескольких свежих игрушках для вектора используется. И это не единственный вариант. Если хочется использовать не одну регистровую пару, а несколько, то можно использовать "контрольные суммы" (проверку на четность) и по ним восстанавливать в прерывании испорченные байты (наверно можно назвать "метод jerri", он раскопал в игрушке из 80х). Но это уже более специализированный вариант для спрайтов в игрушках, а метод Медноногова сравнительно универсальный, им можно любые данные копировать.
И отдельно надо упомянуть, что есть много популярных и распространенных (в свое время) компьютеров с 8080 без прерываний, там совсем нет проблем со стековыми операциями, можно ничего не выдумывать.
Вы же явно не интересуетесь глубоко и не занимаетесь всерьез программированием для z80 и 8080, может не стоит писать про них.
может не стоит писать про них.
:v2_clapp::v2_clapp:
Lethargeek
21.05.2023, 08:20
если взять Amstrad CPC/PCW, то там на LDIR/LDDR нужно 24 такта. При эффективной частоте 3.2 МГц получаем 133.33 Kбайт/сек
а в цпц разве тормоза от видюхи не включены уже в подгонку к 4 тактам
У Amstrad CPC скорость LDIR/LDDR 166666.(6) байт/секунду, LDI/LDD 200000 байт/секунду.
Lethargeek
21.05.2023, 09:47
У Amstrad CPC скорость LDIR/LDDR 166666.(6) байт/секунду, LDI/LDD 200000 байт/секунду.
что-то не сходится, как минимум одна из цифр неверна
Что-то забыли про х86. Там тоже можно всякие трюки использовать, но для нормального копирования используют REP MOVSW на 20 тактов на слово, при частоте 4.77 МГц у первых IBM PC и их многочисленных клонов, получаем 4.77*10^6/20*2 = 477 КБ/с. Это пошустрее ДВК. Трюки, предполагаю, могут процентов 30 добавить.
Для 68000 самое быстрое копирование - это MOVEM, но это скорее трюк. Нормальное копирование почти такое же как и на PDP-11:
MOVE.L (A1)+,(A2)+
DBRA
Это 7.5 тактов на байт. На Амиге с 7 МГц получаем 7*10^6/30*4 ≈ 933.3КБ/с, на реальном железе будет немного поменьше. С MOVEM можно получить чуть больше 4 тактов на байт и не иметь проблем с прерываниями, у 68к для прерываний стек, на зависть пидипишникам, отдельный. Для копирования можно задействовать все 16 регистров.
Например тут (https://pmg.org.ru/gamedev/epic1.htm) (17 Nov 96). Квалифицированные спектрумовские программисты знают про это со второй половины 90х. Ладно спектрумисты, в векторовском разделе в последние годы обсуждали несколько раз подробно с примерами кода.
Не говорю про спектрум, но даже в нескольких свежих игрушках для вектора используется. И это не единственный вариант. Если хочется использовать не одну регистровую пару, а несколько, то можно использовать "контрольные суммы" (проверку на четность) и по ним восстанавливать в прерывании испорченные байты (наверно можно назвать "метод jerri", он раскопал в игрушке из 80х). Но это уже более специализированный вариант для спрайтов в игрушках, а метод Медноногова сравнительно универсальный, им можно любые данные копировать.
И отдельно надо упомянуть, что есть много популярных и распространенных (в свое время) компьютеров с 8080 без прерываний, там совсем нет проблем со стековыми операциями, можно ничего не выдумывать.
Вы же явно не интересуетесь глубоко и не занимаетесь всерьез программированием для z80 и 8080, может не стоит писать про них.
Почему же оффтоп? Вы как раз о том как побыстрее всё скопировать. Это ТС и задекларировал в начале.
Специальный обработчик прерываний для обеспечения чуть более быстрого копирования - круто! И всё это скорее просто из желания выжать из примитивной техники всё возможное, чем для реального эффекта. На Z80 при всех этих трюках ускоряем по сравнению с LDI лишь на 15% и это размазывется ещё по общей логике управления спрайтами. В итоге сомнительно, что и 5% прибавки к скорости получится в итоге. Хотя героям слава! Интересные коды.
У нас вроде дискуссия и по Спектруму или Вектору ничего вроде кроме суперочевидных вещей в своих статьях не писал. В чем претензия?
а в цпц разве тормоза от видюхи не включены уже в подгонку к 4 тактам
Всё просто, из пяти циклов один на видео, а остальные процессору. Предполагаю, что это в Вектор скопировали. Если это не так, то надеюсь, что ivagor поправит.
У Amstrad CPC скорость LDIR/LDDR 166666.(6) байт/секунду, LDI/LDD 200000 байт/секунду.
Путает что-то ivagor, чувствуется, что мало знаком он с Амстрадом. А мне вот амстрадить приходилось ещё в 1988. :) Хотя по LDI/LDD у него правильно.
из пяти циклов один на видео, а остальные процессору
У Amstrad CPC циклы по 4 такта. За это время два доступа видеоконтроллера к озу (в страничном режиме) и возможен один доступ процессора.
У Amstrad CPC циклы по 4 такта. За это время два доступа видеоконтроллера к озу (в страничном режиме) и возможен один доступ процессора.
Проверил на эмуляторе, Вы - правы. Теряю форму. :( 166.67 КБ для LDIR подтверждаю.
- - - Добавлено - - -
Быть абсолютно точным сложно. На Амстраде LDIR использует 24 такта во всех циклах кроме последнего, в котором используются только 20 тактов. Поэтому при копировании 1024 байт скорость будет ≈ 166531 байт/сек.
Ну да, есть такие... не поддерживающие SOB, но ведь их мало ...
У кого есть такая машинка? ;)
Разве что старые PDP-11, но их очень мало осталось :(
Из наших, без SOB, возможно, "Электроника-60", что без М, но я такую всего один раз в своей жизни видел.
Даже 1801ВМ1 уже с SOB.
И вообще, если вместо SOB воткнуть две команды... (Есть даже макрос на замену SOB в системной макробиблиотеке)
Код получится на одно слово более, но на некоторых процессорах он будет выполняться быстрее :)
По поводу границы памяти - это уж от программиста зависит... :)
Ежели граница, то будет прерывание, ну окромя T11.
Хотя можно посчитать и установку вектора да обработчик прерывания, плюс выход в операционку :)
По поводу границы памяти - это уж от программиста зависит...
Ежели граница, то будет прерывание, ну окромя T11.
Я не границы имел ввиду.
"Если у тебя блоки памяти перекрываются - то как хочется - не получится."
Пример. Блок памяти с адреса 1000 длиной 2000 надо скопировать в блок с адреса 2000 (той же длины)
- - - Добавлено - - -
не поддерживающие SOB, но ведь их мало
Но они есть
PDP-11/04 (наш М2), PDP-11/(05-10), PDP-11/(15-20)
Lethargeek
22.05.2023, 11:36
или всё таки чисел?
это следствие :p
- - - Добавлено - - -
Проверил на эмуляторе, Вы - правы. Теряю форму. 166.67 КБ для LDIR подтверждаю.
тогда для ldi должно получаться 250 000 б/с
- - - Добавлено - - -
или нет - если 4,4,3,5 растягивается до 4,4,4,8
но тогда для ldir дб 4,4,3,5,5 ---> 4,4,4,8,8 = 28 !!
это следствие
по которому там обе цифры неправильные
- - - Добавлено - - -
тогда для ldi должно получаться 250 000 б/с
А это вообще тогда враньё
Я не границы имел ввиду.
"Если у тебя блоки памяти перекрываются - то как хочется - не получится."
Пример. Блок памяти с адреса 1000 длиной 2000 надо скопировать в блок с адреса 2000 (той же длины)
- - - Добавлено - - -
Но они есть
PDP-11/04 (наш М2), PDP-11/(05-10), PDP-11/(15-20)
для описанной задачи просто копировать со старших адресов, декриментом :)
То, что затрётся - уже будет скопировано ...
М2 - это подразумевается "Электроника-60М" ? Там SOB в наличии.
И М2 тогда LSI...
Вот М1 - "Электроника-60", там может быть... Но не ведаю точно.
Ещё были машины серии М в том числе и системой команд PDP-11, но я живьём их не видел, информация из книг.
У нас на кафедре управляющий прибором компьютер был чешским аналогом М-6000. У нас эта серия носила ещё имя СМ-2. Какой-то HP, не PDP...
для описанной задачи просто копировать со старших адресов, декриментом
Это понятно. Я про то, что обобщённый алгоритм копирования должен учитывать и такой сценарий, так что надо делать не как
пересылка MOV с автоинкрементом или автодекрементом (ну как хочется лучше)
а как правильно
Вот М1 - "Электроника-60"
Пардон, я там ошибся. LSI (и наши М1 М2) - это PDP-11/03, где есть SOB, ну, при наличии микросхемы EIS. Но в целом, это их серии PDP-11, где SOB может быть, а может и не быть - у меня пока не везде есть пометки в описании моделей для PDP-11X
Правильно так, как удобно ;)
Как мыслит программист... Потом надо учитывать особенности комплектации.
Может быть кэш, предвыборка и прочие тонкости комплектации машины ...
Делать надо так, как ты видишь, но вот видение, зараза, со временем может меняться :)
Правильно так, как удобно
Нет
Одно дело для себя быстро проверить - что-то...
Другое дело, когда ты для кого-то, это сложнее.
Всё меняется. Если есть чётко поставленная задача, неплохо, когда есть алгоритм - супер!!!
Но самое творческое и сложное, когда задачу и алгоритм делаешь сам :)
- - - Добавлено - - -
Чем профи от любителя отличается?
Любитель может сделать лучше профи...
Но профи всегда сделает - быстрее любителя ;)
- - - Добавлено - - -
И у каждого ведь свои критерии правильности.
или нет - если 4,4,3,5 растягивается до 4,4,4,8
но тогда для ldir дб 4,4,3,5,5 ---> 4,4,4,8,8 = 28 !!
Это несколько не так считается (надо учитывать, в каких циклах есть обращение к памяти и в каких нет). Еще проще загуглить готовые растактовки для amstrad cpc.
BlaireCas
22.05.2023, 17:18
Я не очень понял, а что в итоге получилось?
mov (r0)+,(r1)+
sob r3, .-2
оказалось медленнее?
Кто победил?
Ни кто :)
Я просто показал, что счёт объёма команд для выполнения операции по копированию не совсем корректный, ну во всяком случае для PDP-11...
Для остальных случаев, я недостаточно компетентен.
или нет - если 4,4,3,5 растягивается до 4,4,4,8
но тогда для ldir дб 4,4,3,5,5 ---> 4,4,4,8,8 = 28 !!
Признаюсь, был уверен, что на Амстраде LDI - 16 тактов, а LDIR - 24. Но благодаря помощи уважаемого ivagor'a выяснилось, что LDI на Амстраде 20 тактов и что Амстрад работает с тактами сложнее, чем я предполагал.
Рекомендую для справки
https://map.grauw.nl/articles/fast_loops.php
http://logonsystem.fr/down/ACCC1.5-EN.pdf
- - - Добавлено - - -
Кстати, забыли про самый крутой компик 80-х, Архимед. Там на пересылку двойного слова нужно чуть больше 2 тактов, итого при штатной частоте 8 МГц получаем почти 16 лимонов байт в секунду! Если бы в СССР не просто следовали указаниям из Вашингтонского обкома, а ещё и немного думали, то во рту росли бы грибы. :)
Чего хотеть - Архимед на ядре ARM , первый компьютер более-менее массовый...
Но вот зараза, за рубежом он остался экзотикой.
Так что не только СССР проморгал его...
Вопрос только в том, на сколько память поспевала за процессором?
Для того, чтобы ответить - надо поизучать сей вопрос, какая память, был ли кэш???(может и была такая скорость, но в пределах кэша???)
Ещё пересылками память-память в некоторых моделях компьютеров могли заниматься и другие шинные устройства, как то контроллеры ПДП или видеоадаптеры...
на сколько память поспевала за процессором?
Чтобы максимально использовать возможности dram там страничный доступ.
Это FPM RAM... Но могла стоять как более старая память, так и экзотика какая ...
Вики молчит касательно типа памяти на Архимеде
Зачем вики, если доступен даташит MEMC. В первых архимедах с ARM2 8 МГц два варианта циклов dram: N-cycle (одиночный или первый в пакете) 250 нс и S-cycle (страничный) 125 нс. Когда у ARM подросли частоты, там уже кеш.
Lethargeek
23.05.2023, 21:02
Это несколько не так считается (надо учитывать, в каких циклах есть обращение к памяти и в каких нет). Еще проще загуглить готовые растактовки для amstrad cpc.
тогда если не как бы дополнять, а выравнивать начало нового цикла, то действительно выходит 20 и 24
- - - Добавлено - - -
Зачем вики, если доступен даташит MEMC. В первых архимедах с ARM2 8 МГц два варианта циклов dram: N-cycle (одиночный или первый в пакете) 250 нс и S-cycle (страничный) 125 нс.
в оригинале вроде каждый четвёртый адрес вызывал цикл типа N даже при последовательном доступе
но скорость в среднем падала не настолько, так как и рандомный доступ мог попасть как раз на этот же адрес
Когда у ARM подросли частоты, там уже кеш.
инетересно, что при промахе вместо ожидания проц временно переходил на клок dram
- - - Добавлено - - -
(по крайней мере, на тогдашних древних машинах)
Чего я понять никак не могу... А почему ЭТО в разделе ДВК, УКНЦ ?
Какие-то армы, архимеды...
Lethargeek
23.05.2023, 22:11
А почему ЭТО в разделе ДВК, УКНЦ ?
ну видимо потому что
Прошу принять участие владельцев всех типов ЭВМ, особенно на Z80 - 3.5 мгц, 580ВМ80-2.5 мгц и некотрых др.
в оригинале вроде каждый четвёртый адрес вызывал цикл типа N даже при последовательном доступе
Это да, при доступе к dram по границам 16 байт (или 4 байт, если смотреть на одну 8-битную линейку озу) всегда N. DMA (видео, звук) всегда выровнены и N+S+S+S, а в доступ проца число S максимум 3.
Чего я понять никак не могу... А почему ЭТО в разделе ДВК, УКНЦ ?
Какие-то армы, архимеды...
Ну а куда людям податься?
Я вот ни одного русскоязычного форума по Архимедам не знаю :(
Те ARM - которые сейчас - это сильно другие ARM(хоть и развитие), и память к ним подключается совсем другая, другие скорости, другая периферия...
И с другой стороны организация памяти и скорость доступа представляют определённый интерес любителям PDP-11(для меня, например), так как тут можно идеи почерпнуть и для PDP-11 :)
вместо SOB воткнуть две команды
пожалуйста поясните (а лучше покажите на примере)
а лучше покажите на примере
SOB R0,LABEL === DEC R0 BNE LABEL
декримент регистра и условный переход на метку, например по не нулю (в системной макробиблиотеке RT-11 есть даже такая макрокоманда, кою используют, если процессор не поддерживает SOB), как ноль - так завершение цикла.
Так же возможны варианты инкримента отрицательного значения в регистре... Можно условие в условном переходе поменять условие как хочется, когда значение положительно, когда станет отрицательно...
И вообще команда условного перехода может быть выставлена по любой комбинации флагов слова состояния процессора. И ещё, используя эту особенность народ делал самомодифицирующийся код, так процессоры без диспетчера памяти вполне позволяли такие проделки :) А уж поддержка I/D пространств - экзотика большая. Только "Электроника-79" и компьютеры на базе 1831(J-11)
- - - Добавлено - - -
MOV #1000,R1 ; ОТКУДА
MOV #2000,R2 ; КУДА
MOV #100,R0 ; СКОЛЬКО (100 ВОСМЕРИЧНОЕ СЛОВ)
LABEL: MOV (R1)+,(R2)+ ; КОПИРУЕМ
SOB R0,LABEL ; ПОКА НЕ ОБНУЛЁН RO УХОДИМ НА LABEL:
Без SOB на одно слово более кода:
MOV (PC)+,R1 ; ТО ЖЕ САМОЕ, ЧТО В ПРОШЛЫЙ РАЗ, ПРОСТО ДРУГАЯ ФОРМА ЗАПИСИ,
L: .WORD 1000 ;НАПРИМЕР, СЮДА МОЖНО МЕТКУ ПОСТАВИТЬ
MOV (PC)+,R2
.WORD 2000
MOV (PC)+,R0
.WORD 100
LABEL: MOV (R1)+,(R2)+
DEC R0 ; КАК ТОЛЬКО ОБНУЛИТСЯ R0, УСТАНОВИТСЯ ФЛАГ Z
BNE LABEL ; ПОКА НЕ ВЗВЕДЁН ФЛАГ Z ВОЗВРАТ НА LABEL:
Lethargeek
24.05.2023, 20:09
Пробелы ушли
Но в окне редактирования вернулись назад...
надо ставить теги code
И вообще команда условного перехода может быть выставлена по любой комбинации флагов слова состояния процессора.
Ну это ты загнул. Одной командой для некоторых сценариев не обойтись. Ну-ка, для примера, под вариант C=1 и N=1 - какая у нас команду условного перехода? ;)
Вот все варианты:
or (isOpBNE and (not basePSW.Even.OpStatus.Z))
or (isOpBEQ and basePSW.Even.OpStatus.Z)
or (isOpBGE and (basePSW.Even.OpStatus.N = basePSW.Even.OpStatus.V))
or (isOpBLT and (basePSW.Even.OpStatus.N /= basePSW.Even.OpStatus.V))
or (isOpBGT and ((not basePSW.Even.OpStatus.Z) and (basePSW.Even.OpStatus.N = basePSW.Even.OpStatus.V)))
or (isOpBLE and ( basePSW.Even.OpStatus.Z or (basePSW.Even.OpStatus.N /= basePSW.Even.OpStatus.V)))
or (isOpBPL and (not basePSW.Even.OpStatus.N))
or (isOpBMI and basePSW.Even.OpStatus.N)
or (isOpBHI and (not basePSW.Even.OpStatus.Z) and (not basePSW.Even.OpStatus.C))
or (isOpBLOS and ( basePSW.Even.OpStatus.Z or basePSW.Even.OpStatus.C))
or (isOpBVC and (not basePSW.Even.OpStatus.V))
or (isOpBVS and basePSW.Even.OpStatus.V)
or (isOpBHIS and (not basePSW.Even.OpStatus.C))
or (isOpBLO and basePSW.Even.OpStatus.C) then
- - - Добавлено - - -
А уж поддержка I/D пространств - экзотика большая. Только "Электроника-79" и компьютеры на базе 1831(J-11)
Среди наших процов - да, среди DEC - ещё 44 и 45-50-55 (это, по сути, один и тот же проц)
Там в команде условного перехода просто битовая маска, коя сравнивается с флагами процессора ...
Совпало поехали в одну сторону, не совпало - в другую :) Только совпадение хитрое...
Это я в какой-то книжке вычитал по PDP-11 :)
Там написано было, что команд на условный переход более по факту, чем мнемоник в асемблере ... Но используют сильно менее, так как не надо ...
Учитывая, что у PDP-11 флаги взводятся почти после каждой команды, появляются как свои плюсы, так и минусы .
Там в команде условного перехода просто битовая маска, коя сравнивается с флагами процессора ...
Ну и - какая команда перехода для C=1 и N=1 ?
Не ведаю точно , надо смотреть коды операций и разбираться. Если очень надо - можно вычислить и написать директивой .WORD
Потом сделать макрос...
Но по факту, редко кто на такое идёт ...
- - - Добавлено - - -
Там биты и логика операции...
И ещё, надо учесть , что некоторые процессоры могут отрабатывать такие команды по 10 вектору...
Так как команды не задокументированы(Это уже моё личное мнение)
Не ведаю точно , надо смотреть коды операций и разбираться.
Я их тебе все расписал :)
И - ты путаешь команды условного перехода и команды Cxx/Sxx вот там действительно битовая маска - какие флаги сбросить или установаить ;)
вижу тут много спецов по PDP-11 собралось, поэтому напишу не в тему : не знаю как кому, а мне неинтересен сам тест скорости копирования памяти, т.к. сама скорость памяти вещь не конкретная при одинаковых процессорах PDP-11. Да и применений компьютеров много разных и далеко не всегда это так важно. Тем более еще менее интересна скорость вычисления пи. А вот по-быстрому определить быстродействие процессора и сравнить его с другими - хочется.
При этом часто - нет возможности запустить тест в операционной системе и задействовать прерывания от таймера. Вот и хочется иметь тестик, который можно быстро набить в пульте и засекая секундомером за сколько секунд он выполняется определять быстродействие. Тест для удобства должен иметь минимум команд, выполняться достаточно долго - удобно и более-менее точно - секунд 10...20 на процессорах средней производительности. Что касается конкретной команды которой циклически тестировать, то что бы не задумываться о статистике наиболее часто используемых, да еще и в разных сферах применения - взять самую короткую по времени исполнения и что бы она имелась для всех процессоров - наверное это пересылка регистр - регистр (или сумма - забыл какая из них быстрее выполняется). Чтобы как-то минимизировать влияние скорости работы памяти нужно как-то попробовать свести к минимому обращение к памяти по-возможности. Думаю что это будет 177777 циклов по 177777 циклов (или один из циклов по-короче - надо пробовать практически по комфортному для засекания времени исполнения). Кажется, что задача тривиальна, но если сильно стараться и применить всякие "трюки", то, может будет кому-то интересна. А мне пойдет любой вариант (но хотелось бы - лучший).
Там, как я понял, команды подстроены под логику в процессоре первых PDP-11(или наоборот, логика под команды???)...
С командами Cxx/Sxx всё просто. Там тупо флаги в теле команды. А с командами переходов условных, там хитрее... Там есть ещё функции взаимодействия по условиям с флагами. И в той книге была таблица этих недокументированных команд.
Но читал я эту книгу давно, библиотечная, что помню - издательство "Мир", год издания и автора не помню. Название что-то вроде: "Введение в архитектуру миниЭВМ PDP-11"" А вот про команды запомнил :)
Точнее я там много чего запомнил. Там многие вещи на пальцах объяснялись. И мне многое стало понятнее по прочтении :)
Я так понимаю, что книга для американских студиосов написана.
- - - Добавлено - - -
У достопочтимого
Hunta, были версии программы по измерению быстродействия, в том числе и для CIS на F11(1811). Чего более ни у кого нет :)
С ним можно договориться :) Главное, чтобы ему это интересно было. Если интересно будет, то он горы свернёт.
А с командами переходов условных, там хитрее...
Я расписал все условия - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1179145&viewfull=1#post1179145
Там есть ещё функции взаимодействия по условиям с флагами. И в той книге была таблица этих недокументированных команд.
Вот ОЧЕНЬ сильно сомневаюсь, что хоть на какой-то модели это есть. Могу только предположить, что, ВОЗМОЖНО, в книге рассматривалось МИКРОПРОГРАММИРОВАНИЕ (та же LSI-11 М1/М2 или, скажем, PDP-11/60 это позволяет) и показывалось - КАК это можно сделать. Но что бы это где-то существовало.. Ссылку в студию.
были версии программы по измерению быстродействия
Чего это были - они и сейчас есть :) Больше того, программа написана так, что можно легко добавлять нужные команды или блоки команд - то есть измерение возможно не только для отдельных команд, но и блоков. Причем - как с учётом кода инициализации, так и без оного :)
- - - Добавлено - - -
они
Точнее говоря - программа одна, но есть подварианты, скажем - только BR . и MOV R0,R1 (если мне не изменяет память насчёт второй)
Ну и есть подвариант под J-11 с кэшем - сделано так, что бы уместиться в кэш
Но основной исходник один.
Правда, я его слегка сломал, пытаясь сделать под Э85 и руки никак не доходят починить :)
Исходник не могу :(
Дело очень давнее, я тогда студентом ещё был...
В ней я в первый раз прочитал, что на разных моделях в режимах -(R...) и (R...)+ инкремент и декремент на разных моделях обрабатываются в разные моменты выполнения команды, в итоге результат двуадресной команды типа
MOV -(R0),-(R0) на разных моделях мог быть сильно разным ... Хотя DEC и прописала, что и как работать должно, но вот сама же и нарушала свой стандарт :(
К счастью сее было несмертельно... :)
Про микропрограммы там не упоминалось :(
Про изменение микропрограммы процессора, я вычитал уже в книжке про VAX. Там в качестве примера упоминалась микропрограмма вычисления какого-то хитрого полинома. Один операнд указатель на массив памяти, второй операнд на результат. Но ни текста, ни как её замикропрограммировать не объяснялось :(
Хотя было бы прикольно сравнить скорость исполнения программы с скоростью микропрограммы :)
Про то, что так можно на некоторых моделях PDP-11 узнал сильно позже :(
Но по факту с изменением микропрограммы процессора никогда не сталкивался.
В теории вроде понятно, что LSI-11 М1/М2, и процессоры на секционных комплектах(например 1804) читал в однотомнике про микропроцессорные комплекты, потом вышел уже в двух томах, чуть более мутно представляю F11, так там не просто ROM, там ROM+PGA в одном флаконе...
Исходник не могу
В общем, пока КРАЙНЕ сомнительно.
на разных моделях в режимах -(R...) и (R...)+ инкремент и декремент на разных моделях обрабатываются в разные моменты выполнения команды
Это известно, учитывается и в PDP-2011 и, естествнно, в PDP-11X. Единственное но - проверяется это тестами и если какой-то тест для какой-то модели особенность поведения не проверяет и/или не учитвает.. PDP-11X может и ошибаться - по таблицам, где описаны отличия моделй процов я не всё проверял.
За что купил, за то и продаю :)
По поводу особенностей - DEC сама нарушила принцип ортогональности :(
то есть регистры ведут себя сильно по разному :(
С одной стороны MOV (PC)+, (PC)+ здесь всегда всё хорошо, иначе большая часть программ работать не будет
с другой MOV (R0)+,(R0)+ тут возможно западло ... А если ещё MOV -(R0),-(R0) ...
Но к счастью большая часть народа в курсе, и ничего такого не пишет :) Либо если пишут, то проверяют отладчиком ...
В итоге сомнительно, что и 5% прибавки к скорости получится в итоге.
Я приводил фрагменты кода для 8080 и могу расписать пару примеров для него:
Дополнительные действия в прерывании, связанные с методом Медноногова занимают в районе 146 тактов, пусть даже возьмем с запасом 200, это не принципиально. Пусть частота процессора 2.5 МГц.
При кадровых прерываниях с частотой 50 Гц длительность кадра 2.5e6/50=50000 тактов.
200/50000=0.0040 или 0.4% накладные расходы связанные с методом Медноногова. Посмотрим как это сказывается на выигрыше от стековой пересылки. Если берем развернутые циклы, то без стека 24 такта/байт, стеком - 17 тактов/байт.
1. Если пересылки исходно занимают хотя бы половину прерывания (для пересылок графики в современной насыщенной динамичной игре это даже мало), то при 24 тактах на байт 25000/24=1041 байт.
При 17 тактах/байт 1041*17=17697 тактов.
Итого: 25000-17697-200=7103 тактов чистого выигрыша/кадр при использовании метода Медноногова в описанных условиях.
7103/50000=0.1421= округлю в меньшую сторону 14.2%
2. Аналогично можно посчитать менее напряженный вариант, когда пересылки занимают 1/10 прерывания.
Сразу итог: 1264/50000=0.0253= округлю в меньшую сторону 2.5%
Можно дальше уменьшать число пересылаемых байт и в районе 30 байт на прерывание вариант без стека станет выгоднее. Но при таком незначительном количестве пересылок речь уже идет не о скорости, а о занимаем месте (значит никаких развернутых циклов) и об удобстве использования. Т.е. это предмет для обсуждения в другой ветке.
Чего хотеть - Архимед на ядре ARM , первый компьютер более-менее массовый...
Но вот зараза, за рубежом он остался экзотикой.
Так что не только СССР проморгал его...
Архимедов было сравнительно мало не из-за качества техники, а из-за темных штучек глобального маркетинга, тесно связанного с политикой. Американцы сделали свои риски намного раньше британцев, уже к 1981 было не менее трех изделий. Одно потом стало POWER, другое после 30 лет выдержки RISC V, а третье даже немного использовалось в тени уже тогда. Однако, глобальный тренд был показывать лидерство IBM, продвигать x86, славить Вакса и тормозить сторонние инновации. Арм лишь ускорил неизбежные перемены. Хотя считаю, что ассемблер Арма был реально самым крутым среди всех процессоров. Когда столкнулся с Архимедом в начале 1991, это было очень сильное впечатление.
- - - Добавлено - - -
С одной стороны MOV (PC)+, (PC)+ здесь всегда всё хорошо, иначе большая часть программ работать не будет
с другой MOV (R0)+,(R0)+ тут возможно западло ... А если ещё MOV -(R0),-(R0) ...
Но к счастью большая часть народа в курсе, и ничего такого не пишет :) Либо если пишут, то проверяют отладчиком ...
Интересно, откуда взялась мнемоника SOB - это же ругательство? Может там менеджмент обидел кого из инженеров? Интересно, что даже такая базовая операция как XOR есть не на всех PDP-11. Вообще писать переносимые коды для всех PDP-11 штука непростая. Не уверен, что даже MOV (PC)+,(PC)+ везде работает одинаково.
- - - Добавлено - - -
а мне неинтересен сам тест скорости копирования памяти, т.к. сама скорость памяти вещь не конкретная при одинаковых процессорах PDP-11.
Как это не учитывать скорость памяти? Это ключевой параметр. На Raspberry Pi регулировал скорость кэша, это заметно влияло на быстродействие. Конечно, можно делать тесты на регистровые расчеты, но тут разница будет сильно зависить от числа регистров и особенностей расчета и от скорости памяти всё равно будет зависимость.
- - - Добавлено - - -
Я приводил фрагменты кода для 8080 и могу расписать пару примеров для него:
Дополнительные действия в прерывании, связанные с методом Медноногова занимают в районе 146 тактов, пусть даже возьмем с запасом 200, это не принципиально. Пусть частота процессора 2.5 МГц.
При кадровых прерываниях с частотой 50 Гц длительность кадра 2.5e6/50=50000 тактов.
200/50000=0.0040 или 0.4% накладные расходы связанные с методом Медноногова. Посмотрим как это сказывается на выигрыше от стековой пересылки. Если берем развернутые циклы, то без стека 24 такта/байт, стеком - 17 тактов/байт.
1. Если пересылки исходно занимают хотя бы половину прерывания (для пересылок графики в современной насыщенной динамичной игре это даже мало), то при 24 тактах на байт 25000/24=1041 байт.
При 17 тактах/байт 1041*17=17697 тактов.
Итого: 25000-17697-200=7103 тактов чистого выигрыша/кадр при использовании метода Медноногова в описанных условиях.
7103/50000=0.1421= округлю в меньшую сторону 14.2%
2. Аналогично можно посчитать менее напряженный вариант, когда пересылки занимают 1/10 прерывания.
Сразу итог: 1264/50000=0.0253= округлю в меньшую сторону 2.5%
Можно дальше уменьшать число пересылаемых байт и в районе 30 байт на прерывание вариант без стека станет выгоднее. Но при таком незначительном количестве пересылок речь уже идет не о скорости, а о занимаем месте (значит никаких развернутых циклов) и об удобстве использования. Т.е. это предмет для обсуждения в другой ветке.
Благодарю вас за столь детальный анализ, однако, возможно вы лишь скорее подтвердили моё мнение. Писал про выигрыш от нетипичной работы с указателем стека на фоне издержек на реализацию ВСЕЙ игровой логики. Возможно выигрыш будет и чуть больше, чем 5%, но очень сомнительно, что достигнет 10%. Это для микрош совсем неплохо: когда спрайты двигаются недостаточно плавно, то это раздражает. И даже 5-10% это приятное улучшение. Но в итоге операции копирования занимают гораздо больше места, отнимая память у общей игровой логики, и тем самым превращая игру скорее в демку. О чем и писал с самого начала.
мнемоника SOB - это же ругательство.
Кому ругательство, кому Subtract One and Branch
- - - Добавлено - - -
Вообще писать переносимые коды для всех PDP-11 штука непростая.
И как это RT-11 на всех PDP работает
- - - Добавлено - - -
Не уверен, что даже MOV (PC)+,(PC)+ везде работает одинаково.
Ключевое слово
Не уверен
Ключевое слово
78919 - озадачивает
А ничего, что там PC, а не (PC)+?
Хотя да - как раз
озадачивает
не внимательно смотрящих. Так что вперёд, озадачивайся
Кому ругательство, кому Subtract One and Branch
Это только для энтузиастов древних пидипи, а для нормальных англоговорящих - это почти вежливое ругательство. И, конечно, заменить SOB на две команды - не проблема, а вот заменить XOR - это уже 5-7 инструкций.
а для нормальных англоговорящих
У нас тут русско-говорящий форум
а вот заменить XOR - это уже 5-7 инструкций.
Если ничего не придумывается, то обосрём хоть этим?
Вот только даже здесь в голове каша - 4 команды для замены XOR. Причём в полностью ортогональном варианте.
У нас тут русско-говорящий форум
Если ничего не придумывается, то обосрём хоть этим?
Вот только даже здесь в голове каша - 4 команды для замены XOR. Причём в полностью ортогональном варианте.
Вместо того, чтобы всем честно признаться в своей полной неинформированности по поводу столь интересного названия инструкции, опять пишете полную ерунду. Сколько можно!
У меня не получилось в 4 инструкции. Например, вместо XOR O,R
MOV O,T
BIC R,T
BIC O,R
BIS T,R
Нужен регистр или память для T и будет плохо, если O c инкрементом или декрементом. Может всё-таки не 4?
Сколько можно!
Да да, сколько можно ерунду писать. Завязывай.
- - - Добавлено - - -
У меня не получилось в 4 инструкции
Не мои проблемы
MOV R0,-(SP)
BIC R1,R0
BIC (SP)+,R1
BIS R1,R0
MOV R0,-(SP)
BIC R1,R0
BIC (SP)+,R1
BIS R1,R0
Опять Hunta сам себя обманывает и порочит. Прямо грустно. :( Писал он про ортогональность, а где там ортогональность? Нужно мне, например, XOR (R1)+,R2 и не сработают его 4 инструкции. Понадобится 5-7, как ему и подсказывали.
Опять Hunta сам себя обманывает и порочит.
Правда? Вот только ты себя сам только что опорочил, ибо хрен тебе, а не XOR (R1)+,R2 - не сработает эта команда, даже на тех процах, где она есть. RTFM, как говорится.
Писал он про ортогональность
И про то, что такое ортогональность - почитай заодно.
- - - Добавлено - - -
И на всякий случай, что бы этот деятель не стёр свой позор - цитата, что б навека:
Нужно мне, например, XOR (R1)+,R2
И после такого его позора - если кому-то интересно с ним общаться - флаг в руки, я - завязываю, времени на это нету.
Правда? Вот только ты себя сам только что опорочил, ибо хрен тебе, а не XOR (R1)+,R2 - не сработает эта команда, даже на тех процах, где она есть. RTFM, как говорится.
Ну и трагедия! Описался человек. Имелось в виду, XOR R1,(R2)+ - ничего по сути поставленной темы не меняется.
В слове
Описался - ударение на и.
Для всех заинтересованных, кроме litwr
XOR R1,(R2)+
MOV R1, -(SP)
BIC (R2), (SP)
BIC R1, (R2)
BIS (SP)+, (R2)+
(несуществующая) XOR (R1)+,R2
MOV (R1), -(SP)
BIC R2, (SP)
BIC (R1)+, R2
BIS (SP)+, R2
И вот теперь litwr послан окончательно.
- - - Добавлено - - -
Ну и высший пилотаж (поскольку мне это пока не нужно - делать не буду), который можно сотворить - это заменить использование XOR на макрос в ситуации, когда или не устраивает ограничение XOR или целевой комп не поддерживает XOR.
Архимедов было сравнительно мало не из-за качества техники, а из-за темных штучек глобального маркетинга, тесно связанного с политикой. Американцы сделали свои риски намного раньше британцев, уже к 1981 было не менее трех изделий. Одно потом стало POWER, другое после 30 лет выдержки RISC V, а третье даже немного использовалось в тени уже тогда. Однако, глобальный тренд был показывать лидерство IBM, продвигать x86, славить Вакса и тормозить сторонние инновации. Арм лишь ускорил неизбежные перемены. Хотя считаю, что ассемблер Арма был реально самым крутым среди всех процессоров. Когда столкнулся с Архимедом в начале 1991, это было очень сильное впечатление.
По поводу RISC архитектур.... А знаете, что у DEC был 32-х разрядный RISC процессор.... На арсениде галлия аж... И тактовая частота была свыше 200 Мгц... :)
И следов этого процессора не знаю :(
Информация из журнала "Зарубежная электроника", переводной журнал из США. Последние 6 номеров выписал ... 1992 год.
А ведь многие сейчас утверждают, что только кремний... Однако свыше 30 лет уже было не на кремнии и с ломовой тактовой частотой :)
Конкурентов не было или я не знаю о таковых :)
Возможно , что по результатам запилили Альфу, но сее мои гнусные домыслы и измышления...
Так что DEC могла тогда даже это ;)
- - - Добавлено - - -
Интересно, откуда взялась мнемоника SOB - это же ругательство? Может там менеджмент обидел кого из инженеров? Интересно, что даже такая базовая операция как XOR есть не на всех PDP-11. Вообще писать переносимые коды для всех PDP-11 штука непростая. Не уверен, что даже MOV (PC)+,(PC)+ везде работает одинаково.
Ну операционные системы, да всё что с ними связано вполне работали ;)
Как это не учитывать скорость памяти? Это ключевой параметр. На Raspberry Pi регулировал скорость кэша, это заметно влияло на быстродействие. Конечно, можно делать тесты на регистровые расчеты, но тут разница будет сильно зависить от числа регистров и особенностей расчета и от скорости памяти всё равно будет зависимость.
Вопрос в предназначении... Если необходимо что-то сделать - можно получить большую скорость процессора в эмуляторе или на FPGA. А там сильно своя память.
С оригиналом сейчас всё печально и становится печальнее :( Ещё лет 10-20 и останутся штучные образцы ... :(
И следов этого процессора не знаю
Есть очень хорошая вероятность, что это был VAX 9000
"В результате решения DEC ориентироваться на клиентов IBM компания начала работу над своей следующей крупной машиной, VAX 9000. Это была система на основе ECL, которая должна была вывести их на бизнес-рынок высокого класса. Однако чрезмерно амбициозная разработка с использованием непроверенных технологий привела к задержкам, и к моменту поставки системы CMOS VAX 6000 были доступны, обеспечивая аналогичную мощность за небольшую часть стоимости. VAX 9000 был отправлен клиентам в октябре 1989 года, но вскоре после этого был снят с производства."
В том время ECL (эмиттерно-связанная логика ЭСЛ) практически наверняка означал арсенид галлия.
Но это только мои предположения
Архимедов было сравнительно мало не из-за качества техники, а из-за темных штучек глобального маркетинга, тесно связанного с политикой.
Связано с масштабом производителя. С IBM тягаться никто не мог. RISC - компьютеры были, но их в % соотношении было мало. А уж когда по недосмотру архитектура оказалась открытой...
Даже сама IBM не сдюжила. Придумала линейку PS/2, спецом под неё шикарную систему OS/2... Но шмогла ... :)
PS/2 да OS/PS/22 канули в лету... PS/2 - умерли давно, OS/2 ещё где-то трепыхается но судьба её :(
Вдогонку. Да, он не RISC, но другой информации по ECL и DEC не попадалось...
В том время ECL (эмиттерно-связанная логика ЭСЛ) практически наверняка означал арсенид галлия.
Было бы интересно узнать. Вполне возможно, что микропрограммное ядро VAX 6000 оно и было... Но не шмогли ... :(
Выдали за "перспективные разработки" :)
Там в журнале даже было плохенькое фото платы с процессором.
Журнал - "Electronic Design"
На сайт забрался, но старых номеров не нашёл...
Но не шмогли
Не то что не смогли - как раз примерно в это время, ЕМНИП, началось нашествие CMOS (ака КПОМ) - начали преодолевать или уже преодолели его первоначальную тормознутость
- - - Добавлено - - -
"В 1988 финансовом году у DEC был лучший год с рекордными продажами. Однако это был годом краха фондового рынка и рецессии в США и Европе. Технологии менялись, и CMOS вот-вот превзойдет ECL. Слышали, как Олсен сказал: «Вы имеете в виду, что мы потратили миллиарды на VAX 9000, а NVAX такой же быстрый?» Олсен не мог видеть следующую волну технологий, которая быстро продвигалась на территорию DEC. В NVAX использовалась большая часть проектных работ, которые вошли в VAX 9000, но они были реализованы с использованием технологии CMOS. NVAX был выпущен в ноябре 1990 года и отправлен клиентам в октябре 1991 года, что резко сократило любые потенциальные продажи VAX 9000. Если бы DEC отменила выпуск VAX 9000 несколькими годами ранее, когда стало ясно, что инвестиции не окупятся, она перераспределила ресурсы, при разработке NVAX NVAX мог бы выйти на рынок раньше и продаваться вместо VAX 9000.
В этом тезисе утверждается, что VAX 9000 дорого обошелся DEC с точки зрения финансов и репутации. Однако можно утверждать, что если бы DEC была доставлена вовремя, то VAX 9000 мог бы открыть для DEC рынок мейнфреймов, особенно на тех рынках, где была важна векторная обработка. Задержки были вызваны чрезмерными амбициями в отношении технологий, и предполагается, что использование более проверенных технологий вполне могло бы поставить систему вовремя. Это пример чрезмерно амбициозных технологических планов, ведущих к упущенным возможностям и последующему провалу рынка. DEC была не единственной компанией, застигнутой врасплох появлением CMOS. MIPS, среди прочего, все еще работал с ECL в начале 1990-х годов."
Нашёл ещё про DEC:
Несколько позже в DEC реализовали MIPS II на одном кристалле на биполярной технологии Motorola. Итак, представьте себе: на дворе 1993 год, лидирующий продукт Intel — тот самый Pentium (техпроцесс КМОП 800 нм, тактовая частота 66 МГц, TPD 15 Вт, три миллиона транзисторов на кристалле). В IEEE Journal of Solid-State Circuits выходит статья, озаглавленная “A 300-MHz 115-W 32-b Bipolar ECL Microprocessor”. Триста (!) Мегагерц и сто пятнадцать (!!!!) Ватт.
Но это было через год и ЭСЛ :)
И большая часть смертных про сеи проделки DEC даже не подозревает...
Хотя опыт наработанный применили в Альфе на почти обычной технологии на обычном кремнии.
И с таким багажом суметь разориться :(
Есть фото системы охлаждения - там она очень похожа на ту, что на плате стояла...
https://habrastorage.org/webt/-x/bz/_v/-xbz_vxasr0zxqpjue1r-2vmmoo.png
И большая часть смертных про сеи проделки DEC даже не подозревает...
У них было много внутренних проектов, которые или не взлетели (по разным причинам) или взлетели не сразу. Если я правильно помню, то PDP-11 и VAX-11 как раз из из числа :)
А сколько там было того, про что мы не знаем....
Это только то, про что они сообщили общественности....
А сколько там было того, про что мы не знаем....
Некоторые внутренние документы всё таки всплыли - со временем :)
Читать интересно :)
Ведь, если бы они приняли малость другие решения, мир мог стать совершенно иным.
Да и у нас с разработками DEC обходились не по уму.
Например, Т11, недооценён что там, что у нас...
DEC его рассматривала скорее, как микроконтроллер. Ну да, тогда круче были F11, потом J11.
Дешёвый компьютер в массы на его базе так и просился :)
И ведь были все шансы.
Но маркетинг :(
Скопировали у нас T11 поздно, даже сделали один компьютер , не зная куды приткнуть и увсё :(
У нас его надо было драть первым, по функционалу примерно 1801ВМ1... Вроде бы не шик-блеск.
Но можно было на него вешать периферию от К580, коя была в достаточных количествах, да была отработана.
если бы
Да кабы, то росли во рту грибы
И был бы не рот, а цельный огород :)
Как у меня говорит жена - ех, меня бы в то время (имеется ввиду примерно 18-тилетний возраст), но с сегодняшними мозгами.. :)
(а теперь про меня) Я бы столько софта и железа сохранил!!
Да и лицензию на T11 и оборудование для его производства вполне за недорого можно было купить.
Так как ни у кого T11 не котировался. Все смотрели на него, как на что-то вспомогательное.
А у нас взгляды из-за бугра, являлись (да и являются :( ) предметом для подражания...
Так как ни у кого T11 не котировался.
Честно говоря - и я его барахлом считаю :) Он примерно (или чуть получше) как наш 1801ВМ1
Да и лицензию на T11 и оборудование для его производства вполне за недорого можно было купить.
И много СССР лицензий у США покупало? Можете, навскидку, назвать пару-тройку лицензий в компьютерной сфере?
Или "можно было купить" - это Вы жалеете что лично и на личные средства лицензию не приобрели? ;-)
И много СССР лицензий у США покупало?
Память царапает, что что-то покупали, но зуб давать не буду :)
Память царапает, что что-то покупали, но зуб давать не буду
Если вдруг доцарапает - буду рад услышать примеры.
- - - Добавлено - - -
А то я знаю (навскидку) только такие примеры (http://oldpc.su/articles/hdd/files/don.pdf) покупки лицензий ;-)
Таки: собственник "ноу-хау" - ИЗОТ ;-)
Если вдруг доцарапает - буду рад услышать примеры.
Насколько я помню, это было время ДО того, как решили начать драть ЕС серию - было какое-то совещание наверхах, в том числе с академиками от (тогдашнего) IT, где решалось - что дальше делать - развивмать дальше БЭСМ или начать драть ЕС (к моменту совещанию в ГДП уже даже что то содрали) или продолжать развивать какую-то английскую ЭВМ (которая вроде как была официально куплена - включая производство, но которая вроде как была неофициальной копией какое-то IBM-360).
Но.
Это была статья, на которую я где-то наткнулся (ещё бы вспомнить - где) и факты из которой надо проверять-проверять-проверять.
В общем - я попробую (пардон, не особо усердствуя) найти ту статью и если найду - пройтись по её утверждениям.
Ну и высший пилотаж (поскольку мне это пока не нужно - делать не буду), который можно сотворить - это заменить использование XOR на макрос в ситуации, когда или не устраивает ограничение XOR или целевой комп не поддерживает XOR.
Без макроса в 4-е строки - это всё позорный трёп.
- - - Добавлено - - -
По поводу RISC архитектур.... А знаете, что у DEC был 32-х разрядный RISC процессор....
Про этот проц - https://www.hpl.hp.com/techreports/Compaq-DEC/WRL-93-8.pdf - ничего особого, взяли MIPS и разогнали, но кеша всего 4 КБ, нету ММУ и даже аппаратного умножения. В историю войдет как лебединная песня технологии ESL, бесполезная игрушка. И никакого арсенида. Гораздо лучше у них получилось разогнать ARM чуть позже. StrongARM - это было реально круто. Но тут DEC'y опять нажали на тормоз. Завод по производству ARM вдруг стал плохо работать, а менеджеры Intel это легко "вылечили", купив ARM у DEC.
- - - Добавлено - - -
Связано с масштабом производителя. С IBM тягаться никто не мог. RISC - компьютеры были, но их в % соотношении было мало. А уж когда по недосмотру архитектура оказалась открытой...
Не было недосмотра, все было по плану. И масштабы производства не причем. Дек в 70-е мог давать любые масштабы, но обком приказал и Дек обязали позориться с Ваксами. Коммодор мог в первой половине 80-х давать любые масштабы, но по планам обкома, нужно было дать дорогу аплам и писишкам. Сам где-то до 2000-х был уверен, что Алгол - это крайне неудачный язык и, казалось, что это общепринятое представление. А реально оказалось, что это прямой результат агрессивного маркетинга IBM, который давал эффект подавляющей пропаганды, особенно в СССР, где альтернатив просто не знали. A Риски сдерживали, ничто не мешало делать на них системы уже в начале 80-х, но это создавало проблемы рынку мейнфреймов. Если бы в СССР остался хотя бы 1% от прежнего стремления к прогрессу, то история могла бы быть совсем другой.
T11 был неплох, но сравним с Z80 и появился (а это очень важно) на пару лет позже. Только Джек Трамиел заметил T11 и даже сделал какую-то видеоигру с ним.
- - - Добавлено - - -
Насколько я помню, это было время ДО того, как решили начать драть ЕС серию - было какое-то совещание наверхах, в том числе с академиками от (тогдашнего) IT, где решалось - что дальше делать - развивмать дальше БЭСМ или начать драть ЕС (к моменту совещанию в ГДП уже даже что то содрали) или продолжать развивать какую-то английскую ЭВМ (которая вроде как была официально куплена - включая производство, но которая вроде как была неофициальной копией какое-то IBM-360).
Но.
Это была статья, на которую я где-то наткнулся (ещё бы вспомнить - где) и факты из которой надо проверять-проверять-проверять.
В общем - я попробую (пардон, не особо усердствуя) найти ту статью и если найду - пройтись по её утверждениям.
Если вы реально что-то хотите узнать, то дело во многом шло от товарищей из ГДР, которые поняли ещё в 50-х, что СССР - это сливаемый проект и спешили этому помочь. В альтернативном мире сотрудничество с британцами могло бы дать что-то типа культового Заводного апельсина, где британцы говорили на англо-русском новоязе. :) Но обком подсуетился и этот фильм был лет на 10 в Англии запрещен.
И вообще вопрос в студию... Какие именно компьютеры не поддерживали XOR ?
Я так понимаю, что какие-то первые PDP-11 от DEC...
Ну возможно М1 - Электроника-60...
И наверное всё.
Т11 - интересен тем, что его можно было двинуть в массы. Дёшево и сердито.
Не надо было тратить много времени на разработку микросхем периферии.
И вполне можно было купить именно производство. Так как для КОКОМа он был не интересен.
А уж имея производство Т11 за базу, можно было и развернуть прочая :)
У нас по факту такими массовыми стали процессоры 1801ВМ1,1801ВМ2,1801ВМ3.
Конечно , разработчики получили бесценный опыт... Но по факту было потрачено время и ресурсы.
И даже VAX сделали :) , но было поздно :(
Воронежские изделия, кроме Электроники-60М были редкостью :(
в 4-е строки - это всё позорный трёп.
Обосрался в очередной раз - и молчи уже. "5-7 команд, меньше не получилось!" "не ортогонально!". Всё получается - у тех, кто умеет, но это не про тебя.
- - - Добавлено - - -
- - - Добавлено - - -
но обком приказал и Дек обязали позориться с Ваксами.
Заврался, дальше не куда. Обком приплёл. Чего ещё соврешь?
- - - Добавлено - - -
Если вы реально что-то хотите узнать
От тебя - одно вранье, слушать противно
- - - Добавлено - - -
Но обком подсуетился
Кису понесло....
И вообще вопрос в студию... Какие именно компьютеры не поддерживали XOR ?
PDP-11/04, PDP-11/05-10 (проц один), PDP-11/15-20 (проц один) ну и T-11
- - - Добавлено - - -
Ну возможно М1 - Электроника-60...
В EIS ПЗУ XOR был
Насколько я помню, это было время ДО того, как решили начать драть ЕС серию - было какое-то совещание наверхах, в том числе с академиками от (тогдашнего) IT, где решалось - что дальше делать - развивмать дальше БЭСМ или начать драть ЕС (к моменту совещанию в ГДП уже даже что то содрали) или продолжать развивать какую-то английскую ЭВМ (которая вроде как была официально куплена - включая производство, но которая вроде как была неофициальной копией какое-то IBM-360).
Но.
Это была статья, на которую я где-то наткнулся (ещё бы вспомнить - где) и факты из которой надо проверять-проверять-проверять.
Это всё слишком известные факты, хотя в таком изложении больше похоже на типичные доводы litwr'а: то есть вроде и названия/фамилии правильные, и упомянуты в нужном сочетании, но сразу понимаешь что даже современная психиатрия бывает бессильна....
хотя в таком изложении больше похоже на типичные доводы
Я ту статью по диагонали посмотрел, плюс это было достаточно давно, так что.. пока вот так.
где решалось - что дальше делать - развивмать дальше БЭСМ или начать драть ЕС
Всё было несколько иначе: собрались уважаемые мужи, с полным пониманием (из предыдущих дискуссий) что выбрать никого из отечественных разработчиков не получится, так все хотели 100% ресурсов и кроме "я за 5 минут всех уделаю, только дайте руль мне" ничего не предлагали (уж пусть разработчики меня простят за такое грубейшее утрирование).
Поэтому зашли с другой стороны и решили пойти он наличия готового софта. И тут было всего два предложения: IBM/360 (с пониманием что придётся воровать, и с пониманием что у ГДР уже сделано процентов 80), и ICL, которые были готовы сотрудничать, но непонятно насколько глубоко. Плюс были мысли что эта машинка от ICL есть производная от IBM/360. Так что про БЭСМ и прочих локальных разработчиков уже даже мыслей не было, выбирали строго из двух вариантов.
Сорри за вольный пересказ рассказов участников.
Всё было несколько иначе
Да, это более близко к той статье :)
Подитожу:
эмулятор ДВК-2 МС1201.01 К1801ВМ1 5.3 мгц : 268.6 Кбайт/с https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002373&viewfull=1#post1002373
Агат-9 6502 1.021 МГц : 76-124 Кбайт/с - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002428&viewfull=1#post1002428
БК11М К1801ВМ1 4 мгц : 167.2 Кбайт/с
калькулятор на Н1806ВМ2-5.5 мгц 0 тактов СОЗУ : 502.6 Кбайт/с - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002474&viewfull=1#post1002474
УКНЦ К1801ВМ2 8 мгц : 290.5-315.1 Кбайт/с - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1181928&viewfull=1#post1181928
Квант-4С КМ1801ВМ3 4.464 Мгц : 297.9 Кбайт/с - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002557&viewfull=1#post1002557
Квант-4С КМ1801ВМ3 6 Мгц : 470.8 Кбайт/с - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002633&viewfull=1#post1002633
MSX Z80 3.57 MHz (LDIR) : 151.7 Кбайт/с
MSX TurboR R800 28.636 MHz (LDIR, 7.159 MHz на внешней шине): 874.8 Кбайт/с - https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002896&viewfull=1#post1002896
Amstrad CPC/PCW Z80 4 MHz (эффективная 3.2 МГц) LDIR: 162.8 Кбайт/с
много LDI: 195.3 Кбайт/с
ненормальный SP-код, без указания адресов в каждой пересылке: 217 Кбайт/с
ZX Spectrum Z80 3.5 Mhz LDIR: 162.8 Кбайт/с
LDI: 213.6 Кбайт/с
Корвет КР580ВМ80А 2.5 МГц (нормальный код): 64.1-104.2 Кбайт/с
ненормальный SP-код, без указания адресов в каждой пересылке: 143.6 Кбайт/с
IBM PC 8088 4.77 MHz (rep movsw): 274-372 Кбайт/с
IBM PC AT 80286 6MHz 0ws (rep movsw): 1302-2929.6 КБ/с
Amiga 68000 7.1 MHz (MOVE.L): 924.5-1386.7 Кбайт/с
(MOVEM): до 1700 Кбайт/с
Acorn Archimedes ARM2 8 МГц: до почти 16 Мбайт/с
Atari ST 68000 8 МГц (MOVE.L): 1041.7-1562.5 Кбайт/с
(MOVEM): до 1900 Кбайт/с
Данные по Вектору может предоставить только ivagor. Кстати, при использовании нормальных кодов БК0011 чуть быстрее Спека с быстрой памятью.
EDIT. Данные по Commodore 128 в режиме Z80 (эффективная частота 2 МГц) в эмуляторе VICE
много LDI - до 96 КБ/с
УКНЦ К1801ВМ1 8 мгц
О как.
УКНЦ К1801ВМ1 8 мгц
Ого! Да ещё и разогнали-то как.
Благодарю, поправил опечатку
- - - Добавлено - - -
Ого! Да ещё и разогнали-то как.
Вроде в тестах на УКНЦ не учитывали ХХ и там ещё дальше были данные от randomizer - жалко что при модерации это ушло в другую ветку. Сам в верхней границе неуверен, если есть на этот счет консолидированное мнение - поправлю
IBM PC 8088 4.77 MHz (rep movsw): 477 Кбайт/с
Печально. А тестов с 8086 не было? А то REP MOVSW из-за 8-разрядной шины будет два раза читать и два раза писать. А если найдётся 8086 то можно оценить разницу с чётным и нечётным адресом.
- - - Добавлено - - -
Вроде в тестах на УКНЦ не учитывали ХХ и там ещё дальше были данные от randomizer - жалко что при модерации это ушло в другую ветку. Сам в верхней границе неуверен, если есть на этот счет консолидированное мнение - поправлю
Я потом попробую попозже тест от MM, сделаю чисто чтение командой TST, запись CLR, и копирование MOV. Раскручу цикл на большее количество команд, тут уже вовсю будет чувствоваться предвыборка, от этого можно оценить. Время будет измерятся таймером, запуск по очередному тику таймера. Так что будет довольно точно.
Но потом попозже.
randomizer
03.07.2023, 11:26
УКНЦ К1801ВМ2 8 мгц : 290.5-341.3 Кбайт/с - https://zx-pk.ru/threads/30199-sravn...=1#post1002545
Нижнее значение при частоте процессора 8МГц.
Верхнее не оч. понятно. При частоте 10МГц, у меня получалось 365 KB/s или 356 KiB/s
А при использовании памяти без задержек, получается 766 KB/s или 748 KiB/s
Прогнал тесты, сделал их несколько: холостой ход (пустой цикл), копирование командой MOV (R2)+,(R3)+, чтение командой TST (R2)+, запись командой CLR (R2)+. Соответственно варианты по одной команде в цикле, 8 команд, 64 команды, 512 команд. Измерялось время в тиках сетевого таймера. В УКНЦ частота равна 50,08 Гц. В первых двух тестах цикл обеспечивался командами SOB, для третьего пришлось перейти на DEC/BNE, а для четвёртого на DEC/BEQ/JMP.
Результаты в тиках сетевого таймера/секундах:
Холостой ход
MOV (R2)+,(R3)+
TST (R2)+
CLR (R2)+
1 команда
809/16,15
2130/42,53
1545/30,85
1550/30,95
8 команд
103/2,06
1398/27,92
933/18,63
1004/20,05
64 команды
17/0,34
1320/26,36
866/17,29
941/18,79
512 команд
6/0,12
1308/26,12
855/17,07
930/18,57
По самому лучшему показателю скорость копирования 8 Мб составляет 313,62 кб/сек. Наиболее плохо у цикла с одной командой, который обычно и используется - 192,61 кб/сек. Уже в цикле из 8 команд ситуация значительно лучше - 293,41 кб/сек.
Прогнал тесты, сделал их несколько: холостой ход (пустой цикл), копирование командой MOV (R2)+,(R3)+, чтение командой TST (R2)+, запись командой CLR (R2)+. Соответственно варианты по одной команде в цикле, 8 команд, 64 команды, 512 команд. Измерялось время в тиках сетевого таймера. В УКНЦ частота равна 50,08 Гц. В первых двух тестах цикл обеспечивался командами SOB, для третьего пришлось перейти на DEC/BNE, а для четвёртого на DEC/BEQ/JMP.
Результаты в тиках сетевого таймера/секундах:
Холостой ход
MOV (R2)+,(R3)+
TST (R2)+
CLR (R2)+
1 команда
809/16,15
2130/42,53
1545/30,85
1550/30,95
8 команд
103/2,06
1398/27,92
933/18,63
1004/20,05
64 команды
17/0,34
1320/26,36
866/17,29
941/18,79
512 команд
6/0,12
1308/26,12
855/17,07
930/18,57
По самому лучшему показателю скорость копирования 8 Мб составляет 313,62 кб/сек. Наиболее плохо у цикла с одной командой, который обычно и используется - 192,61 кб/сек. Уже в цикле из 8 команд ситуация значительно лучше - 293,41 кб/сек.
Подправил данные по УКНЦ и добавил по IBM PC AT.
IBM PC AT 80286 6MHz 0ws (rep movsw): 1674.1 КБ/с
(много movsw): 2343.8 КБ/с
А что значит "много movsw"? Вроде REP MOVSW это одна команда, перед ней задаётся в CX количество слов, а в DS:SI источник, в ES: DI - приёмник.
А что значит "много movsw"? Вроде REP MOVSW это одна команда, перед ней задаётся в CX количество слов, а в DS:SI источник, в ES: DI - приёмник.
Если нам на УКНЦ нужно быстро скопировать килобайт, то просто тупо пишем килобайт кода, 512 инструкций MOV (R1)+,(R2)+. А на РС используем для этого 512 инструкций MOVSW, которыe, однако, только на полкило. На Амиге можно 256 MOVE.L (A1)+,(A2)+ на полкило, а вот на Z80 уже получится целых 2 кило, как минимум. А некоторые для 8080 и Z80 4 К кода в таких ситуациях пишут.
Если нам на УКНЦ нужно быстро скопировать килобайт, то просто тупо пишем килобайт кода, 512 инструкций MOV (R1)+,(R2)+. А на РС используем для этого 512 инструкций MOVSW, которыe, однако, только на полкило. На Амиге можно 256 MOVE.L (A1)+,(A2)+ на полкило, а вот на Z80 уже получится целых 2 кило, как минимум. А некоторые для 8080 и Z80 4 К кода в таких ситуациях пишут.
Неужели 512 команд MOVSW исполняются быстрее чем одна REP MOVSW при CX=512 ?
Неужели 512 команд MOVSW исполняются быстрее чем одна REP MOVSW при CX=512 ?
Вы правы, отдельные MOVSW медленнее. В теме про PDP стал думать по пидипишному. :) Внес коррекции, по 8088 данные были завышены, а по 80286 занижены. К сожалению, в некоторых источниках тайминги указывают неточно. Сейчас брал из фирменных мануалов.
EDIT: для 8088 брал 9+25n для копии n слов, для 80286 - 6+4n.
Вы правы, отдельные MOVSW медленнее. В теме про PDP стал думать по пидипишному. :) Внес коррекции, по 8088 данные были завышены, а по 80286 занижены. К сожалению, в некоторых источниках тайминги указывают неточно. Сейчас брал из фирменных мануалов.
EDIT: для 8088 брал 9+25n для копии n слов, для 80286 - 6+4n.
В официальной документации по 80286 команда MOVSW исполняется за 5 тактов, а REP MOVSW за 5+4*CX тактов. Так что REP MOVSW должна быть быстрее, когда CX>5. Интересен вариант, когда адрес нечётный. В этом случае будут читаться и записываться два байта вместо одного слова.
А ещё вы написали, что брали тайминги из официальный мануалов, соответственно вопрос - а реальный тест был?
В официальной документации по 80286 команда MOVSW исполняется за 5 тактов, а REP MOVSW за 5+4*CX тактов. Так что REP MOVSW должна быть быстрее, когда CX>5. Интересен вариант, когда адрес нечётный. В этом случае будут читаться и записываться два байта вместо одного слова.
А ещё вы написали, что брали тайминги из официальный мануалов, соответственно вопрос - а реальный тест был?
Точно, 5+4n тактов, но на результы это не влияет. Но эмуляторах (pce, pcem) пробовал, для PC примерно 337 КБ/с, для PC AT - 2797 КБ/с.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot