Pierwsza sprawa, to paczka w Ubuntu (libboost-all-dev), która ciągle wskazuje na wersję 1.46, a tam Boost.Chrono brakuje. Musiałem, wymienić to na:
apt-get install libboost1.48-all-devDruga spraw, to linkowanie. Chrono, korzysta z Boost.System i obie biblioteki trzeba zlinkować z programem (tu mam wątpliwości czy istnieje wersja, której nie trzeba linkować - nie doczytałem, korzystam z tego co mam w paczkach Ubuntu).
Zmiany w CMakeList.txt dla mojego projektu
project(benchmark_container_iterator)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
find_package(Boost COMPONENTS system chrono REQUIRED)
target_link_libraries(${PROJECT_NAME}
${Boost_SYSTEM_LIBRARY}
${Boost_CHRONO_LIBRARY}
)
Dla benchmarka chciałem użyć process_cpu_clock, ale jego precyzja była do kitu. Jednak według opisu, wydaje się tym czego szukam:Process and thread clocks are used usually to measure the time spent by code blocks, as a basic time-spent profiling of different blocks of code (Boost.Stopwatch is a clear example of this use).Ostatecznie padło na "steady_clock"
Zasada działania, jest podobna jak w wersji poprzedniej. To bardzo proste wykorzystanie możliwości tej biblioteki.
#include <list>
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/chrono.hpp>
using namespace std;
using namespace boost::assign;
int main()
{
using namespace boost::chrono;
steady_clock::time_point time1 = steady_clock::now();
cout << "Start at: " << time1 << endl;
const int size = 400500;
list<int> l = list_of(1337).repeat(size, 1337);
steady_clock::time_point time2 = steady_clock::now();
nanoseconds td_init = duration_cast<nanoseconds>(time2 - time1);
cout << "Memory Initialization: " << td_init << endl;
int result = 0;
BOOST_FOREACH(int value, l) {
if (value > result)
result = value;
}
steady_clock::time_point time3 = steady_clock::now();
nanoseconds td_find = duration_cast<nanoseconds>(time3 - time2);
cout << "Searching: " << td_find << endl;
return result;
}
Wyniki:Start at: 14714172071593 nanoseconds since boot Memory Initialization: 128273372 nanoseconds Searching: 29473710 nanoseconds
Brak komentarzy:
Prześlij komentarz