Как замерить производительность i/o?

У меня есть две программы на C++, делающие одно и тоже.
Задача измерить производительность ввода-вывода, т.е сказать какая работает быстрее.
Никаких вычислений нет, просто по-разному реализован i/o.
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
@serhiops
Python/JavaScript/C++
#include <chrono>
#include <iostream>

class Timer
{
public:
    Timer()
    {
        start = std::chrono::high_resolution_clock::now();
    }
    ~Timer(){
        end = std::chrono::high_resolution_clock::now();
        std::chrono::duration<float> duration = end - start;
        std::cout << "Time : "<<duration.count()<<endl;
    }
private:
    std::chrono::time_point<std::chrono::high_resolution_clock> start, end;
};
int main(){
    Timer t;
    //весь остальной код
}

В конце выполнения программы в консоль выведется время, потраченное на его выполнение
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Замер i/o это хитрая штука. Тут недостаточно просто программирования. Нужно знать что ОС обычно берет на себя часть функций по управлению (планировщики) вводом-выводом и кеширование.

Тоесть если ты будешь тестить свои программы в порядке 1->2 то вторая будет иметь фору в виде прогретого дискового кеша. И нужно делать хотябы -4-6 экспериментов чередуя 1->2->1->2 несколько раз и собирать кумулятивное время для каждого приложения и потом брать арифметическое среднее.

Данный класс Timer в таком виде не нужен. Он слишком прост и его можно заменить в коносли на вызов

$ time yourapplication

В качестве улучшений таймера я-бы сделал StopWatch. Это таймер который можно вызывать несколько раз и он будет кумулятивно считать время между begin-end и выводить его в конце. Так можно мерять интересующие фрагменты кода которые работают только с диском и игнорировать например вычисления с CPU.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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