vSMC  v3.0.0
Scalable Monte Carlo
backend_seq.hpp
Go to the documentation of this file.
1 //============================================================================
2 // vSMC/include/vsmc/smp/backend_seq.hpp
3 //----------------------------------------------------------------------------
4 // vSMC: Scalable Monte Carlo
5 //----------------------------------------------------------------------------
6 // Copyright (c) 2013-2016, Yan Zhou
7 // All rights reserved.
8 //
9 // Redistribution and use in source and binary forms, with or without
10 // modification, are permitted provided that the following conditions are met:
11 //
12 // Redistributions of source code must retain the above copyright notice,
13 // this list of conditions and the following disclaimer.
14 //
15 // Redistributions in binary form must reproduce the above copyright notice,
16 // this list of conditions and the following disclaimer in the documentation
17 // and/or other materials provided with the distribution.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS
20 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 // POSSIBILITY OF SUCH DAMAGE.
30 //============================================================================
31 
32 #ifndef VSMC_SMP_BACKEND_SEQ_HPP
33 #define VSMC_SMP_BACKEND_SEQ_HPP
34 
36 
37 namespace vsmc
38 {
39 
42 template <typename T, typename Derived>
43 class SamplerEvalSMP<T, Derived, BackendSEQ>
44  : public SamplerEvalBase<T, Derived>
45 {
46  public:
47  std::size_t operator()(std::size_t iter, Particle<T> &particle)
48  {
49  this->eval_pre(iter, particle);
50  std::size_t accept = this->eval_range(iter, particle.range());
51  this->eval_post(iter, particle);
52 
53  return accept;
54  }
55 
56  protected:
57  VSMC_DEFINE_SMP_BACKEND_SPECIAL(SEQ, SamplerEval)
58 }; // class SamplerEvalSMP
59 
62 template <typename T, typename Derived>
63 class MonitorEvalSMP<T, Derived, BackendSEQ>
64  : public MonitorEvalBase<T, Derived>
65 {
66  public:
67  void operator()(
68  std::size_t iter, std::size_t dim, Particle<T> &particle, double *r)
69  {
70  this->eval_pre(iter, particle);
71  this->eval_range(iter, dim, particle.range(), r);
72  this->eval_post(iter, particle);
73  }
74 
75  protected:
76  VSMC_DEFINE_SMP_BACKEND_SPECIAL(SEQ, MonitorEval)
77 }; // class MonitorEvalSMP
78 
81 template <typename T, typename Derived>
83 
86 template <typename T, typename Derived>
88 
89 } // namespace vsmc
90 
91 #endif // VSMC_SMP_BACKEND_SEQ_HPP
range_type range(size_type begin, size_type end)
Get a ParticleRange<T> object.
Definition: particle.hpp:207
Definition: monitor.hpp:48
Particle class representing the whole particle set.
Definition: particle.hpp:83
Monitor<T>::eval_type.
Monitor evalution base dispatch class.
void operator()(std::size_t iter, std::size_t dim, Particle< T > &particle, double *r)
Definition: backend_seq.hpp:67
#define VSMC_DEFINE_SMP_BACKEND_SPECIAL(Impl, Name)
Sampler<T>::eval_type subtype.
Definition: backend_seq.hpp:43
std::size_t operator()(std::size_t iter, Particle< T > &particle)
Definition: backend_seq.hpp:47
Monitor<T>::eval_type subtype.
Definition: backend_seq.hpp:63
Sampler evaluation base dispatch class.
Sampler<T>::eval_type.