mirror of
https://github.com/boostorg/coroutine.git
synced 2026-02-10 11:22:32 +00:00
add progr option for unwinding in operformance tests
This commit is contained in:
@@ -18,9 +18,10 @@
|
||||
#include "cycle.hpp"
|
||||
#include "preallocated_stack_allocator.hpp"
|
||||
|
||||
typedef preallocated_stack_allocator< 64 * 1024 > stack_allocator;
|
||||
typedef preallocated_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)
|
||||
@@ -28,17 +29,17 @@ void fn( boost::coroutines::coroutine< void >::push_type & c)
|
||||
|
||||
duration_type measure_time()
|
||||
{
|
||||
stack_allocator stack_alloc( jobs + 1);
|
||||
stack_allocator stack_alloc;
|
||||
|
||||
// cache warum-up
|
||||
boost::coroutines::coroutine< void >::pull_type c( fn,
|
||||
boost::coroutines::attributes( stack_allocator::default_stacksize(), preserve_fpu),
|
||||
boost::coroutines::attributes( stack_allocator::default_stacksize(), 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( stack_allocator::default_stacksize(), preserve_fpu),
|
||||
boost::coroutines::attributes( stack_allocator::default_stacksize(), unwind_stack, preserve_fpu),
|
||||
stack_alloc);
|
||||
}
|
||||
duration_type total = clock_type::now() - start;
|
||||
@@ -51,17 +52,17 @@ duration_type measure_time()
|
||||
# ifdef BOOST_CONTEXT_CYCLE
|
||||
cycle_type measure_cycles()
|
||||
{
|
||||
stack_allocator stack_alloc( jobs + 1);
|
||||
stack_allocator stack_alloc;
|
||||
|
||||
// cache warum-up
|
||||
boost::coroutines::coroutine< void >::pull_type c( fn,
|
||||
boost::coroutines::attributes( stack_allocator::default_stacksize(), preserve_fpu),
|
||||
boost::coroutines::attributes( stack_allocator::default_stacksize(), 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( stack_allocator::default_stacksize(), preserve_fpu),
|
||||
boost::coroutines::attributes( stack_allocator::default_stacksize(), unwind_stack, preserve_fpu),
|
||||
stack_alloc);
|
||||
}
|
||||
cycle_type total = cycles() - start;
|
||||
@@ -78,11 +79,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;
|
||||
@@ -100,6 +102,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;
|
||||
|
||||
Reference in New Issue
Block a user