diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2015-04-08 03:09:47 +0000 |
---|---|---|
committer | <> | 2015-05-05 14:37:32 +0000 |
commit | f2541bb90af059680aa7036f315f052175999355 (patch) | |
tree | a5b214744b256f07e1dc2bd7273035a7808c659f /libs/numeric/odeint/performance/mpi | |
parent | ed232fdd34968697a68783b3195b1da4226915b5 (diff) | |
download | boost-tarball-master.tar.gz |
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_58_0.tar.bz2.HEADboost_1_58_0master
Diffstat (limited to 'libs/numeric/odeint/performance/mpi')
5 files changed, 0 insertions, 282 deletions
diff --git a/libs/numeric/odeint/performance/mpi/Jamfile.v2 b/libs/numeric/odeint/performance/mpi/Jamfile.v2 deleted file mode 100644 index d80e860d8..000000000 --- a/libs/numeric/odeint/performance/mpi/Jamfile.v2 +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2011-2013 Mario Mulansky -# Copyright 2012 Karsten Ahnert -# Copyright 2013 Pascal Germroth -# 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) - -import mpi ; - -project - : requirements - <include>../../../../.. - <include>.. - <define>BOOST_ALL_NO_LIB=1 - <library>/boost//timer - <library>/boost//mpi - <library>/boost//program_options - ; - -exe osc_chain_1d : osc_chain_1d.cpp ; diff --git a/libs/numeric/odeint/performance/mpi/osc_chain_1d.cpp b/libs/numeric/odeint/performance/mpi/osc_chain_1d.cpp deleted file mode 100644 index ef2ce7dbd..000000000 --- a/libs/numeric/odeint/performance/mpi/osc_chain_1d.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* Boost libs/numeric/odeint/performance/openmp/osc_chain_1d.cpp - - Copyright 2013 Karsten Ahnert - Copyright 2013 Mario Mulansky - Copyright 2013 Pascal Germroth - - 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 <boost/numeric/odeint.hpp> -#include <boost/numeric/odeint/external/mpi/mpi.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[] ) -{ - boost::mpi::environment env(argc, argv); - boost::mpi::communicator world; - - size_t N, steps, repeat; - bool 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") - ("repeat", value(&repeat)->default_value(25), "repeat runs") - ("dump", bool_switch(&dump), "dump final state to stderr (on node 0)") - ; - variables_map vm; - store(command_line_parser(argc, argv).options(desc).run(), vm); - notify(vm); - if(vm.count("help")) - { - if(world.rank() == 0) - 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 ); - if(world.rank() == 0) { - boost::random::uniform_real_distribution<double> distribution; - boost::random::mt19937 engine( 0 ); - generate( p.begin() , p.end() , boost::bind( distribution , engine ) ); - } - - typedef vector<double> inner_state_type; - typedef mpi_state< inner_state_type > state_type; - typedef symplectic_rkn_sb3a_mclachlan< - state_type , state_type , double - > stepper_type; - state_type p_split( world ), q_split( world ); - split(p, p_split); - split(q, q_split); - - for(size_t n_run = 0 ; n_run != repeat ; n_run++) { - cpu_timer timer; - world.barrier(); - 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 ); - world.barrier(); - if(world.rank() == 0) { - double run_time = static_cast<double>(timer.elapsed().wall) * 1.0e-9; - acc_time(run_time); - cout << N << '\t' << steps << '\t' << world.size() << '\t' << run_time << endl; - } - } - - if(dump) { - unsplit(p_split, p); - if(world.rank() == 0) { - copy(p.begin(), p.end(), ostream_iterator<double>(cerr, "\t")); - cerr << endl; - } - } - - if(world.rank() == 0) - cout << "# mean=" << mean(acc_time) - << " median=" << median(acc_time) << endl; - - return 0; -} - diff --git a/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp b/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp deleted file mode 100644 index 697208458..000000000 --- a/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* Boost libs/numeric/odeint/performance/openmp/osc_chain_1d_system.hpp - - Copyright 2013 Karsten Ahnert - Copyright 2013 Mario Mulansky - Copyright 2013 Pascal Germroth - - stronlgy nonlinear hamiltonian lattice - - 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) - */ - -#ifndef SYSTEM_HPP -#define SYSTEM_HPP - -#include <vector> -#include <cmath> -#include <iostream> - -#include <boost/math/special_functions/sign.hpp> -#include <boost/numeric/odeint/external/mpi/mpi.hpp> - -namespace checked_math { - inline double pow( double x , double y ) - { - if( x==0.0 ) - // 0**y = 0, don't care for y = 0 or NaN - return 0.0; - using std::pow; - using std::abs; - return pow( abs(x) , y ); - } -} - -double signed_pow( double x , double k ) -{ - using boost::math::sign; - return checked_math::pow( x , k ) * sign(x); -} - -struct osc_chain { - const double m_kap, m_lam; - osc_chain( const double kap , const double lam ) - : m_kap( kap ) , m_lam( lam ) { } - - void operator()( const boost::numeric::odeint::mpi_state< std::vector<double> > &q , - boost::numeric::odeint::mpi_state< std::vector<double> > &dpdt ) const - { - const bool have_left = q.world.rank() > 0; - const bool have_right = q.world.rank() + 1 < q.world.size(); - double q_left = 0, q_right = 0; - boost::mpi::request r_left, r_right; - if(have_left) - { - q.world.isend(q.world.rank() - 1, 0, q().front()); - r_left = q.world.irecv(q.world.rank() - 1, 0, q_left); - } - if(have_right) - { - q.world.isend(q.world.rank() + 1, 0, q().back()); - r_right = q.world.irecv(q.world.rank() + 1, 0, q_right); - } - - double coupling_lr = 0; - if(have_left) - { - r_left.wait(); - coupling_lr = signed_pow( q_left - q()[0] , m_lam-1 ); - } - const size_t N = q().size(); - for(size_t i = 0 ; i < N-1 ; ++i) - { - dpdt()[i] = -signed_pow( q()[i] , m_kap-1 ) + coupling_lr; - coupling_lr = signed_pow( q()[i] - q()[i+1] , m_lam-1 ); - dpdt()[i] -= coupling_lr; - } - dpdt()[N-1] = -signed_pow( q()[N-1] , m_kap-1 ) + coupling_lr; - if(have_right) - { - r_right.wait(); - dpdt()[N-1] -= signed_pow( q()[N-1] - q_right , m_lam-1 ); - } - } - //] -}; - -#endif diff --git a/libs/numeric/odeint/performance/mpi/osc_chain_speedup.gnu b/libs/numeric/odeint/performance/mpi/osc_chain_speedup.gnu deleted file mode 100755 index 7f3877257..000000000 --- a/libs/numeric/odeint/performance/mpi/osc_chain_speedup.gnu +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env gnuplot - -set terminal pngcairo size 1000,1000 -set output "osc_chain_speedup.png" - -set multiplot layout 2,2 - -set key left - -set xrange [1:16] -set x2range [1:16] -set x2tics 8 format "" -set grid x2tics -set yrange [0:8] - -set title "short: speedup" -plot \ - "osc_chain_speedup-short.dat" i 0 u "block":"mul" w lp t "MPI" , \ - (x < 4 ? x : 4) lc 0 lt 0 t "target" - -unset key - -set title "long: speedup" -plot \ - "osc_chain_speedup-long.dat" i 0 u "block":"mul" w lp, \ - (x < 4 ? x : 4) lc 0 lt 0 - -set yrange [0:*] - -set title "short: time[s]" -plot \ - "osc_chain_speedup-short.dat" i 0 u "block":"med" w lp - -set title "long: time[s]" -plot \ - "osc_chain_speedup-long.dat" i 0 u "block":"med" w lp - -unset multiplot diff --git a/libs/numeric/odeint/performance/mpi/osc_chain_speedup.sh b/libs/numeric/odeint/performance/mpi/osc_chain_speedup.sh deleted file mode 100755 index 7a0ff7891..000000000 --- a/libs/numeric/odeint/performance/mpi/osc_chain_speedup.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -bench="bin/clang-linux-3.2/release/threading-multi/osc_chain_1d" - -repeat=5 -maxnodes=16 - -function run { - n=$1 - steps=$2 - for ((nodes=1 ; nodes < $maxnodes ; nodes++)) ; do - # swap stderr & stdout - mpirun -np $nodes $bench $n $steps $repeat 3>&1 1>&2 2>&3 - done -} - -function run_all { - printf "n\tsteps\tnodes\ttime\n" - run 256 1024 - run 4096 1024 - run 4194304 1 -} - -run_all | tee osc_chain_speedup.dat |