summaryrefslogtreecommitdiff
path: root/libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp')
-rw-r--r--libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp127
1 files changed, 0 insertions, 127 deletions
diff --git a/libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp b/libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp
deleted file mode 100644
index 8a5a2e857..000000000
--- a/libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Boost libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp
-
- Copyright 2013 Karsten Ahnert
- Copyright 2013 Pascal Germroth
- Copyright 2013 Mario Mulansky
-
- stronlgy nonlinear hamiltonian lattice in 2d
-
- Distributed under 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)
- */
-
-#include <iostream>
-#include <vector>
-
-#include <omp.h>
-#include <boost/numeric/odeint.hpp>
-#include <boost/numeric/odeint/external/openmp/openmp.hpp>
-
-#include <boost/program_options.hpp>
-#include <boost/random.hpp>
-#include <boost/timer/timer.hpp>
-#include <boost/foreach.hpp>
-#include <boost/accumulators/accumulators.hpp>
-#include <boost/accumulators/statistics/stats.hpp>
-#include <boost/accumulators/statistics/mean.hpp>
-#include <boost/accumulators/statistics/median.hpp>
-#include "osc_chain_1d_system.hpp"
-
-using namespace std;
-using namespace boost::numeric::odeint;
-using namespace boost::accumulators;
-using namespace boost::program_options;
-
-using boost::timer::cpu_timer;
-
-const double p_kappa = 3.3;
-const double p_lambda = 4.7;
-
-int main( int argc , char* argv[] )
-{
- size_t N, blocks, steps, repeat;
- bool split_range, dump;
- options_description desc("Options");
- desc.add_options()
- ("help,h", "show this help")
- ("length", value(&N)->default_value(1024), "length of chain")
- ("steps", value(&steps)->default_value(100), "simulation steps")
- ("blocks", value(&blocks)->default_value(omp_get_max_threads()), "number of blocks (split) or threads (non-split)")
- ("split", bool_switch(&split_range), "split range")
- ("repeat", value(&repeat)->default_value(25), "repeat runs")
- ("dump", bool_switch(&dump), "dump final state to stderr")
- ;
- variables_map vm;
- store(command_line_parser(argc, argv).options(desc).run(), vm);
- notify(vm);
- if(vm.count("help"))
- {
- cerr << desc << endl;
- return EXIT_FAILURE;
- }
- cout << "length\tsteps\tthreads\ttime" << endl;
-
- accumulator_set< double, stats<tag::mean, tag::median> > acc_time;
-
- vector<double> p( N ), q( N, 0 );
- boost::random::uniform_real_distribution<double> distribution;
- boost::random::mt19937 engine( 0 );
- generate( p.begin() , p.end() , boost::bind( distribution , engine ) );
-
- if(split_range) {
- typedef openmp_state<double> state_type;
- typedef symplectic_rkn_sb3a_mclachlan<
- state_type , state_type , double
- > stepper_type;
- state_type p_split(blocks), q_split(blocks);
- split(p, p_split);
- split(q, q_split);
-
- for(size_t n_run = 0 ; n_run != repeat ; n_run++) {
- cpu_timer timer;
- integrate_n_steps( stepper_type() , osc_chain( p_kappa , p_lambda ) ,
- make_pair( boost::ref(q_split) , boost::ref(p_split) ) ,
- 0.0 , 0.01 , steps );
- double run_time = static_cast<double>(timer.elapsed().wall) * 1.0e-9;
- acc_time(run_time);
- cout << N << '\t' << steps << '\t' << blocks << '\t' << run_time << endl;
- }
-
- if(dump) {
- unsplit(p_split, p);
- copy(p.begin(), p.end(), ostream_iterator<double>(cerr, "\t"));
- cerr << endl;
- }
-
- } else {
- typedef vector<double> state_type;
- typedef symplectic_rkn_sb3a_mclachlan<
- state_type , state_type , double ,
- state_type , state_type , double ,
- openmp_range_algebra
- > stepper_type;
- omp_set_num_threads(blocks);
-
- for(size_t n_run = 0 ; n_run != repeat ; n_run++) {
- cpu_timer timer;
- integrate_n_steps( stepper_type() , osc_chain( p_kappa , p_lambda ) ,
- make_pair( boost::ref(q) , boost::ref(p) ) ,
- 0.0 , 0.01 , steps );
- double run_time = static_cast<double>(timer.elapsed().wall) * 1.0e-9;
- acc_time(run_time);
- cout << N << '\t' << steps << '\t' << blocks << '\t' << run_time << endl;
- }
-
- if(dump) {
- copy(p.begin(), p.end(), ostream_iterator<double>(cerr, "\t"));
- cerr << endl;
- }
-
- }
-
- cout << "# mean=" << mean(acc_time)
- << " median=" << median(acc_time) << endl;
-
- return 0;
-}