Просмотр полной версии : Отечественные компьютеры: быстродействие
CodeMaster
05.04.2016, 08:01
Хвост отцеплен в отдельный тренд, т.к. перестал соответствовать тематике обсуждения.
HardWareMan
05.04.2016, 12:23
Что нынче в тренде?
Пока неотносящиеся к теме сообщения переносятся в отдельную тему («Неструктурированные разговоры о советской ВТ») хочу напомнить, что эта тема была про быстродействие отечественных (а заодно и зарубежных) ПК. И результаты тестов на Бейсике (см. начало темы) для всех советских ПК по-прежнему очень нужны.
А пока таблица https://docs.google.com/spreadsheets/d/1g-p_yYqrqbPtUJRAFRY3VcrXPQy0l8oCTPPm6wDvAis/edit?usp=sharing иногда пополняется результатами зарубежных компьютеров, найденных в разных источниках.
Для тех, кому интересны параметры разных ПК могу предложить также и такую таблицу (которая, однако, пока далеко не в законченном виде): https://docs.google.com/spreadsheets/d/16FPxObtj8XMqnb7pv837ne_3VufLk3Oft9xDS5EJKBA/edit?usp=sharing. Она даёт неплохую картину того, какие ПК разрабатывались и выпускались в разных странах с 1979 до 1989 год. Указана там и разрядность основных составляющих ПК (раз уж этот вопрос оказался настолько важным для многих), однако это вовсе не означает приглашения к продолжению перебранки по поводу разрядности. Прошу без крайней необходимости сообщений на эту тему не писать. Во всяком случае, я больше не собираюсь тратить время на обсуждение тех же самых уже многократно поднимавшихся вопросов. Таблица пока заполнена лишь частично, поэтому не стоит писать претензии, почему там не указаны какие-то ПК или параметры для каких-то ПК — я надеюсь её постепенно пополнять (и это могут делать все желающие, скопировав её себе, а затем выложив в виде уже другого файла или послав мне). Вообще, такую таблицу можно и расширить, добавив ещё другие параметры (характеристики графики и звука, порты, внешняя память и т.д.), что позволит иметь отличный справочник характеристик основных ПК тех лет для всех желающих.
Кстати, данные для таблицы я разыскивал достаточно серьёзно (в т.ч. смотрел разные журналы, японскую Википедию, документацию и схемы к разным ПК и т.д.), и они должны быть весьма точные. Причём пока получается так, что для многих редких ПК параметры заполнены, а для многих известных — пока нет (времени не было).
CodeMaster
07.04.2016, 23:15
Screw, dk_spb, ещё раз напоминаю здесь только цифры. Можете считать это официальным предупреждением.
Ну раз только цифры, то вот свеженькие результаты измерения быстродействия команды MUL R2, R3 для БК0010 :
3 мгц - 11.782 т. ком в 1 сек.
6 мгц - 22.920 т. ком в 1 сек.
Для справки было измерено быстродействие команды MOV R0, R4 для БК0010 :
6 мгц - 381.3 т. ком в 1 сек.
На 3 мгц - сами измеряйте.
*
http://storage3.static.itmages.ru/i/16/0407/s_1460042653_2816224_59414c1b47.jpg (http://itmages.ru/image/view/4108757/59414c1b)http://storage2.static.itmages.ru/i/16/0325/s_1458946789_2778013_b0e96c159c.jpg (http://itmages.ru/image/view/4051945/b0e96c15)
Именно этот экз. К1801ВМ1Г не продается.
Др. экз. К1801ВМ1Г пока можно приобрести на Барахолке :
http://zx-pk.ru/market/viewtopic.php?f=4&t=4803
Lethargeek
08.04.2016, 19:20
Кстати, данные для таблицы я разыскивал достаточно серьёзно (в т.ч. смотрел разные журналы, японскую Википедию, документацию и схемы к разным ПК и т.д.), и они должны быть весьма точные.
глянул вскользь...
у атари-800 максимальный фон 384x240 (получается 11520 байт)
объём спрайтов также надо бы (отдельно) учитывать
и что за режим 4мгц в A305??
Опять таки только цифры.
Намерял в экспериментальной М-ЭВМ на Н1806ВМ2-5.5 с 0.5 такта предвыставкой адреса и 0.5 такта удержанием адреса 0 тактов ожидание СОЗУ - 48 кбайт - порядка 1100 т. рег-рег ( ADD R3, R4 ), при оптимизации сигнала AR ( снятие до конца цикла обращения ) - еще примерно на 5% повыше быстродействие.
Использовался тест от блока ВМ3А - 33.55 млн рег-рег + 4.19 млн SOB. Общее время выполнения составило - 46 сек, хол. ход ( только SOB ) - 16 сек. При оптимизации сигнала AR общее время выполнения - 43 сек. ( Порядок опимизации - см. краткое ТО на сайте Ангстрема ).
Описание конструкции опубликую этим летом. Для особо любознательных - по ссылке в моей подписи, но там только технические материалы.
на 16-битном К1801ВЕ1 - это я о том, что потом назвали "Электроника НЦ8010"Где бы посмотреть набор инструкций К1801ВЕ1? (погуглил, прежде чем спрашивать, ничего не нашёл)
- - - Добавлено - - -
Ну раз только цифры, то вот свеженькие результаты измерения быстродействия команды MUL R2, R3 для БК0010 :
3 мгц - 11.782 т. ком в 1 сек.
6 мгц - 22.920 т. ком в 1 сек.На БК 0011 у меня получалось в среднем 256 тактов, то бишь при 4 МГц это 15625 MUL в секунду = 64 микросекунды.
Для справки было измерено быстродействие команды MOV R0, R4 для БК0010 :
6 мгц - 381.3 т. ком в 1 сек.
На 3 мгц - сами измеряйте.БК 0011 на 6 МГц - команда исполняется за 16 тактов, то бишь 375 тысяч MOV в секунду = 2,666 микросекунды.
БК 0011 на 4 МГц - команда исполняется за 16 тактов, то бишь 250 тысяч MOV в секунду = 4 микросекунды.
БК 0010 3 МГц - 12 тактов, тупо пропорционально 4:3 = та же скорость (4 мкс), что у БК 0011 на 4 МГц.
БК 0010 в быстрой памяти на 3 МГц исполняет MOV R0,R4 за 8 тактов, а это 375 тысяч MOV = 2,666 мкс.
БК 0011 в быстрой памяти на 4 МГц - тоже 8 тактов, это 500 тысяч инструкций MOV в секунду = 2 мкс.
БК 0011 в быстрой памяти на 6 МГц - 9 тактов, это 666666.(6) инструкций MOV в секунду = 1,5 мкс.
Где бы посмотреть набор инструкций К1801ВЕ1? (погуглил, прежде чем спрашивать, ничего не нашёл)
Кое-что есть в техническом описании (http://www.1801bm1.com/files/retro/1801/ve1/)
LeoN65816
17.04.2020, 11:32
Цифры.
ПЭВМ: модернизированный АГАТ-9.
ЦП: 65C802 (умеет 6502, 65C02 и 65C816, распиновка 6502).
Частота: стандарт 1.021МГц, турбо 2.8 МАХа и 3.5 МАХа.
Операция: копирование блока памяти и заполнение блока памяти константой.
72244
Более новый вариант (04-02-2016)Прогнал Basic-тесты на реальном железе: БК 0010 и БК 0011М. Результаты БК 0010 немного отличаются от тех, что в таблице (насколько я понял, они получены из эмулятора). БК 0011М в таблице не было, так что встречайте новичка :)
Таблица БК 0010 и 0011 (https://www.icloud.com/numbers/0N6DOfuHCJ-nRdwMVNnCgOb8g#BK0011-Basic-tests)
HardWareMan
18.04.2020, 07:04
Manwe, а можно было нормально поделиться, без вот этой гейской пропаганды? Она закрывает часть таблицы и её нельзя закрыть не вводя чего либо.
https://jpegshare.net/images/bc/58/bc58d34482a2c60b373be6e6697bd7f7.png
Black Cat / Era CG
18.04.2020, 07:25
HardWareMan, например
https://pic.maxiol.com/images2/1587183903.2989615885.beka.png
F12.
HardWareMan
18.04.2020, 07:36
Black Cat / Era CG, ради чего? Кто больше заинтересован в этом? Ответишь на вопрос - сразу всё поймёшь.
Black Cat / Era CG
18.04.2020, 07:45
HardWareMan, да мне ж пофиг. Вижу фигню - убираю фигню. Все просто :)
Скорость исполнения команды MOV с разными типами адресации на БК 0010 и БК 0011М (частоты 3, 4, 6 МГц, память медленная штатная и быстрая статическая в контроллере дисковода).
Таблица (https://www.icloud.com/numbers/0WEYWiEX_b0yneUrl3aGk_udw#BK0010-11-instructions-speed)
Lethargeek
20.04.2020, 02:18
Вижу фигню - убираю фигню.
всё равно в остатке тоже фигня, которую хрен еще сохранишь нормально
- - - Добавлено - - -
я поставил было даже спасибку Manwe, поскольку за цифры никого не западло поблагодарить
- - - Добавлено - - -
но, измазавшись в этом яблочном повидле, забрал спасибку :v2_dizzy_biggrin2:
Цифры.
ПЭВМ: модернизированный АГАТ-9.
ЦП: 65C802 (умеет 6502, 65C02 и 65C816, распиновка 6502).
Частота: стандарт 1.021МГц, турбо 2.8 МАХа и 3.5 МАХа.
Операция: копирование блока памяти и заполнение блока памяти константой.
72244
Очень интересная таблица, показывающая хотя бы в частном случае разницу между 6502 и 65816. Да и 6502 – тоже достаточно загадочный для меня, например, процессор. Известно, что по средней скорости в тестах при частоте 1 МГц он вполне сравним с 8080 на 2,5 МГц (часто даже быстрее) или даже с Z80 на частотах больше 3 МГц. А вот копирование и заполнение блоков памяти – слабая сторона 6502, так как нет ни спец. команд для этого (как у Z80), ни полноценных стековых операций, использующих всё адресное пространство, а не только нулевую страницу.
Подскажите, пожалуйста, подробности, как вы тестировали. Можно ли увидеть сами тестовые фрагменты на ассемблере? Данные по скорости достаточно загадочные – например, не совсем понятно, как реализованы первые два варианта теста (где скорость невысокая) – после копирования каждого байта идут операции организации цикла или всё же цикл в какой-то степени развёрнут? А в быстрых вариантах используются стековые команды (Push)? (тогда копирование возможно только в нулевой странице?)
Вообще, насколько я могу судить, наиболее интересно классическое копирование блоков памяти с произвольного адреса на произвольный адрес (на всем адресном пространстве, конечно) в развёрнутых циклах (обычно копируются фрагменты какой-то определенной длины – скажем, при выводе на экран, и программисты все равно стараются развернуть цикл, насколько возможно), а также наиболее быстрые способы (как у вас в таблице) – с нахождением данных или их адресов прямо в коде (типа LXI/PUSH для 8080) и опять же развернутыми циклами. Хорошо бы также указать, сколько тактов нужно на команды организации циклов (до 256 повторений и больше 256) – тогда можно добавлять их к тактам развернутых циклов и получить точные данные для любого числа повторений одинаковых цепочек команд внутри цикла.
LeoN65816
05.05.2020, 23:59
Здесь (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002428&viewfull=1#post1002428) обновлённые данные.
Да и 6502 – тоже достаточно загадочный для меня, например, процессор.
Очень простой и шустрый процик. А 65816 еще лучше и вкуснее. Это как Z80 является улучшенной версией i8080, так и 65816 является улучшенной версией 6502, но намного значительнее улучшенной про сравнению Z80/i8080. Даже был разработан еще более продвинутый 32-битный 65832, но, к сожалению, он так и не выпускался...
Известно, что по средней скорости в тестах при частоте 1 МГц он вполне сравним с 8080 на 2,5 МГц (часто даже быстрее) или даже с Z80 на частотах больше 3 МГц.
А если i8080 и Z80 дать прикурить на 1 МГц, то будут ли они шустрее, чем 6502 на той же частоте?
А если 6502 дать прикурить на 2.5 МГц или 3 МГц, то будет ли он шустрее, чем i8080 или Z80 на той же частоте?
Таблица (https://zx-pk.ru/threads/30199-sravnenie-skorosti-kopirovaniya-ozu-raznymi-kamnyami-i-evm.html?p=1002428&viewfull=1#post1002428) и видео (https://yadi.sk/d/iJmte9GMAMz9iA) всё наглядно показывают. Так что вывод совершенно очевиден!!!
А вот копирование и заполнение блоков памяти – слабая сторона 6502, так как нет ни спец. команд для этого (как у Z80)
Я бы так не судил. У 6502 подпрограмма копирования блока памяти работает быстрее (16 такт/байт, а если совсем точнее: 16 + (5+5+5+3)/256 = 16.0703125 такт/байт), чем инструкция копирования блока памяти у Z80 (LDIR: 21 такт/байт). Предвижу вопли спектрумистов: "Ну как же? А LDI нам даёт 16 тактов, а не 21!". На что еще раз обращу внимание: копирование блока памяти (да хоть 64КиБ!!!), а не одиночного байта одной инструкцией LDI!
Ну а заполнение блока памяти еще шустрее - 11 такт/байт (точнее 11 + (5+5+3)/256 = 11.05078125 такт/байт).
65816 имеет инструкции копирования блока памяти MVN/MVP - полный аналог LDIR/LDDR у Z80, только втрое (!!!) шустрее - 7 такт/байт против 21 у Z80. Вообще-то даже 7 такт/байт - это медленно... Можно было бы уложиться и в 3 такт/байт!
Подскажите, пожалуйста, подробности, как вы тестировали. Можно ли увидеть сами тестовые фрагменты на ассемблере? Данные по скорости достаточно загадочные – например, не совсем понятно, как реализованы первые два варианта теста (где скорость невысокая) – после копирования каждого байта идут операции организации цикла или всё же цикл в какой-то степени развёрнут?
zp00 = $00
zp02 = $02
zp04 = $04
zp10 = $10
Tick = $80
Pos = $90
Screen = $4000
SizeOfScreen = $4000
NMI_On = $C040
NMI_Off = $C020
.ba $F800
.cpu 65816
Reset
sei
cld
ldx #$FF
txs
sta $C100
sta $C111
sta $C122
sta $C133
sta $C144
sta $C058
sta $C05A
Main
bit NMI_Off
ldx #0
lda #" "
- sta $800,x
sta $900,x
sta $A00,x
sta $B00,x
sta $C00,x
sta $D00,x
sta $E00,x
sta $F00,x
inx
bne -
sta $C786
stz zp10
lda #$A
sta zp10+1
ldx #0
stx Pos
- lda Mes1,x
beq +
jsr Send
inx
bra -
+
stz zp10
lda #$C
sta zp10+1
ldx #0
stx Pos
- lda Mes2,x
beq +
jsr Send
inx
bra -
+
jsr Delay5s
; 65816 MVN
sta $C720
clc
xce
rep #$30
.al
.rl
lda #$FFFE
sta Tick
-
lda Tick
bne -
lda #64
sta zp04
-
lda zp04
and #3
tax
lda ColorTable,x
sta Screen
ldx #Screen
ldy #Screen+1
lda #SizeOfScreen-2
;----------------------
;main cycle, 7 ticks/byte
mvn 0,0 ;7
;----------------------
dec zp04
bne -
bit NMI_Off
sec
xce
.as
.rs
sta $C786
lda Tick+1
jsr PrintTwoDigits
lda Tick
jsr PrintTwoDigits
stz zp10
lda #$D
sta zp10+1
ldx #0
stx Pos
- lda Mes3,x
beq +
jsr Send
inx
bra -
+
jsr Delay5s
; 6502 MoveMemory
sta $C720
lda #$FF
sta Tick+1
lda #$FE
sta Tick
-
lda Tick
bne -
lda #64
sta zp04
MM01
lda zp04
and #3
tax
lda ColorTable,x
sta Screen
lda #1
sta zp02
ldy #0
sty zp00
lda #>Screen
sta zp00+1
sta zp02+1
lda #>SizeOfScreen
sta zp04+1
;----------------------
;main cycle, 16 ticks/byte
-
lda (zp00),y ;5
sta (zp02),y ;6
iny ;2
bne - ;3
;----------------------
inc zp00+1 ;5
inc zp02+1 ;5
dec zp04+1 ;5
bne - ;3
dec zp04
bne MM01
bit NMI_Off
sta $C786
lda Tick+1
jsr PrintTwoDigits
lda Tick
jsr PrintTwoDigits
stz zp10
lda #$E
sta zp10+1
ldx #0
stx Pos
- lda Mes4,x
beq +
jsr Send
inx
bra -
+
jsr Delay5s
; 6502 FillMemory
sta $C720
lda #$FF
sta Tick+1
lda #$FE
sta Tick
-
lda Tick
bne -
lda #64
sta zp04
FM01
ldy #0
sty zp00
lda #>Screen
sta zp00+1
lda #>SizeOfScreen
sta zp04+1
lda zp04
and #3
tax
lda ColorTable,x
;----------------------
;main cycle, 11 ticks/byte
-
sta (zp00),y ;6
iny ;2
bne - ;3
;----------------------
inc zp00+1 ;5
dec zp04+1 ;5
bne - ;3
dec zp04
bne FM01
bit NMI_Off
sta $C786
lda Tick+1
jsr PrintTwoDigits
lda Tick
jsr PrintTwoDigits
jsr Delay5s
jsr Delay5s
jmp Main
ColorTable .by 0, $55, $AA, $FF
Delay2s
bit NMI_Off
stz Tick
stz Tick+1
bit NMI_On
-
lda Tick
cmp #100
bne -
rts
Delay5s
bit NMI_Off
stz Tick
stz Tick+1
bit NMI_On
-
lda Tick
cmp #250
bne -
rts
PrintTwoDigits
pha
lsr
lsr
lsr
lsr
jsr PrintDigit
pla
and #15
jsr PrintDigit
rts
PrintDigit
tax
lda HexDigit,x
jsr Send
rts
Send
ldy Pos
sta (zp10),y
inc Pos
rts
; .PETSCII
HexDigit
; .tx "0123456789ABCDEF"
.db $B0, $B1, $B2, $B3, $B4, $B5, $B6, $B7
.db $B8, $B9, $C1, $C2, $C3, $C4, $C5, $C6
Mes1
; .tx "Filling 64 screens 256x256x4colors (1MB) in NMI ticks:"
.db $C6, $49, $4C, $4C, $49, $4E, $47, $A0
.db $B6, $B4, $A0, $53, $43, $52, $45, $45
.db $4E, $53, $A0, $B2, $B5, $B6, $58, $B2
.db $B5, $B6, $58, $B4, $43, $4F, $4C, $4F
.db $52, $53, $A0, $A8, $B1, $CD, $C2, $A9
.db $A0, $49, $4E, $A0, $CE, $CD, $C9, $A0
.db $54, $49, $43, $4B, $53, $BA
.db 0
Mes2
; .tx "65816 MVN instruction (7 clocks/byte) - $"
.db $B6, $B5, $B8, $B1, $B6, $A0, $CD, $D6
.db $CE, $A0, $49, $4E, $53, $54, $52, $55
.db $43, $54, $49, $4F, $4E, $A0, $A8, $B7
.db $A0, $43, $4C, $4F, $43, $4B, $53, $AF
.db $42, $59, $54, $45, $A9, $A0, $AD, $A0
.db $A4
.db 0
Mes3
; .tx "6502 MoveMemory Sub (16 clocks/byte) - $"
.db $B6, $B5, $B0, $B2, $A0, $CD, $4F, $56
.db $45, $CD, $45, $4D, $4F, $52, $59, $A0
.db $D3, $55, $42, $A0, $A0, $A8, $B1, $B6
.db $A0, $43, $4C, $4F, $43, $4B, $53, $AF
.db $42, $59, $54, $45, $A9, $A0, $AD, $A0
.db $A4
.db 0
Mes4
; .tx "6502 FillMemory Sub (11 clocks/byte) - $"
.db $B6, $B5, $B0, $B2, $A0, $C6, $49, $4C
.db $4C, $CD, $45, $4D, $4F, $52, $59, $A0
.db $D3, $55, $42, $A0, $A0, $A8, $B1, $B1
.db $A0, $43, $4C, $4F, $43, $4B, $53, $AF
.db $42, $59, $54, $45, $A9, $A0, $AD, $A0
.db $A4
.db 0
NMI_Native
inc Tick
rti
NMI
inc Tick
bne +
inc Tick+1
+
rti
IRQ
rti
.ba $FFEA
.wo NMI_Native
.wo 0
.wo IRQ
.ba $FFFA
.wo NMI
.wo Reset
.wo IRQ
А в быстрых вариантах используются стековые команды (Push)?
Да. Я же расписал аналог от Z80.
(тогда копирование возможно только в нулевой странице?)
Разумеется (только не в нулевой, а в первой). Однако, 65816 умеет полностью 64 КиБ.
Lethargeek
06.05.2020, 13:40
У 6502 подпрограмма копирования блока памяти работает быстрее (16 такт/байт, а если совсем точнее: 16 + (5+5+5+3)/256 = 16.0703125 такт/байт), чем инструкция копирования блока памяти у Z80 (LDIR: 21 такт/байт). Предвижу вопли спектрумистов: "Ну как же? А LDI нам даёт 16 тактов, а не 21!". На что еще раз обращу внимание: копирование блока памяти (да хоть 64КиБ!!!), а не одиночного байта одной инструкцией LDI!
а что, кто-то запрещает блок копировать цепочкой из ldi?
не говоря уже о стековых извращениях
Ну а заполнение блока памяти еще шустрее - 11 такт/байт (точнее 11 + (5+5+3)/256 = 11.05078125 такт/байт).
то есть вдвое медленнее z80
Прогнал Basic-тесты на реальном железе: БК 0010 и БК 0011М. Результаты БК 0010 немного отличаются от тех, что в таблице (насколько я понял, они получены из эмулятора). БК 0011М в таблице не было, так что встречайте новичка :)
Таблица БК 0010 и 0011 (https://www.icloud.com/numbers/0N6DOfuHCJ-nRdwMVNnCgOb8g#BK0011-Basic-tests)
Спасибо за таблицы по скорости реального БК, они очень важны для пополнения общей таблицы скорости Бейсиков (для БК там до сих пор были в основном данные с эмуляторов, причём я их корректировал в соответствии с предполагаемой разницей между эмулятором и реалом, но все равно получилось быстрее :).
И теперь мы можем разгадать одну из загадок БК – насколько все же в среднем БК-0011М быстрее, чем БК-0010? А заодно и другую интереснейшую тайну – насколько программы в ПЗУ были быстрее, чем в ОЗУ.
Сравнение Бейсика-87 в ОЗУ дает преимущество в скорости БК-0011М над БК-0010-01 всего в 13,5% (если усреднить преимущества по 8 тестам ВМ1-ВМ8), с разбросом примерно от -2 до +17% (однако, из-за невысокой точности измерений могут быть ошибки в несколько процентов, но средний показатель должен быть ближе к реальности). Причем в тесте ВМ7 (вроде бы работа с массивами) показатели странные – БК-0011 даже медленнее на 2%, чем БК-0010. Нет ли здесь ошибки в таблице? Если не учитывать ВМ7, то среднее преимущество БК-0011М над БК-0010 в Бейсике-87 будет 15,5%, и это близко к данным по другим тестам. Однако показатели Бейсика, конечно, более универсальны и точны в качестве усредненных, поскольку в этих тестах выполняется множество самых разных машинных команд в разных сочетаниях.
А вот сравнение Бейсиков-86, расположенных в ПЗУ дает преимущество БК-0011М над БК-0010-01 ровно в 30%, практически равное разнице в тактовой частоте. То есть в ПЗУ процессор, судя по всему, работает почти без задержек от контроллера памяти и дисплея, и программы выполняются намного быстрее.
Наконец, по данным для Бейсика-86 в ПЗУ и ОЗУ (дисковый) мы можем легко вычислить разницу в быстродействии программ в ПЗУ и ОЗУ БК-0011М (для БК-0010, к сожалению, таких данных нет) – она составляет в среднем 31,5%, в пользу ПЗУ, конечно.
Ну и ещё один вывод, сделанный уже давно, но теперь подтверждаемый данными с реального ПК – насколько офигительным был Бейсик-85/87, загружавшийся в ОЗУ, и как жаль, что его скорость не перешла к штатному Бейсику-86 для БК-0010-01 и БК-0011 – а ведь в ПЗУ преимущество 87-го над 86-м было бы еще больше – еще почти на треть! В одинаковых условиях (когда оба Бейсика в ОЗУ) при сложных вычислениях (ВМ8) Бейсик-87 быстрее Бейсика-86 аж в 11 раз! Видимо, такая же разница была бы и при работе в ПЗУ. К сожалению, такой шикарный задел разработчики добровольно, по неведомым причинам, взяли и перечеркнули. Что же произошло – вильнюсцам не хватило 24 Кб ПЗУ (+8 Кб еще и штатное БК-шное ПЗУ с драйверами) для размещения двух вариантов подпрограмм вещественных вычислений? Или настолько был высок пиетет перед американо-японскими разработчиками систем MSX/MSX2, которые на несколько лет раньше наступили на те же грабли – включили в Бейсик-MSX только процедуры вычислений с двойной точностью, работавшие в разы медленнее вычислений с одинарной точностью? И не слишком ли велика разница по скорости между вычислениями одинарной и двойной точности (почему сразу в 11 раз!?, хотя с учетом разного подхода к вычислению квадратов – порядка 7 раз, но это тоже немало :).
И почему же, видя, какое вышло безобразие, разработчики вильнюсского Бейсика или его заказчики не выпустили какую-то исправленную версию (и не только в плане скорости вещественных вычислений, но и проблем со строковыми функциями и т.д.)? А если еще более глобально, то затея с полукомпилятором для БК, конечно, при всей необычности и крутизне в плане скорости, была очень сомнительна для БК (о чём критики говорили и тогда, в конце 80-х) – наверное, более разумно было бы сделать интерпретатор с максимальной производительностью, не отъедающий половину памяти для хранения шитого кода: скажем, просто преобразовывать сразу после ввода строки команды бейсика во внутренний формат – хотя бы с числами не в текстовом виде, а с двоичным внутренним представлением, еще лучше вместо функций и операторов адреса подпрограмм, вместо имен переменных их адреса в памяти, а вместо алгебраической записи выражений обратную бесскобочную – тогда получился бы тот же шитый код с такой же высокой скоростью исполнения, но без дублирования (надеюсь, при выводе листинга на экран или редактировании строк можно было бы восстановить их первоначальный текстовый вид – хотя бы приблизительно ;) Тем более что и со скоростью у версии 86 были очень большие проблемы (за исключением целых чисел, конечно). Правда, у тех же MSX скорость вычислений тоже низкая, а также и у ряда других популярных моделей – ZX Spectrum, Atari (причем оба с одинарной точностью расчетов), TI-99/4A... У Бейсика-ДВК тоже низкая… Даже можно было просто адаптировать старинный Бейсик-11 (как адаптировали Фокал), и это уже дало бы очень хорошую скорость и функциональность (хотя, судя по всему, требовалась совместимость со стандартом MSX, который дальше использовался и на других массовых школьных ПК – УКНЦ и Корвете). Кстати, на УКНЦ-то скорость все же исправили (по крайней мере, в версии вильнюсского бейсика 1988 года) – он работает так же быстро, как Бейсик-87 (интересно, исправили ли другие недостатки БК-шного Бейсика-86 – неправильную обработку строк и т.д.)
LeoN65816,
Благодарю за разъяснения и листинг программы. То есть в универсальном случае копирования блоков памяти во всем адресном пространстве развернутый цикл имеет длину 13 тактов – это до 76,7 Кбайт/с при частоте 1,021 МГц (я, как человек, давно и близко имеющий отношение к компьютерам, всегда под К подразумеваю 2 в 10 степени – думаю, так привычнее для всех ретрокомпьютерщиков). Команда цикла BNE здесь занимает всего 3 такта, правда для числа повторений не больше 256. Соответственно, заполнение произвольной области памяти константой имеет развернутый цикл 8 тактов – при достаточно большой длине такой цепочки скорость стремится к 124,6 Кбайт/с. На организацию цикла также требуется всего 3 такта.
Конечно, если сравнивать эти показатели с 8080 (как наиболее актуального для советских домашних ПК) и Z80 (популярные английские и японские ПК), 6502 очень сильно проигрывает – у 8080 на частоте 2,5 МГц (Корвет, Орион-128) максимальная скорость копирования через стек почти в 2 раза больше (около 150 Кбайт/с, насколько я помню), без стека – почти в 1,5 раза больше (чуть больше 100 Кбайт/с), а скорость заполнения памяти через стек почти в 4 раза (!) больше – около 450 Кбайт/с (все данные, конечно, с развёрнутыми циклами, которые, однако, не всегда применимы и дают большое преимущество в основном на ПК со «столбцовой» организацией видеопамяти – типа «Вектора-06Ц», «Специалиста» или «Ориона-128»). У компьютеров на Z80 предельные скорости копирования и заполнения, естественно, ещё выше – хотя бы за счет более высокой частоты (копирование стеком – примерно до 250 Кбайт/с, без стека – более 200 Кбайт/с, заполнение памяти через стек – до 600 с лишним Кбайт/с, в 5 раз быстрее, чем у 6502 на 1 МГц). У БК-0010 максимальная скорость копирования тоже почти вдвое выше – порядка 136 Кбайт/с.
Вторые варианты («Развернутый цикл») в таблице для 6502 получились почти вдвое и втрое быстрее – и это очень хорошие показатели, сравнимые с 8080, однако не понятно, как их применять на практике, если используется стековая команда, то есть копируется только в стек или из стека, который не выходит за пределы одной страницы (256 байт) в начале адресного пространства. А что будет, если всё же использовать не Push, а обычные команды пересылок, чтобы задействовать всё адресное пространство – насколько упадет скорость в этих двух быстрых вариантах?
Как вообще можно было ускорить, скажем, вывод на экран у таких ПК, как «Агат», Apple II, Acorn Electron и т.д. (без аппаратных спрайтов, скроллингов и т.д.) – использовали копирование из стека или нулевой страницы (к которой доступ быстрее)? Или хватало и таких небольших скоростей? Особенно у Яблока (а как у Агата в агатовских режимах?) – у него строчная организация видеопамяти (у Электрона и BBC Micro – вроде бы строчно-столбцовая, когда внутри знакоместа память растет по столбцам, а между знакоместами – по строкам, зато объем видеопамяти до 20 Кбайт). Насколько быстро работал с графикой Агат, имевший видеорежимы с 16 Кбайтами видеопамяти (у Apple II в обычном режиме – вроде всего 7.5 Кбайт).
Процессор 65816, конечно, был намного быстрее, чем 6502, за счет 16-битности, дополнительных команд и большей частоты – я, например, читал, что Apple II GS (65816 на 2,8 МГц) был во многих тестах быстрее, чем классический Macintosh (68000 на 8 МГц, но эффективная около 5 МГц).
Скорость исполнения команды MOV с разными типами адресации на БК 0010 и БК 0011М (частоты 3, 4, 6 МГц, память медленная штатная и быстрая статическая в контроллере дисковода).
Таблица (https://www.icloud.com/numbers/0WEYWiEX_b0yneUrl3aGk_udw#BK0010-11-instructions-speed)
Спасибо за очень важную таблицу, показывающую время выполнения разных машинных команд на разной частоте и с разной памятью для 0010 и 0011М. Хотелось бы уточнить – а скорость выполнения команд в ПЗУ равна скорости в быстрой статической памяти (по логике вроде так)? С этим всегда была какая-то путаница – например, для БК-0010 в документации указывалась максимальная производительность 300 тыс. оп/с, но при работе в ОЗУ она меньше – 250 тыс.оп/с (по некоторым источникам даже 229), а при работе в ПЗУ, получается, все же больше – 375 тыс.оп/с? Что тогда означали эти 300?
И тогда вопрос по скорости БК-0011М – а у неё какая максимальная производительность? По таблице получается, что при выполнении программы в ПЗУ – 500 тыс. оп/с, а для ОЗУ, судя по таблице – в 2 раза меньше (!!!), всего 250 тыс. оп/с – точно также, как и у БК-0010? Или есть какие-то команды (NOP и т.п. ), которые на БК-0011М все же требуют меньше 16 тактов при выполнении в ОЗУ?
И еще вопрос по таблице: большинство команд при работе в ОЗУ требуют на БК-0011М больше тактов, чем на БК-0010, но почему часть команд выполняется за одинаковое число тактов, а пара команд на БК-0011М требует даже меньше тактов (например, MOV R1, (R2)), чем на 0010? Нет ли ошибок в таблице?
Ошибок в таблице нет. Разное число тактов получается потому, что помимо центрального процессора ВМ1 к памяти также обращается видеоконтроллер ВП1-037, который заставляет процессор ожидать несколько тактов. Поэтому играет роль соотношение частот ВМ1 и ВП1-037, а также скорость отклика памяти. Видеоконтроллер работает на 6 МГц, а процессор на 3, 4 или 6 МГц. При удачном соотношении параметров команда выполнится без торможений, при неудачном ВП1-037 будет затормаживать процессор несколько раз в течение исполнения команды.
Про скорость отклика ПЗУ – по-моему она медленней, чем статическое ОЗУ. Я проверял так: копировал подпрограмму записи на магнитофон из ПЗУ в ОЗУ, запускал и замерял частоту тона.
Провёл новые замеры Basic-тестов с точностью 1/30 секунды (снимал на видео и потом по кадрам отслеживал когда появляются надписи "START" и "STOP"). Результаты немного отличаются - во время прошлых тестов в моей БК 0011м стоял кварц на 12.288 МГц (вот с какой целью (https://zx-pk.ru/threads/30134-izmenenie-kadrovoj-chastoty-bk-0011m-s-48-8gts-na-50gts.html)), а потом я вернул стандартный кварц на 12 МГц, так что произошло некоторое замедление.
Ссылка на таблицу результатов прежняя (https://www.icloud.com/numbers/0N6DOfuHCJ-nRdwMVNnCgOb8g#BK0011-Basic-tests)
73055
Быстродействие Союз-Неон ПК-11/16 в сравнении с БК 0011:
https://imageup.ru/img236/3651977/soyuz-neon-speed-test.png
Скорость исполнения команды MOV с разными типами адресации на БК 0010 и БК 0011М (частоты 3, 4, 6 МГц, память медленная штатная и быстрая статическая в контроллере дисковода). Таблица (https://www.icloud.com/numbers/0WEYWiEX_b0yneUrl3aGk_udw#BK0010-11-instructions-speed)Дополнил таблицу новыми данными: процессор 6 МГц, команды и данные в быстрой (статической) памяти контроллера FDD/HDD.
Для примера:
инструкция ADD (R1),R2 выполняется за 3,33 микросекунды (20 тактов, 300'000 инструкций в секунду),
инструкция ADD @M(R1),@M(R2) выполняется за 10 микросекунд (60 тактов, 100'000 инструкций в секунду).
По оси Y время исполнения инструкций в микросекундах, по оси X сложность методов адресации. Разные цвета - разные конфигурации БК (частота процессора, тип памяти):
https://imageup.ru/img249/3683851/add-speed.png
Дополнил таблицу новыми данными
Добавь еще УКНЦ в таблицу, будет интересно.
Добавь еще УКНЦ в таблицу, будет интересно.А где посмотреть точные результаты тестов УКНЦ?
А где посмотреть точные результаты тестов УКНЦ?
Расчёт точного времени выполнения команд различными процессорами архитектуры PDP-11 (https://zx-pk.ru/threads/14702-raschjot-tochnogo-vremeni-vypolneniya-komand-razlichnymi-protsessorami-arkhitektury-pdp-11.html)
Sergei Frolov
09.12.2020, 20:19
Добавь еще УКНЦ в таблицу, будет интересно.
И КЦГД
axe_chita
04.10.2022, 11:28
Продолжаем разговор. ;)
Тестирование производительности MSX2 и компилятора MSX Basic Nestor Basic v1.11. Стенд - эмулятор WebMSX, платформа Yamaha YIS805/R2. Затраченное время снималась используя средства MSX Basic переменную TIME увеличивающуюся на единицу каждое прерывание VDP. В PAL это 50 раз в секунду, в NTSC это 60 раз в секунду.
Первый результат (справочно): запуск под интерпретатором командой RUN.
Второй результат: запуск под компилятором командой call RUN (_RUN)
BM1
2,05 секунд
0,2834 секунд
BM2
6,2833(3) секунд
0,2834 секунд
BM3
17,7833(3) секунд
1,55 секунд
BM4
19,35 секунд
1,567 секунд
BM5
20,383(3) секунд
1,583 секунд
BM6
33,716(6) секунд
2,684 секунд
BM7
47,66(6) секунд
3,334 секунд
BM8
229,95 секунд
10,13 секунд
На Solid Soft V-BASIC (VBC) проверить?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot