add progr option for unwinding in operformance tests

This commit is contained in:
Oliver Kowalke
2014-01-26 20:03:26 +01:00
parent 163f3abda6
commit dc9769c1a5
3 changed files with 35 additions and 18 deletions

View File

@@ -20,6 +20,7 @@
typedef boost::coroutines::protected_stack_allocator stack_allocator;
boost::coroutines::flag_fpu_t preserve_fpu = boost::coroutines::fpu_not_preserved;
boost::coroutines::flag_unwind_t unwind_stack = boost::coroutines::stack_unwind;
boost::uint64_t jobs = 1000;
void fn( boost::coroutines::coroutine< void >::push_type & c)
@@ -30,11 +31,13 @@ duration_type measure_time()
stack_allocator stack_alloc;
// cache warum-up
boost::coroutines::coroutine< void >::pull_type c( fn, boost::coroutines::attributes( preserve_fpu), stack_alloc);
boost::coroutines::coroutine< void >::pull_type c( fn,
boost::coroutines::attributes( unwind_stack, preserve_fpu), stack_alloc);
time_point_type start( clock_type::now() );
for ( std::size_t i = 0; i < jobs; ++i) {
boost::coroutines::coroutine< void >::pull_type c( fn, boost::coroutines::attributes( preserve_fpu), stack_alloc);
boost::coroutines::coroutine< void >::pull_type c( fn,
boost::coroutines::attributes( unwind_stack, preserve_fpu), stack_alloc);
}
duration_type total = clock_type::now() - start;
total -= overhead_clock(); // overhead of measurement
@@ -49,11 +52,13 @@ cycle_type measure_cycles()
stack_allocator stack_alloc;
// cache warum-up
boost::coroutines::coroutine< void >::pull_type c( fn, boost::coroutines::attributes( preserve_fpu), stack_alloc);
boost::coroutines::coroutine< void >::pull_type c( fn,
boost::coroutines::attributes( unwind_stack, preserve_fpu), stack_alloc);
cycle_type start( cycles() );
for ( std::size_t i = 0; i < jobs; ++i) {
boost::coroutines::coroutine< void >::pull_type c( fn, boost::coroutines::attributes( preserve_fpu), stack_alloc);
boost::coroutines::coroutine< void >::pull_type c( fn,
boost::coroutines::attributes( unwind_stack, preserve_fpu), stack_alloc);
}
cycle_type total = cycles() - start;
total -= overhead_cycle(); // overhead of measurement
@@ -69,11 +74,12 @@ int main( int argc, char * argv[])
{
bind_to_processor( 0);
bool preserve = false;
bool preserve = false, unwind = true;
boost::program_options::options_description desc("allowed options");
desc.add_options()
("help", "help message")
("fpu,f", boost::program_options::value< bool >( & preserve), "preserve FPU registers")
("unwind,u", boost::program_options::value< bool >( & unwind), "unwind coroutine-stack")
("jobs,j", boost::program_options::value< boost::uint64_t >( & jobs), "jobs to run");
boost::program_options::variables_map vm;
@@ -91,6 +97,7 @@ int main( int argc, char * argv[])
}
if ( preserve) preserve_fpu = boost::coroutines::fpu_preserved;
if ( ! unwind) unwind_stack = boost::coroutines::no_stack_unwind;
boost::uint64_t res = measure_time().count();
std::cout << "average of " << res << " nano seconds" << std::endl;