Быстродействие: пустой цикл
Товарищ AtH предложил нам тест быстродействия, основанный на измерении времени выполнения пустых циклов. Однако, интерес представляют собой не только абсолютные величины, но и соотношение с тактовой частотой процессора, говорящее об эффективности программы (в случае ассемблера) или прошивки, на которой она выполняется.
Сводная таблица
Модель | Тактовая частота процессора, МГц (1) |
Пустых циклов в сек (2) |
Коэффицент использования (2)/(1) |
---|---|---|---|
Электроника МК 56 | 0,1 | 2,8 | 28,0 |
Электроника МК-161 | 22,0 | 2313,0 | 105,1 |
Форт-161, v1.0 | 22,0 | 52,0 | 2,4 |
CASIO ClassPad II (*) | ? | 1000,0 | ? |
DM42(*) питание от батареи | 24 | 1035,0 | 43,1 |
DM42(*) питание USB | 80 | 3000,0 | 37,5 |
HP 33E | ? | 3,6 | ? |
HP 35s | 4 | 25,4 | 6,35 |
HP 41CX (*) | 0,360 | 9,9 | 27,5 |
HP 50g (User RPL) | 75,0 | 757,0 | 10,0 |
HP 50g (System RPL) | 75,0 | 34482,8 | 459,8 |
HP 97 (*) | ? | 5,5 | |
HP Prime G2 | 528,0 | 272727,3 | 516,5 |
Sharp EL 9900G | ? | 2542 | |
Sharp PC g850 (Basic) | 8 | 1049 | 131,1 |
Sharp PC g850 (C) | 8 | 2460 | 307,5 |
TI-59 (*) | 0,225 | 3,6 | 16 |
TI-89 HW2 (*) | 12 | 142,9 | 11,9 |
TI-89 HW2 (Assembler) | 12 | 699051,0 | 58254,3 |
WANG 452 (*) | ? | 240,0 |
(*) - замер сделан для 3000 циклов
Относительно низкий результат HP 50g вызван дополнительным уровнем абстракции: программа исполняется на интерпретаторе UserRPL, тот, в свою очередь, на эмуляторе процессора Saturn, который, наконец, работает на реальном процессоре. Аналогичная проблема у Форта для МК-161.
Программы
МК56
Программа для настольной «Электроники МК 56» (предложена AtH, время измерялось по встроенным часам «Электроники МК-161»):
00.FL0 01.00 02.С/П
Результаты:
- 362,72 секунд для 1000 циклов = 2,8 циклов/сек
- 10907,81 секунд (3:01:47,81) для 30000 циклов = 2,75 циклов/сек
Частоту процессора в 100 КГц принимаем таковой для Б3-34 согласно вики.
МК-161
Программа, измеряющая пустые циклы на входном языке «Электроники МК-161» (предложена AtH):
00. Сх 01. 3 ВП 4 04. П0 05. 65535 10. П9 11. РРП 9050 14. FL0 14 16. РРИП 9050 19. ИП9 20. ↔︎ 21. - 22. ВП 2 /-/ 25. С/П 26. БП 00
Результат: 12,97 секунд для 30000 циклов = 2313 циклов/сек.
Обновление от 28/11/2015
00. Сх 01. 3 ВП 4 04. П0 05. 65535 10. РРП 9050 13. FL0 13 15. РРИП 9050 18. - 19. ВП 2 /-/ 22. С/П 23. БП 00
Результат: 12,98 секунд для 30000 циклов = 2311 циклов/сек.
DM42
Программа предложена Виталием Самуровым.
00 { 24-Byte Prgm } 01▸LBL "BB" 02 3000.00001 03 STO 00 04▸LBL 00 05 DSE 00 06 GTO 00 07 RTN 08 END
Результат (3000 циклов):
- питание от батареи: 2.9 секунды = 1035 циклов/сек.
- питание от USB: 1 секунда = 3000 циклов/сек.
HP 50g
Тест пустого цикла для HP 50g на основном входном языке User RPL (предложена С.Тарасовым)
«
TICKS
1 30000 START NEXT
TICKS
SWAP - B->R 8192 /
»
Результат: 39,64 секунд для 30000 циклов = 757 циклов/сек.
Тест пустого цикла для HP 50g на System RPL (предложена С.Тарасовым)
:: CLKTICKS 30000 BINT1 DO LOOP CLKTICKS SWAP bit- HXS>% % 8192 %/ ;
Результат: 0,87 секунд для 30000 циклов = 34482,8 циклов/сек.
HP 35s
Программа теста для HP 35s использует встроенный цикл с декрементом (предложена С.Тарасовым)
A001 LBL A A002 RPN A003 30000.00001 A004 STO Z A005 DSE Z A006 GTO A005 A007 RTN
Результат: 1182 секунд (19:41.790) для 30000 циклов (замер по секундомеру stopwatch из linux) = 25,4 цикла/сек.
Более полные испытания HP 35s также совпадают с полученной цифрой: Timing for HP 35s Calculator Instructions (PDF, англ.яз). См. также:
TI-59 (1977)
Программу и результаты измерений Guillaume Tello (личный сайт на англ. и франц. языках).
000 LBL A 002 3 0 0 0 STO 00 008 DSZ 0 008 012 R/S
Результат: 551 секунда (9:11) для 3000 циклов = 5,5 циклов/сек.
WANG 452 (1973)
Программу и результаты измерений Guillaume Tello. Калькулятор оснащен кварцем на 4 МГц, но реальная тактовая частота ниже, её величину требуется уточнить.
0000 3 0 0 0 STORE 0005 1 - 0007 SKIP IF X=0 0008 GOTO -3 0010 STOP END
Результат: 12,5 секунд для 3000 циклов = 240 циклов/сек.
HP 97
Программу и результаты измерений предоставил Guillaume Tello.
LBL B DSZ I GOTO B RTN LBL A 3000 STO I GOTO B
Результат: 844 секунды (14:48) для 3000 циклов = 3,6 циклов/сек.
HP 33E
Программу и результаты измерений предоставил Serguei_Tarassov.
ENTER 1 - g x>0 GTO 01 R/S
Запуск: GTO 00 1000 R/S
Результат: 276 секунд (4:36) для 1000 циклов = 3,6 циклов/сек.
HP 41CX
Программу и результаты измерений предоставил Guillaume Tello.
LBL BB 3000.00001 STO 00 LBL 00 DSE 00 GTO 00 RTN
Результат: 303 секунды (5:03) для 3000 циклов = 9,9 циклов/сек.
HP Prime G2
Программу и результаты измерений предоставил Ardo_79.
EXPORT PROG() BEGIN FOR X FROM 1 TO 3000000 DO END; END;
Результат: 11 секунд для 3 000 000 циклов = 272727,3 циклов/сек.
TI-89 (HW2)
Программы и результаты измерений предоставил Guillaume Tello.
test() Prgm For i,1,3000 EndFor EndPrgm
Результат: 21 секунда для 3000 циклов = 142,9 циклов/сек.
На ассемблере ($02000000 = 33 554 432)
move.l #$02000000,d0 .loop: subq.l #1,d0 bne.s .loop rts
Транслируется в
Exec "203c02000000538066fc4e750000"
Результат: 48 секунд для 33 554 432 циклов = 699 051 циклов/сек.
CASIO ClassPad II
Программу и результаты измерений предоставил Guillaume Tello.
For 1=>i to 3000 Next Stop
Результат: 3 секунды для 3000 циклов = 1000 циклов/сек.
Sharp PC g850
Программы и результаты измерений предоставил Ardo_79.
BASIC (встроенный входной язык)
10 FOR X=1 TO 30000 20 NEXT
Результат: 28,6 секунд для 30000 циклов = 1049 циклов/сек.
С (встроенный входной язык)
10 main() { 20 int x; 30 for(x=1;x<=30000;x++) {} 40 }
Результат: 12,2 секунд для 30000 циклов = 2460 циклов/сек.
Sharp EL 9900G
Программы и результаты измерений предоставил Ardo_79.
BASIC (встроенный входной язык)
FOR X,1,30000 NEXT
Результат: 11,8 секунд для 30000 циклов = 2542 циклов/сек.
Комментарии
Обновлённые данные
Permalink
Обновлённые данные по языку Каллисто для «Электроники МК-161» здесь.
Измерил вчерашний альфа-релиз 0.3.5a. В нём константа 256 занесена в RE, что немного увеличило быстродействие адресного интерпретатора по сравнению с предыдущим замером версии 0.3.2a. Также включил туда ваши замеры по HP 35s и HP 50g, спасибо!
Приятное открытие, что Каллисто смогла обогнать вдвое HP 35s — даже при том, что Форт был реализован поверх ЯМК, а не закрытого для нас машинного языка (низкий коэффициент использования, по вашей терминологии).
HP 50g, для статистики
Permalink
Замер по предложенной программе на моём HP 50g дал 37,73 секунды.
795 холостых циклов в секунду.
VER
4.20060919
МК-56 и HP 35s
Permalink
Исходный тест требует проведения 30000 циклов и предложен Джоном Джеймсом (John S James) из Беркли, Калифорния в журнале «Байт» за август 1980 г. (том 5 номер 8) на стр.114 в Листинге 5 под названием TIME-TEST. Сегодня я обновил данные по «Электронике МК-56», честно выполнив все 30000 циклов. По внешнему таймеру получилось 3:01:47,81 — удивительно точно 2,75 циклов в секунду. Извиняюсь, что подал дурной пример.
Можете провести полный тест HP 35s — выполнив все требующиеся 30000 циклов? К сожалению, у меня нет этой «железки» и самостоятельно её измерить не могу.
Сейчас HP 35s это единственный калькулятор, который из-за недостаточного количества проведённых циклов несколько выбивается из таблицы.
Добавил
Permalink
Добавил для 30000 и HP 35s. Если я не ошибся в предоставленных данные по частоте процессора 33 КГц, то по эффективности микрокода (прошивки) это чудо американской инженерной мысли 40-летней давности перекрывает всех с большим запасом.
Частота процессора у HP 35S
Permalink
Комментарий был перемещен и теперь находится здесь.
Sharp PC g850
Permalink
Результат: 8 МГц 28,6 секунд для 30000 циклов = 1049 циклов/сек.
Коэффициент использования - 131.125 ( BASIC )
8 МГц 12,2 секунд для 30000 циклов = 2460 циклов/сек.
Коэффициент использования - 307.5 ( Cи )
Sharp PC g850
Permalink
[quote=Ardo_79]Результат: 8 МГц 28,6 секунд для 30000 циклов = 1049 циклов/сек.
Коэффициент использования - 131.125 ( BASIC )
8 МГц 12,2 секунд для 30000 циклов = 2460 циклов/сек.
Коэффициент использования - 307.5 ( Cи )[/quote]
Спасибо! Не могли бы вы привести текст программ?
Sharp PC g850 текст программ
Permalink
BASIC
10 FOR X=1 TO 30000
20 NEXT
Си
10 main() {
20 int x;
30 for(x=1;x<=30000;x++) {}
40 }
Причем Си встроенный в Sharp PC g850
Новое измерение для «Электроники МК-161»
Permalink
Сергей, я улучшил программу для оценки быстродействия МК-161 «на холстом ходу», можно обновить её код?
00. Сх
01. 3 ВП 4
04. П0
05. 65535
10. РРП 9050
13. FL0 13
15. РРИП 9050
18. -
19. ВП 2 /-/
22. С/П
23. БП 00
Вот сегодняшнее измерение для МК-161, версия 1.20 от 08.07.14:
1 запуск 12,98 (подсветка вкл)
2 запуск 12,98 (подсветка вкл)
3 запуск 12,98 (подсветка вкл)
4 запуск 12,98 (без подсветки)
5 запуск 12,98 (без подсветки)
Итого 30000 циклов требует 12,98 секунд, то есть 2311 циклов/с
Обновил
Permalink
Обновил, только новый результат чуть хуже предыдущего.
Один тик таймера
Permalink
Спасибо. В прошлой версии инициализация занимала чуть больше времени. Возможно, таймер успевал «тикнуть» до первого замера — а сейчас первый «тик» происходит уже во время основного цикла. Это всё в пределах погрешности.
P.S. Сейчас измерил 300 тыс. циклов. Результат 129,45 c. 2317,5 циклов в секунду.
Sharp EL 9900G
Permalink
Результат: ? МГц 11,8 секунд для 30000 циклов = 2542 циклов/сек.
FOR X,1,30000
NEXT
Быстродействие Каллисто 1.0
Permalink
30000 циклов за 9 минут 37,23 с
Итого 577,23 с или 51,97 пустых циклов в секунду
Электроника МК-85
Permalink
Электроника МК-85 декабря 1993 (или января 1994)
Программа на 3000 циклов:
Запуск для Р0: S 0, EXE, EXE.
Время выполнения 89 секунд в обычном режиме и 17 секунд в турборежиме.
Здесь пишут,
А здесь пишут,
В общем, пока неясно, на какой частоте работает аппарат в турборежиме...
Итого, производительность в обычном режиме 33,7 циклов/с, коэфф использования (0,5 МГц) - 67,4. В турборежиме - 176,5 циклов/с, коэфф использования - (2,0/2,4 МГц) 88,2/73,5. Я думаю, различие эффективности норма/турбо связано с контроллером дисплея, имеющего свой независимый тактовый генератор.
Сайт
HP Prime G2 528 МГц
Permalink
HP Prime G2 528 МГц
3000000 циклов за 11 сек.