В принципе - не важно, там можно использовать любые прерывания с чётким интервалом ( чем длиннее интервал - тем точнее измерения ). В конкретной реализации используется интервал между двумя прерываниями таймера по вектору 0100.
Смысл в том, что если за одно и то же время выполняется 7'585 x NOP, 2'361 x RTI и 850 x IOT ( + RTI ), то легко подсчитать, что:
а если время от начала выборки кода IOT до запуска блока прерываний принять за 1 x NOP, то время входа в прерывание ( т.е. записи PC и PSW в стек и чтения их из вектора ) составляет 4.7 x NOPКод:RTI == 3.2 x NOP IOT ( + RTI ) == 8.9 x NOP IOT == 5.7 x NOP
Также можно отдельно посчитать и время приёма по шине адреса вектора аппаратного прерывания ( в моём случае получается 3.3 x NOP ).
Хотя, если умножить 50 Hz таймера на 7'585 NOPов за тик - получим 380'000 NOP/сек, что в точности равно быстродействию 1801ВМ1 на ДВК-1 5.3 МГц.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Кстати, на ВМ2 NOP медленнее, чем MOV Rx,Rx.
---------- Post added at 18:50 ---------- Previous post was at 18:43 ----------
Кстати, сравнил результаты двух тестов:
На UKNCBTL:
TSSPD:
NOP - 9394
MOV Rx,Rx - 13308
IRQ:
NOP - 9380
MOV Rx,Rx - 13275
Тогда как на EmuStudio:
TSSPD:
NOP - 19948
MOV Rx,Rx - 19948
IRQ:
NOP - 33397
MOV Rx,Rx - 34039
На лицо явное неправильное вычисление числа выполненных команд, когда этих команд успевает выполнится много.
Типа, когда памяти не хватает и цикл идёт на второй заход - начинает врать.
Второй заход по-любому уменьшает точность, поэтому даже после исправления программы лучше его избегать.
Нужно выгрузить из памяти всё лишнее ( SET SL OFF сделать и т.п. ) - чтобы в буфере команд стало больше 20 тыс. слов свободного места.
Что-то не могу заставить тест врать.
Новый вариант теста IRQ v1.2 выводит в первой позиции количество заходов в буфер команд:
Код:.RU IRQ IRQ - Check time of IRQ Service & RTI - v1.2 Memory Top: 137554 1: CPU Speed: 146 x RESET 1: CPU Speed: 7'586 x NOP 1: CPU Speed: 7'585 x MOV R0,R0 1: CPU Speed: 3'035 x MOV R2,(R3) 1: CPU Speed: 2'361 x RTI 1: CPU Speed: 850 x IOT 1: CPU Speed: 850 x TRAP 1: CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 1: CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI 1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT 1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP 1: CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064 Program completed. .
Последний раз редактировалось Patron; 20.02.2013 в 20:09.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)