Professional Documents
Culture Documents
Лб1
Лб1
УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНИКИ
Кафедра «Програмної інженерії»
ЗВІТ
з лабораторної роботи № 1
Виконали:
Студенти групи ПЗПІ-20-5
Середа Ілля Перевірила ст. викладач
Вожова Маргарита каф. ПІ Олійник О. В.
Харків 2022
Тема роботи:
Методи визначення обчислювальної складності програм
Мета роботи:
Хід роботи:
Результат:
2) Експериментально визначте точність обчислення часу при використанні
функцій з табл. 1.16 . Запишіть отримані результати в табл. 1.1.
Код:
__int64 to_int64(FILETIME ft)
{
return static_cast<__int64>(ft.dwHighDateTime) << 32 | ft.dwLowDateTime;
}
void Task2Time()
{
time_t start = time(0);
//Цикл работает пока между стартом и концом не будет разницы
while (start == time(0)) {
}
cout << "Точность функции Time в секундах: " << time(0) - start << endl;
}
void Task2Clock()
{
clock_t start = clock();
//Цикл работает пока между стартом и концом не будет разницы
while (start == clock()) {
}
cout << "Точность функции Clock в миллисекундах: " << clock() - start << endl;
}
void Task2GetSystemTimeAsFileTime()
{
FILETIME fileTimeStart, fileTimeEnd;
GetSystemTimeAsFileTime(&fileTimeStart);
GetSystemTimeAsFileTime(&fileTimeEnd);
//Цикл работает пока между стартом и концом не будет разницы
while (fileTimeStart.dwLowDateTime == fileTimeEnd.dwLowDateTime)
{
GetSystemTimeAsFileTime(&fileTimeEnd);
}
cout << "Точность функции GetSystemTimeAsFileTime в тактах: "
<< (to_int64(fileTimeEnd) - to_int64(fileTimeStart)) << endl;
}
void Task2GetSystemTimePreciseAsFileTime()
{
FILETIME fileTimeStart, fileTimeEnd;
GetSystemTimePreciseAsFileTime(&fileTimeStart);
GetSystemTimePreciseAsFileTime(&fileTimeEnd);
//Цикл работает пока между стартом и концом не будет разницы
while (fileTimeStart.dwLowDateTime == fileTimeEnd.dwLowDateTime)
{
GetSystemTimePreciseAsFileTime(&fileTimeEnd);
}
cout << "Точность функции GetSystemTimePreciseAsFileTime в миллисекундах: "
<< (to_int64(fileTimeEnd) - to_int64(fileTimeStart)) << endl;
}
void Task2GetTickCount()
{
DWORD start = GetTickCount64();
//Цикл работает пока между стартом и концом не будет разницы
while (start == GetTickCount64()) {
}
void Task2__rdtsc()
{
unsigned _int64 start = __rdtsc();
//Цикл работает пока между стартом и концом не будет разницы
while (start == __rdtsc()) {
}
void Task2QueryPerformanceCounter()
{
LARGE_INTEGER start, end;
QueryPerformanceCounter(&start);
QueryPerformanceCounter(&end);
//Цикл работает пока между стартом и концом не будет разницы
while (start.QuadPart == end.QuadPart) {
QueryPerformanceCounter(&end);
}
cout << "Точность функции QueryPerformanceCounter: "
<< (end.QuadPart - start.QuadPart) << endl;
void Task2Chrono()
{
high_resolution_clock::time_point start = high_resolution_clock::now();
duration<double> accuracy;
start = high_resolution_clock::now();
while (start == high_resolution_clock::now()) {
}
accuracy = duration_cast<duration<double>>(high_resolution_clock::now() - start);
cout << "Точность chrono в наносекундах: " << accuracy.count() << endl;
}
void Task2Omp_get_wtime()
{
double start = omp_get_wtime();
//Цикл работает пока между стартом и концом не будет разницы
while (start == omp_get_wtime()) {
}
cout << "Точность omp_get_wtime в секундах: " << omp_get_wtime() - start << endl;
}
Результат:
Результат:
5) Складіть функції для обчислення множення для 2-х квадратних
матриць. Перша функція не використовує об’єкти, інша використовує.
Результат:
9) Дослідить вплив типу даних (int8, int16, int32, __int64, float, double) для
розміру матриць n = 1024. Отримані результати занести в таблицю. Зробіть
висновки по впливу типу даних.
Тип данных Размер Время, с
int8 1024 0.563275
int16 1024 0.58569
int32 1024 0.659718
_int64 1024 1.08995
float 1024 0.644701
double 1024 0.910367
Результат: