Скачиваний:
18
Добавлен:
01.05.2014
Размер:
129.02 Кб
Скачать

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

Кафедра МОЭВМ

Лабораторная работа № 3

По дисциплине «Метрология Программного обеспечения»

Выполнила: Куени Лора

Факультет: КТИ

Группа: 1305

Преподаватель: Кирьянчиков В.А.

Санкт-Петербург

2005

1. Формулировка задания

  • Ознакомиться с документацией на SAMPLER и выполнить под его

управлением тестовые программы test_cyc.cpp и test_sub.cpp с анализом параметров повторения циклов и проверкой их влияния на точность и чувствительность профилирования;

  • Скомпилировать и выполнить под управлением SAMPLER'а программы на Паскале и С++, разработанные в 1-ой лабораторной работе. Выполнить разбиение программы на функциональные участки и снять профили для двух режимов: 1 - измерение только полного времени выполнения программы; 2 - измерение времен выполнения функциональных участков;

  • Выявить "узкие места", ввести в программы усовершенствования и получить новые профили. Сравнить результаты, полученные для Паскаля и С, с аналогичными результатами, полученными с помощью программы «Turboprofiler».

2. Профилирование программ «Test_cyc.Cpp» и «Test_sub.Cpp»

Для профилирования программы «Test_cyc.cpp» необходимо внести некоторые изменения в её текст. Эти изменения связаны с расстановкой макросов-меток, ограничивающих зоны профилирования программы «SAMPLER». Текст программы после добавления меток выглядит следующим образом:

// Test_Cyc rebuilded in order to find out how does the Sampler works...

#include "Sampler.h"

#define Size 10000

int i, tmp, dim[Size];

void main()

{

//--------------------------------- One cycle - one line

SAMPLE;

for(i=0;i<Size/10;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

SAMPLE;

for(i=0;i<Size/5;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

SAMPLE;

for(i=0;i<Size/2;i++){ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

SAMPLE;

for(i=0;i<Size;i++) { tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

//--------------------------------- One cycle - two lines

SAMPLE;

for(i=0;i<Size/10;i++)

{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

SAMPLE;

for(i=0;i<Size/5;i++)

{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

SAMPLE;

for(i=0;i<Size/2;i++)

{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

SAMPLE;

for(i=0;i<Size;i++)

{ tmp=dim[0]; dim[0]=dim[i]; dim[i]=tmp; };

//-------------------------------- One cycle - five lines

SAMPLE;

for(i=0;i<Size/10;i++)

{ tmp=dim[0];

dim[0]=dim[i];

dim[i]=tmp;

};

SAMPLE;

for(i=0;i<Size/5;i++)

{ tmp=dim[0];

dim[0]=dim[i];

dim[i]=tmp;

};

SAMPLE;

for(i=0;i<Size/2;i++)

{ tmp=dim[0];

dim[0]=dim[i];

dim[i]=tmp;

};

SAMPLE;

for(i=0;i<Size;i++)

{ tmp=dim[0];

dim[0]=dim[i];

dim[i]=tmp;

};

SAMPLE;

}

Таким образом, программа «SAMPLER» измерит общее и среднее время выполнения каждого цикла. Результаты профилирования приведены ниже:

--------------------------------------------------------------------

Метки Общее время Кол-во прох. Срвремя

--------------------------------------------------------------------

1 : 11 1 : 13 6.70 1 6.70

--------------------------------------------------------------------

1 : 13 1 : 15 10.90 1 10.90

--------------------------------------------------------------------

1 : 15 1 : 17 28.50 1 28.50

--------------------------------------------------------------------

1 : 17 1 : 20 55.31 1 55.31

--------------------------------------------------------------------

1 : 20 1 : 23 6.70 1 6.70

--------------------------------------------------------------------

1 : 23 1 : 26 11.73 1 11.73

--------------------------------------------------------------------

1 : 26 1 : 29 28.50 1 28.50

--------------------------------------------------------------------

1 : 29 1 : 33 56.15 1 56.15

--------------------------------------------------------------------

1 : 33 1 : 39 6.70 1 6.70

--------------------------------------------------------------------

1 : 39 1 : 45 11.73 1 11.73

--------------------------------------------------------------------

1 : 45 1 : 51 28.50 1 28.50

--------------------------------------------------------------------

1 : 51 1 : 57 56.15 1 56.15

--------------------------------------------------------------------

Анализируя полученные результаты, можно сделать следующие заключения:

  • Время выполнения цикла не зависит от способа структурного оформления его в коде программы. Аналогично, способ оформления цикла не влияет на качество его профилирования в программе «Sampler»;

  • Программа «Sampler» корректно оценивает время выполнения каждого из циклов. Точность этой оценки достаточно высока;

  • Программа «Sampler» позволяет экспериментально подтвердить тот факт, что время выполнения цикла прямо пропорционально количеству его итераций.

Для профилирования программы «Test_sub.cpp» необходимо внести в неё изменения, аналогичные изменениям, внесённым в программу «Test_cyc.cpp». Текст программы, подвергавшейся профилированию, приведён ниже:

#include "Sampler.h"

const unsigned Size = 1000;

void TestLoop(int nTimes)

{

static int TestDim[Size];

int tmp;

int iLoop;

while (nTimes > 0)

{

nTimes --;

iLoop = Size;

while (iLoop > 0)

{

iLoop -- ;

tmp = TestDim[0];

TestDim[0] = TestDim[nTimes];

TestDim[nTimes] = tmp;

}

}

}

void main()

{

SAMPLE;

TestLoop(Size / 10);

SAMPLE;

TestLoop(Size / 5);

SAMPLE;

TestLoop(Size / 2);

SAMPLE;

TestLoop(Size / 1);

SAMPLE;

}

Такая расстановка меток позволяет оценить время, затрачиваемое на выполнение процедуры TestLoop при вызове её с различными аргументами. Результаты профилирования приведены ниже:

--------------------------------------------------------------------

Метки Общее время Кол-во прох. Ср.время

--------------------------------------------------------------------

1 : 30 1 : 32 338.59 1 338.59

--------------------------------------------------------------------

1 : 32 1 : 34 729.14 1 729.14

--------------------------------------------------------------------

1 : 34 1 : 36 1866.44 1 1866.44

--------------------------------------------------------------------

1 : 36 1 : 38 58615.63 1 58615.63

--------------------------------------------------------------------

Как и следует ожидать, время выполнения функции прямо пропорционально количеству итераций цикла, выполняемого в пределах её тела. Программа «Sampler» позволила оценить время выполнения каждого из вариантов вызова этой процедуры с точностью до сотых долей миллисекунды.

Соседние файлы в папке Лабораторные работы №2 и 3