Быстродействие: пустой цикл
Товарищ 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 циклов
Программы
МК56
Программа для настольной «Электроники МК 56» (предложена AtH, время измерялось по внешнему секундомеру):
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 вызван дополнительным уровнем абстракции: программа исполняется на интерпретаторе UserRPL, тот, в свою очередь, на эмуляторе процессора Saturn, который, наконец, работает на реальном процессоре. Аналогичная проблема у Форта для МК-161.
Тест пустого цикла для 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
Программу и результаты измерений предоставил С. Тарасов.
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 циклов/сек.
blog comments powered by Disqus