Тест на быстродействие микропроцессораРефераты >> Программирование и компьютеры >> Тест на быстродействие микропроцессора
mov t2,bx
end;
Time1:=t1/(65536*18.2);
time2:=t2/(65536*18.2);
writeln('Время выполнения сложения на Pascal: ',(time2-time1):6:12);
end;
Procedure Add_Asm(N:word);
var i:word;
Proisv:integer;
Begin
t1:=0;
t2:=0;
asm
in al,40h
mov ah,al
in al,40h
xchg ah,al
mov t1,ax
xor ax,ax
xor dx,dx
@@q: {Выполняем сложение}
inc dx
add ax,dx
loop @@q
in al,40h
mov cl,al
in al,40h
mov ch,al
mov t2,cx
end;
Time1:=t1/(65536*18.2);
time2:=t2/(65536*18.2);
writeln('Время выполнения сложения на Assembler: ',(time2-time1):6:12);
end;
{=================================================================}
Procedure Mul_Pascal(N:word); {Умножение на Assembler}
var i:word;
Proisv:integer;
Begin
t1:=0;t2:=0;
asm
in al,40h
mov bl,al
in al,40h {Считываем начальное значение тиков от таймера}
mov bh,al
mov t1,bx
end;
for i:=1 to N do
proisv:=proisv*i;
asm
in al,40h
mov bl,al {Конечное количество тиков}
in al,40h
mov bh,al
mov t2,bx
end;
Time1:=t1/(65536*18.2);
time2:=t2/(65536*18.2);
writeln('Время выполнения умножения на Pascal: ',(time2-time1):6:12);
end;
Procedure Mul_Asm(N:word);
var Proisv:integer;
Begin
t1:=0;
t2:=0;
asm
in al,40h
mov bl,al
in al,40h {Считываем начальное значение тиков от таймера}
mov bh,al
mov t1,bx
xor ax,ax
xor bx,bx
@@q: {Выполняем сложение}
inc dx
mul dx
loop @@q
in al,40h
mov bl,al
in al,40h {Конечное количество тиков}
mov bh,al
mov t2,bx
end;
Time1:=t1/(65536*18.2);
time2:=t2/(65536*18.2);
writeln('Время выполнения умножения на Assembler: ',(time2-time1):6:12);
end;
Begin
clrscr;
{Определяем вид операции}
textcolor(11);
Writeln('Сделайте выбор операции и нажмите клавишу ENTER:');
Writeln('1) Сложение');
Writeln('2) Умножение');
Readln(vid);
textcolor(10);
Case vid of
1: begin
write('Введите сумму ряда, не более 2-х байт (65535: )');
Readln(NN);
Writeln;
textcolor(3);
Add_Pascal(NN);
Add_Asm(NN);
end;
2: begin
write('Введите произведение ряда, не более 2-х байт (65535: )');
Readln(NN);
Writeln;
textcolor(3);
Mul_Pascal(NN);
Mul_Asm(NN);
end;
end;
readln;
End.
§7. Описание программы
Программа написана на алгоритмическом языке Pascal. Состоит из двух блоков. В каждом блоке две процедуры: первая – это выполнение операции на языке Pascal, а вторая – выполнение этой же операции на языке Assembler.
Первый блок.
Состоит из двух процедур, которые выполняют сложение на языке Pascal и Assembler. Производится суммирование ряда чисел. Измерение времени происходит с помощью микросхемы таймера 8253. Сначала считываем начальное число тиков, затем выполняем операцию и снова считываем число с микросхемы. Разница, разделенная на произведение 65535*18,2 и будет временем выполнения операции.
asm
in al,40h
mov bl,al
in al,40h {Считываем начальное значение тиков от таймера}
mov bh,al
mov t1,bx
end;
{Выполняем операцию}
asm
in al,40h
mov bl,al
in al,40h {Конечное количество тиков}
mov bh,al
mov t2,bx
end;
Time = t2-t1/(65536*18.2); {ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИИ}
Второй блок.
Аналогичен первому блоку, с той лишь разницей, что здесь выполняется другая операция – вычисление факториала.
§8. Экспериментальные данные
Для проведения эксперимента вводятся числа:
10;100;1000;5000;10000;15000;20000;25000;30000;35000;50000;60000;65000;
Данные вводятся как для суммирования ряда, так и для вычисления факториала.
§9. Полученные результаты
Все вычисления выполнялись на микропроцессоре AMD Athlon 1000 MHz
Средняя температура процессора при вычислении 64 °С
Вычисление суммы ряда.
СЛОЖЕНИЕ | ||
Введенное знвчение |
Pascal |
Assembler |
10 |
1,34143E-05 |
1,84447E-05 |
100 |
1,67679E-05 |
1,34143E-05 |
1000 |
4,19198E-05 |
2,17983E-05 |
5000 |
0,000157618 |
5,19805E-05 |
10000 |
0,000301822 |
9,22234E-05 |
15000 |
0,000444349 |
0,000132466 |
20000 |
0,00059023 |
0,000171033 |
25000 |
0,000734434 |
0,000211276 |
30000 |
0,000875284 |
0,000249842 |
35000 |
0,001021165 |
0,000290085 |
50000 |
0,001483959 |
0,000410814 |
60000 |
0,001742185 |
0,00050136 |
65000 |
0,001884712 |
0,000528189 |