STORMM Source Documentation
Loading...
Searching...
No Matches
summation.h
1// -*-c++-*-
2#ifndef STORMM_SUMMATION_H
3#define STORMM_SUMMATION_H
4
5#include <vector>
6#include "copyright.h"
7#include "Accelerator/hybrid.h"
8#include "DataTypes/common_types.h"
9#include "DataTypes/stormm_vector_types.h"
10#include "UnitTesting/approx.h"
11
12namespace stormm {
13namespace stmath {
14
15using card::Hybrid;
16using card::HybridTargetLevel;
17using errors::rtErr;
18using testing::Approx;
19using testing::ComparisonType;
20
22enum class PrefixSumType {
23 EXCLUSIVE, INCLUSIVE
24};
25
26// \brief Compute an in-place prefix sum over a vector. For "capped" prefix sums, which are
40template <typename TBase>
41void prefixSumInPlace(TBase* vdata, const size_t n_elements, const PrefixSumType style,
42 const char* caller = nullptr);
43
44template <typename TBase>
45void prefixSumInPlace(std::vector<TBase> *v, const PrefixSumType style,
46 const char* caller = nullptr);
47
48template <typename TBase>
49void prefixSumInPlace(Hybrid<TBase> *v, const PrefixSumType style, const char* caller = nullptr);
51
68template <typename TSum, typename TBase>
69TSum sum(const TBase* v, const size_t vlen);
70
71template <typename TSum, typename TBase>
72TSum sum(const std::vector<TBase> &v);
73
74template <typename TSum, typename TBase>
75TSum sum(const Hybrid<TBase> &hb);
76
77template <typename TSum, typename TBase>
78TSum sumTuple2(const TBase* v, const size_t vlen);
79
80template <typename TSum, typename TBase>
81TSum sumTuple2(const std::vector<TBase> &v);
82
83template <typename TSum, typename TBase>
84TSum sumTuple2(const Hybrid<TBase> &hb);
85
86template <typename TSum, typename TBase>
87TSum sumTuple3(const TBase* v, const size_t vlen);
88
89template <typename TSum, typename TBase>
90TSum sumTuple3(const std::vector<TBase> &v);
91
92template <typename TSum, typename TBase>
93TSum sumTuple3(const Hybrid<TBase> &hb);
94
95template <typename TSum, typename TBase>
96TSum sumTuple4(const TBase* v, const size_t vlen);
97
98template <typename TSum, typename TBase>
99TSum sumTuple4(const std::vector<TBase> &v);
100
101template <typename TSum, typename TBase>
102TSum sumTuple4(const Hybrid<TBase> &hb);
104
125template <typename Ta, typename Tb>
126std::vector<Ta> sum(const std::vector<Ta> &va, const std::vector<Tb> &vb, double afac = 1.0,
127 double bfac = 1.0);
128
129template <typename Ta, typename Tb, typename Tc>
130std::vector<Ta> sum(const std::vector<Ta> &va, const std::vector<Tb> &vb,
131 const std::vector<Tc> &vc, double afac = 1.0, double bfac = 1.0,
132 double cfac = 1.0);
133
134template <typename Ta, typename Tb, typename Tc, typename Td>
135std::vector<Ta> sum(const std::vector<Ta> &va, const std::vector<Tb> &vb,
136 const std::vector<Tc> &vc, const std::vector<Td> &vd, double afac = 1.0,
137 double bfac = 1.0, double cfac = 1.0, double dfac = 1.0);
138
139template <typename Ta, typename Tb>
140void sum(Ta* va, const Tb* vb, const size_t length, double afac = 1.0, double bfac = 1.0);
141
142template <typename Ta, typename Tb, typename Tc>
143void sum(Ta* va, const Tb* vb, const Tc* vc, const size_t length, double afac = 1.0,
144 double bfac = 1.0, double cfac = 1.0);
145
146template <typename Ta, typename Tb, typename Tc, typename Td>
147void sum(Ta* va, const Tb* vb, const Tc* vc, const Td* vd, const size_t length, double afac = 1.0,
148 double bfac = 1.0, double cfac = 1.0, double dfac = 1.0);
149
150template <typename Ta, typename Tb>
151void sum(std::vector<Ta> *va, const std::vector<Tb> &vb, double afac = 1.0, double bfac = 1.0);
152
153template <typename Ta, typename Tb, typename Tc>
154void sum(std::vector<Ta> *va, const std::vector<Tb> &vb, const std::vector<Tc> &vc,
155 double afac = 1.0, double bfac = 1.0, double cfac = 1.0);
156
157template <typename Ta, typename Tb, typename Tc, typename Td>
158void sum(std::vector<Ta> *va, const std::vector<Tb> &vb, const std::vector<Tc> &vc,
159 const std::vector<Td> &vd, double afac = 1.0, double bfac = 1.0, double cfac = 1.0,
160 double dfac = 1.0);
161
162template <typename Ta, typename Tb>
163void sum(Hybrid<Ta> *va, const Hybrid<Tb> &vb, double afac = 1.0, double bfac = 1.0);
164
165template <typename Ta, typename Tb, typename Tc>
166void sum(Hybrid<Ta> *va, const Hybrid<Tb> &vb, const Hybrid<Tc> &vc, double afac = 1.0,
167 double bfac = 1.0, double cfac = 1.0);
168
169template <typename Ta, typename Tb, typename Tc, typename Td>
170void sum(Hybrid<Ta> *va, const Hybrid<Tb> &vb, const Hybrid<Tc> &vc, const Hybrid<Td> &vd,
171 double afac = 1.0, double bfac = 1.0, double cfac = 1.0, double dfac = 1.0);
173
174} // namespace stmath
175} // namespace stormm
176
177#include "summation.tpp"
178
179#endif
180
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202