Быстродействие: пустой цикл

| рубрика «Испытания» | автор site_editor

Товарищ 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 }
01LBL "BB"
02 3000.00001
03 STO 00
04LBL 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 циклов/сек.