Лекция: Представить алгоритм определения производительности работы ЦП по тестируемой команде
Программа измерения производительности и быстродействия компьютера.
Описание алгоритма.
Если не вдаваться в подробности, то суть алгоритма заключается в следующем: производится замер в одну секунду пустого цикла, а затем цикла, содержащего команду XOR. Производительность находится из пропорции количества пройденных пустых и полных циклов:
Полный цикл * Пустой цикл
Производительность = ---------------------------
Пустой цикл — Полный цикл
Быстродействие = --------------------
Производительность
Алгоритм.
1. Для того, чтобы замер получился точным, производим запрет всех прерываний кроме таймера.
2. Получаем и сохраняем для последующего использования адрес прерывания Int 8h.
3. Устанавливаем свой вектор прерывания таймера Int 8h.
4. Проверяем некоторую переменную, которая изменяется в собственном обработчике Int 8h, означающую запуск измерений.
5. После запуска измерений начинает работу цикл, который увеличивает на 1 счетчик пустых циклов.
6. После отсчета собственным обработчиком прерываний от таймера 18 тиков (18 тиков = 1 сек.), он передает управление циклу с командой XOR, который в свою очередь увеличивает на 1 счетчик полных циклов.
7. Когда проходит секунда, обработчик передает управление на подпрограмму вычисления производительности и быстродействия, которые вычисляются по вышеприведенным формулам.
Программа выдает результаты вычислений с точностью до сотой доли.
8. Затем восстанавливается старый адрес прерывания Int 8h и проис-
ходит выход в DOS.
///////////////ANOTHER metod
Алгоритм определения производительности по тестируемой комманде**chstota proceccorov
4. НАЧАЛО
5. Вводим частоту процессора тестируемого компьютера в МГц в переменную f
6. f := f*1000000
7. засекаем текущее время и переводим его в секунды, и сохраняем в переменной T1
8. В цикле от 1 до 1000000000 выполняем тестируемую команду.
9. засекаем время и переводим его в секунды, и сохраняем в переменной T2
10. находим TimeTest1 := T2 – T1
11. засекаем текущее время и переводим его в секунды, и сохраняем в переменной T3
12. Выполняем пустой цикл от 1 до 1000000000 (для определения времени выполнения цикла)
13. засекаем время и переводим его в секунды, и сохраняем в переменной T4
14. находим TimeTest2 := T4 – T3
15. находим число операций выполненных за 1 секунду Oper := 1000000000/(TimeTest1 – TimeTest2)
16. находим число тактов необходимое для выполнения команды: NumTakt := f/Oper
17. КОНЕЦ