Задать вопрос
@NikSIk31

Время работы куска кода в миллисекундах?

Хочу замерить время работы цикла. У меня есть код:
#include <iostream>
#include <string>
#include <ctime>
#include <time.h>
#include <cstring>

using namespace std;

void getExecutionTime(time_t start, time_t end) {
    double seconds = difftime(end, start);
    cout << "Execution time " << seconds << " seconds" << endl;
}

int main()
{
    setlocale(LC_ALL, "Russian");
    const int size = 250000;
    int array[size];

    for(int i=0; i<size; i++){
        array[i] = -1 * (rand()%10000)+1;
    }

    // 1
    time_t start, end;
    time(&start);
    cout << "*** *** *** 1 задание *** *** ***" << endl;

    for(int i=0; i < 5000; i++){
        cout << array[i] << endl;
    }

    time(&end);
    getExecutionTime(start, end);



    return 0;
}

но получаю вывод в секундах, что, на самом деле, меня не устраивает т.к. точность сильно падает. Как можно получить в миллисекундах, например? Или может как-то по другому стоит?
  • Вопрос задан
  • 1870 просмотров
Подписаться 3 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
#include <iostream>
#include <chrono>  //используем chrono для работы со временем
using namespace std;

constexpr uint64_t fib(const uint64_t n) //подсчет n-того числа Фиббоначи
{
	return n < 2 ? 1 : fib(n-1)*fib(n-2);
}

int main() 
{
	uint64_t input;
	cin >> input;  //рекомендуется ввести 42
	
        //запоминаем время начала работы
	const auto start=chrono::high_resolution_clock::now(); 
	
	const auto res=fib(input);
	
//ниже получаем время работы в микросекундах.
//Это нужно для того, чтобы учесть время менее одной миллисекунды,
//которое в противном случае, округлится до 0.
	const double time=chrono::duration_cast<chrono::microseconds>(chrono::high_resolution_clock::now()-start).count();
	
	cout << "fib("<<input<<") = "
               << res<< " computed in " 
               << time/1000.0 << "ms." << endl;
	
	return 0;
}


Рабочий пример
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Значит до того как автор начал что-то мерять. Обычно такая задача ставиться в поиске узких мест в приложении. В данном конкретном случае - узкое место это работа с cout. Ее надо устранить и заменить на работу с файлами. Или просто уменьшить объем трафика который пройдет через cout. Вообще нет особого смысла так часто печатать что-то на консоль. Всё равно человек глазами так быстро не видит. Бешеный скрол экрана не имеет смысла кроме того еще и потребляет ценные мега-флопы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы