14 października 2012

Benchmark framework (Boost.Date_Time)

Pisząc test porównujący czas wykonania dwóch algorytmów, natchnęło mnie by zrezygnować z wołania za pomocą metody system() polecenia wyświetlającego czas i skorzystać jakiejś biblioteki.
#include <iostream>
#include <stdlib.h>

int main()
{
    system("date +%M.%S.%N");
    return 0;
}
W boost znalazłem dwie, które nadawały by się do moich potrzeb. Niestety w żadną nie zagłębiałem się dokładnie. Pierwsza to Boost.Data_Time, druga to Boost.Chrono. Tutaj będzie tylko o pierwszej.

Biblioteka, pozwala na pobieranie czasu, obliczanie czasu trwania i przesunięć w czasie. Wszystko to dla różnych systemów kalendarzowych np. UTC, kalendarz gregoriański. Pozwala też zapisywać i odczytywać datę w różnych formatach - z tego co czytałem, bo nie miałem czasu testować.

W tym programie pobieram trzykrotnie lokalny czas (UTC) z dokładnością co do milisekund (linijki 14, 20 i 30). Następny krok to obliczenie czasu trwania (linijki 21 i 31) inicjalizowania listy, oraz jej przeszukiwania.
#include <list>
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/assign/list_of.hpp>

#include <boost/date_time/posix_time/posix_time.hpp>

using namespace std;
using namespace boost::assign;

int main()
{
    using namespace boost::posix_time;
    ptime time1 = microsec_clock::local_time();
    cout << "Start at:              " << time1 << endl;

    const int size = 400500;
    list<int> l = list_of(1337).repeat(size, 1337);

    ptime time2 = microsec_clock::local_time();
    time_duration td_init = time2 - time1;
    cout << "Memory Initialization: " << td_init << endl;

    int result = 0;
    BOOST_FOREACH(int value, l) {
        if (value > result)
            result = value;
    }

    ptime time3 = microsec_clock::local_time();
    time_duration td_find = time3 - time2;
    cout << "Searching:             " << td_find << endl;

    return result;
}
Wynik
Start at:              2012-Oct-14 17:13:36.716994
Memory Initialization: 00:00:00.125376
Searching:             00:00:00.021398

Brak komentarzy:

Prześlij komentarz