Ebs (Event Based Sampling)
Address Line Clockticks
Source
1 program Project1;
2
3 {$APPTYPE CONSOLE}
4
5 uses
6 SysUtils;
7
8 type Tarr = array [1..10000] of real;
9
10 var j: integer;
11 procedure sort(var a: Tarr; n: integer);
12
13 var done : boolean;
14 " jump,i,j: integer;"
15
16 " procedure swap(var p,q: real);"
17 var hold : real;
18
01:7178
19 202 begin
01:717E
20 181 hold:=p;
01:7189
21 142 p:=q;
01:7193
22 122 q:=hold
01:719E
23 288 end;
24
01:71A4
25 begin
01:71B0
26 jump:=n;
01:71B7
27 while jump>1 do
28 begin
01:71BE
29 jump:=jump div 2;
30 repeat
01:71CD
31 done:=true;
01:71CF
32 414 for j:=1 to n - jump do
33 begin
01:71E1
34 390 i:=j+jump;
01:71E7
35 3583 if a[j]>a[i] then
36 begin
01:71F2
37 324 " swap(a[j],a[i]);"
01:71FD
38 174 done:=false
39 end
40 end
01:71FF
41 572 until done
42 end
01:7211
43 end;
44
45 var mass: Tarr;
01:7280
46 2 begin
47
01:7298
48 120 for j:=1 to 10000 do mass[j]:= 10000-j;
01:72BE
49 " sort(mass, 100000);"
01:72CD
50 end.
51
Так
как операторы ввода/вывода занимают
большую часть времени выполнения
программы, операторы вывода были удалены,
а ввод был заменен автоматической
генерацией массива.
Как
показывает профилирование, программа
на Pascale выполняется
медленнее, чем на С. Наибольшее время
используется для выполнения процедуры
swap(),
так как число обменов элементов очень
велико. Возможно, описание этой процедуры
как встраиваемой ускорит выполнение
программы. Так же много времени занимают
операции сравнения элементов массива
(как было выяснено ранее, операции
обращения к элементам массива довольно
медленны) а также генерация элементов
массива.
1
Значение
параметра Sampling
Interval = 0,001 ms
8