Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по МПО / lab2 / LAB02_Фане.doc
Скачиваний:
20
Добавлен:
01.05.2014
Размер:
96.77 Кб
Скачать

4. Профилирование программ «Main_p» и «Main_c»

Исходная программа на Си ++ показала следующие результаты:

Time Counts

#include<iostream.h>

#include<math.h>

#include<conio.h>

#include<stdio.h>

float x,er,ec,res1;

int done;

0 0 float erf(float x)

{

0 0 const sqrtpi = 1.7724538,

0 0 t2 = 0.66666667,

0 0 t3 = 0.66666667,

0 0 t4 = 0.07619048,

0 0 t5 = 0.01693122,

0 0 t6 = 3.078403E-3,

0 0 t7 = 4.736005E-4,

0 0 t8 = 6.314673E-5,

0 0 t9 = 7.429027E-6,

0 0 t10 = 7.820028E-7,

0 0 t11 = 7.447646E-8,

0 0 t12 = 6.476214E-9;

float x2,sum;

int i;

0 0 x2 = x*x;

0 0 sum = t5+x2*(t6+x2*(t7+x2*(t8+x2*(t9+x2*(t10+x2*(t11+x2*t1

0 0 res1 = (2.0*exp(-x2)/sqrtpi*(x*(1+x2*(t2+x2*(t3+x2*(t4+x2*

0 0 return res1;

0 0 }

float res2;

0.0000 6 float erfc( float x )

{

0.0000 6 const sqrtpi = 1.7724538;

float x2,v,sum ;

0.0000 6 x2 = x*x;

0.0000 6 v = 1.0/(2.0*x2);

0.0000 6 sum = v/(1+8*v/(1+9*v/(1+10*v/(1+11*v/(1+12*v)))));

0.0000 6 sum = v/(1+3*v/(1+4*v/(1+5*v/(1+6*v/(1+7*sum)))));

0.0000 6 res2 = (1.0/(exp(x2)*x*sqrtpi*(1+v/(1+2*sum))));

0.0000 6 return res2;

0.0000 6 }

0.0000 1 void main()

{

0.0001 1 clrscr();

0.0000 1 done=0;

0.0000 1 printf("\n");

do

{

0.0007 7 printf("Arg? ");

8.0597 7 scanf("%f",&x);

0.0000 7 if( x < 0.0 ) { done = 1; }

else

{

0.0000 6 if (x==0.0 )

Turbo Profiler Version 2.1 Sun Apr 24 05:12:09 2005

{

0 0 er=0.0;

0 0 ec=1.0;

0 0 }

else

{

0.0000 6 if( x<1.5)

{

0 0 er=erf(x);

0 0 ec=1.0-er;

}

else

{

0.0000 6 ec=erfc(x);

0.0000 6 er=1.0-ec;

}

}

0.0011 6 printf("X= %f",x ," Erf= %f",er,", Erfc= %f",ec);

}

0.0000 7 } while(done== 0);

0.0000 1 }

Результаты профилирования по времени LABCPP.c

Turbo Profiler Version 2.1 Sun Apr 10 05:54:14 2005

Program: E:\LABO\METRO\LAB2\LABCPP.EXE

Execution Profile

Total time: 5.1952 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Time

Sort: Frequency

#LABCPP#55 5.1917 sec 99% |**********************************************

#LABCPP#43 0.0007 sec <1% |

#LABCPP#77 0.0006 sec <1% |

#LABCPP#54 0.0003 sec <1% |

#LABCPP#49 0.0001 sec <1% |

#LABCPP#51 0.0000 sec <1% |

#LABCPP#42 0.0000 sec <1% |

#LABCPP#41 0.0000 sec <1% |

#LABCPP#73 0.0000 sec <1% |

#LABCPP#56 0.0000 sec <1% |

#LABCPP#44 0.0000 sec <1% |

#LABCPP#74 0.0000 sec <1% |

#LABCPP#40 0.0000 sec <1% |

#LABCPP#39 0.0000 sec <1% |

#LABCPP#66 0.0000 sec <1% |

#LABCPP#59 0.0000 sec <1% |

#LABCPP#79 0.0000 sec <1% |

#LABCPP#35 0.0000 sec <1% |

#LABCPP#45 0.0000 sec <1% |

erfc 0.0000 sec <1% |

_main 0.0000 sec <1% |

#LABCPP#50 0.0000 sec <1% |

#LABCPP#80 0.0000 sec <1% |

Результаты профилирования по частоте LABCPP.C

Turbo Profiler Version 2.1 Sun Apr 10 06:04:14 2005

Program: E:\LABO\METRO\LAB2\LABCPP.EXE

Execution Profile

Total time: 5.1952 sec

% of total: 99 %

Run: 1 of 1

Filter: All

Show: Counts

Sort: Frequency

#LABCPP#79 3 6% |++++++++++++++++++++++++++++++++++++++++++++++

#LABCPP#56 3 6% |++++++++++++++++++++++++++++++++++++++++++++++

#LABCPP#54 3 6% |++++++++++++++++++++++++++++++++++++++++++++++

#LABCPP#55 3 6% |++++++++++++++++++++++++++++++++++++++++++++++

#LABCPP#73 2 4% |++++++++++++++++++++++++++++++

#LABCPP#42 2 4% |++++++++++++++++++++++++++++++

#LABCPP#43 2 4% |++++++++++++++++++++++++++++++

#LABCPP#44 2 4% |++++++++++++++++++++++++++++++

#LABCPP#45 2 4% |++++++++++++++++++++++++++++++

#LABCPP#41 2 4% |++++++++++++++++++++++++++++++

#LABCPP#77 2 4% |++++++++++++++++++++++++++++++

erfc 2 4% |++++++++++++++++++++++++++++++

#LABCPP#74 2 4% |++++++++++++++++++++++++++++++

#LABCPP#40 2 4% |++++++++++++++++++++++++++++++

#LABCPP#39 2 4% |++++++++++++++++++++++++++++++

#LABCPP#59 2 4% |++++++++++++++++++++++++++++++

#LABCPP#35 2 4% |++++++++++++++++++++++++++++++

#LABCPP#66 2 4% |++++++++++++++++++++++++++++++

#LABCPP#50 1 2% |+++++++++++++++

#LABCPP#51 1 2% |+++++++++++++++

_main 1 2% |+++++++++++++++

#LABCPP#49 1 2% |+++++++++++++++

#LABCPP#80 1 2% |+++++++++++++++

Исходная программа на Паскале показала следующие результаты:

Program: E:\LABO\METRO\LAB2\LABPAS.EXE File LABPAS.PAS

Time Counts

program erfd4;

{ evaluation of the gaussian error function }

var x,er,ec : real;

done : boolean;

function erf(x: real): real;

{ infinite series expansion of the Gaussian error function }

const sqrtpi = 1.7724538;

t2 = 0.66666667;

t3 = 0.66666667;

t4 = 0.07619048;

t5 = 0.01693122;

t6 = 3.078403E-3;

t7 = 4.736005E-4;

t8 = 6.314673E-5;

t9 = 7.429027E-6;

t10 = 7.820028E-7;

t11 = 7.447646E-8;

t12 = 6.476214E-9;

var x2,sum : real;

i : integer;

0 0 begin

0 0 x2:=x*x;

0 0 sum:=t5+x2*(t6+x2*(t7+x2*(t8+x2*(t9+x2*(t10+x2*(t11+x2*t12))))))

0 0 erf:=2.0*exp(-x2)/sqrtpi*(x*(1+x2*(t2+x2*(t3+x2*(t4+x2*sum)))))

0 0 end; { function erf }

function erfc(x: real): real;

{ complement of error function }

const sqrtpi = 1.7724538;

var x2,v,sum : real;

0.0000 4 begin

0.0000 4 x2:=x*x;

0.0000 4 v:=1.0/(2.0*x2);

0.0000 4 sum:=v/(1+8*v/(1+9*v/(1+10*v/(1+11*v/(1+12*v)))));

0.0000 4 sum:=v/(1+3*v/(1+4*v/(1+5*v/(1+6*v/(1+7*sum)))));

0.0000 4 erfc:=1.0/(exp(x2)*x*sqrtpi*(1+v/(1+2*sum)))

0.0000 4 end; { function ercf }

0.0005 1 begin { main }

0.0000 1 done:=false;

0.0000 1 writeln;

repeat

0.0004 5 write('Arg? ');

5.9373 5 readln(x);

0.0000 5 if x<0.0 then done:=true

else

begin

0.0000 4 if x=0.0 then

begin

0 0 er:=0.0;

Turbo Profiler Version 2.1 Sun Apr

Результаты профилирования по времени LABp.pas

Program: E:\LABO\METRO\LAB2\LABPAS.EXE

Execution Profile

Total time: 5.9421 sec

% of total: 100%

Run: 1 of 1

Filter: All

Show: Time

Sort: Frequency

ERFD4.53 5.9373 sec 99% |**********************************************

ERFD4.75 0.0031 sec <1% |

ERFD4.47 0.0005 sec <1% |

ERFD4.78 0.0005 sec <1% |

ERFD4.52 0.0004 sec <1% |

ERFD4.50 0.0000 sec <1% |

ERFD4.71 0.0000 sec <1% |

ERFD4.54 0.0000 sec <1% |

ERFD4.77 0.0000 sec <1% |

ERFD4.44 0.0000 sec <1% |

ERFD4.42 0.0000 sec <1% |

ERFD4.41 0.0000 sec <1% |

ERFD4.ERFC 0.0000 sec <1% |

ERFD4.57 0.0000 sec <1% |

ERFD4.64 0.0000 sec <1% |

ERFD4.43 0.0000 sec <1% |

ERFD4.72 0.0000 sec <1% |

ERFD4.45 0.0000 sec <1% |

ERFD4.40 0.0000 sec <1% |

ERFD4.49 0.0000 sec <1% |

Результаты профилирования по частоте LABp.pas

Program: E:\LABO\METRO\LAB2\LABPAS.EXE

Execution Profile

Total time: 5.9421 sec

% of total: 100%

Run: 1 of 1

Filter: All

Show: Counts

Sort: Frequency

ERFD4.52 5 6% |++++++++++++++++++++++++++++++++++++++++++++++

ERFD4.77 5 6% |++++++++++++++++++++++++++++++++++++++++++++++

ERFD4.53 5 6% |++++++++++++++++++++++++++++++++++++++++++++++

ERFD4.54 5 6% |++++++++++++++++++++++++++++++++++++++++++++++

ERFD4.ERFC 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.44 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.45 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.72 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.40 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.75 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.43 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.42 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.41 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.64 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.57 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.71 4 5% |++++++++++++++++++++++++++++++++++++

ERFD4.47 1 1% |+++++++++

ERFD4.49 1 1% |+++++++++

ERFD4.50 1 1% |+++++++++

ERFD4.78 1 1% |+++++++++

Сравнивая результаты, полученные при профилировании программ на Паскале и Си++, можно выявить следующие закономерности:

  • Среднее время, затрачиваемое на выполнение каждой строки кода на Паскале заметно меньше, чем аналогичное время на Си;

  • Общее время выполнения программы на Паскале больше, чем время выполнения программы на Си. Статистику времени для программы на Паскале портит сомнительная строка «5.9373 5 .. readln(x)»;

Соседние файлы в папке lab2