📄 performance_measure.hpp
字号:
// Copyright John Maddock 2007.// Use, modification and distribution are subject to the// Boost Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#ifndef BOOST_MATH_PERFORMANCE_MEASURE_HPP#define BOOST_MATH_PERFORMANCE_MEASURE_HPP#include <boost/config.hpp>#include <boost/timer.hpp>#include <cstring>#ifdef _WIN32#include <windows.h>#endiftemplate <class F>double performance_measure(F f){ unsigned count = 1; double time, result;#ifdef _WIN32 int old_priority = GetThreadPriority(GetCurrentThread()); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);#endif // // Begin by figuring out how many times to repeat // the function call in order to get a measureable time: // do { boost::timer t; for(unsigned i = 0; i < count; ++i) f(); time = t.elapsed(); count *= 2; t.restart(); }while(time < 0.5); count /= 2; result = time; // // Now repeat the measurement over and over // and take the shortest measured time as the // result, generally speaking this gives us // consistent results: // for(unsigned i = 0; i < 20u;++i) { boost::timer t; for(unsigned i = 0; i < count; ++i) f(); time = t.elapsed(); if(time < result) result = time; t.restart(); }#ifdef _WIN32 SetThreadPriority(GetCurrentThread(), old_priority);#endif return result / count;}struct test_info{ test_info(const char* n, void (*p)()); const char* name; void (*proc)();};inline bool operator < (const test_info& a, const test_info& b){ return std::strcmp(a.name, b.name) < 0;}extern void consume_result(double);extern void set_call_count(int i);extern void add_new_test(test_info i);inline test_info::test_info(const char* n, void (*p)()){ name = n; proc = p; add_new_test(*this);}#define BOOST_MATH_PERFORMANCE_TEST(name, string) \ void BOOST_JOIN(name, __LINE__) ();\ namespace{\ test_info BOOST_JOIN(BOOST_JOIN(name, _init), __LINE__)(string, BOOST_JOIN(name, __LINE__));\ }\ void BOOST_JOIN(name, __LINE__) ()#endif // BOOST_MATH_PERFORMANCE_MEASURE_HPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -