Test_sub.Cpp
7,78% от 270 samples.
Address Line Clockticks Source
1 const unsigned Size = 1000;
2
3
4 void TestLoop(int nTimes)
01:0020 5 {
6 static int TestDim[Size];
7 int tmp;
8 int iLoop;
9
01:0038 10 while (nTimes > 0)
11 {
01:003E 12 nTimes --;
13
01:0047 14 iLoop = Size;
01:004E 15 3 while (iLoop > 0)
16 {
01:0054 17 2 iLoop -- ;
01:005D 18 3 tmp = TestDim[0];
01:0066 19 8 TestDim[0] = TestDim[nTimes];
01:0076 20 3 TestDim[nTimes] = tmp;
01:0083 21 2 }
01:0085 22 }
01:0087 23 } /* TestLoop */
24
25
26 void main()
01:00B0 27 {
01:00C8 28 TestLoop(Size / 10); // 100 * 1000 ?®?a®a??©
01:00D2 29 TestLoop(Size / 5); // 200 * 1000 ?®?a®a??©
01:00DF 30 TestLoop(Size / 2); // 500 * 1000 ?®?a®a??©
01:00EC 31 TestLoop(Size / 1); // 1000* 1000 ?®?a®a??©
01:00F9 32 }
Количество sample в процентах:
Address Line Clockticks Source
1 const unsigned Size = 1000;
2
3
4 void TestLoop(int nTimes)
01:0020 5 {
6 static int TestDim[Size];
7 int tmp;
8 int iLoop;
9
01:0038 10 while (nTimes > 0)
11 {
01:003E 12 nTimes --;
13
01:0047 14 iLoop = Size;
01:004E 15 "1,11%" while (iLoop > 0)
16 {
01:0054 17 "0,74%" iLoop -- ;
01:005D 18 "1,11%" tmp = TestDim[0];
01:0066 19 "2,96%" TestDim[0] = TestDim[nTimes];
01:0076 20 "1,11%" TestDim[nTimes] = tmp;
01:0083 21 "0,74%" }
01:0085 22 }
01:0087 23 } /* TestLoop */
24
25
26 void main()
01:00B0 27 {
01:00C8 28 TestLoop(Size / 10); // 100 * 1000 ?®?a®a??©
01:00D2 29 TestLoop(Size / 5); // 200 * 1000 ?®?a®a??©
01:00DF 30 TestLoop(Size / 2); // 500 * 1000 ?®?a®a??©
01:00EC 31 TestLoop(Size / 1); // 1000* 1000 ?®?a®a??©
01:00F9 32 }
В ходе профилирования данной программы было выявлено, что наибольшее время было затрачено на выполнения цикла while(этот цикл несет основную вычислительную нагрузку).
3.Программы из первой лабораторной работы
3.1 С
Так как операторы ввода/вывода занимают большую часть времени выполнения программы, операторы вывода были удалены, а ввод был заменен автоматической генерацией массива.
void sort (double a[], const int n)
{
int no_change;
double temp;
int j;
do
{
no_change=1;
for (j=0; j<=n-2; j=j+1)
{
if (a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
no_change = 0;
}
}
} while (no_change !=1);
}
void main()
{
const int n = 10000;
double a[n];
int j;
for (j=0; j<n; j=j+1)
{
a[j]=1000-j;
}
sort(a, n);
}
Профилирование:
3.2 Pascal
Так как операторы ввода/вывода занимают большую часть времени выполнения программы, операторы вывода были удалены, а ввод был заменен автоматической генерацией массива.
program bubble;
const n=10000;
var a:array[1..n] of real;
j:integer;
procedure sort(var a: array of real; n: integer);
var no_change : boolean;
j : integer;
temp : real;
begin
repeat
no_change:=true;
for j:=0 to n-2 do
begin
if a[j]>a[j+1] then
begin
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp;
no_change:=false;
end
end
until no_change
end;
begin
randomize;
for j:=1 to n do a[j]:=random(100);
sort(a,n);
end.
Профилирование: