2#ifndef STORMM_SUMMATION_H
3#define STORMM_SUMMATION_H
7#include "Accelerator/hybrid.h"
8#include "DataTypes/common_types.h"
9#include "DataTypes/stormm_vector_types.h"
10#include "UnitTesting/approx.h"
16using card::HybridTargetLevel;
19using testing::ComparisonType;
22enum class PrefixSumType {
40template <
typename TBase>
41void prefixSumInPlace(TBase* vdata,
const size_t n_elements,
const PrefixSumType style,
42 const char* caller =
nullptr);
44template <
typename TBase>
45void prefixSumInPlace(std::vector<TBase> *v,
const PrefixSumType style,
46 const char* caller =
nullptr);
48template <
typename TBase>
49void prefixSumInPlace(
Hybrid<TBase> *v,
const PrefixSumType style,
const char* caller =
nullptr);
68template <
typename TSum,
typename TBase>
69TSum sum(
const TBase* v,
const size_t vlen);
71template <
typename TSum,
typename TBase>
72TSum sum(
const std::vector<TBase> &v);
74template <
typename TSum,
typename TBase>
77template <
typename TSum,
typename TBase>
78TSum sumTuple2(
const TBase* v,
const size_t vlen);
80template <
typename TSum,
typename TBase>
81TSum sumTuple2(
const std::vector<TBase> &v);
83template <
typename TSum,
typename TBase>
86template <
typename TSum,
typename TBase>
87TSum sumTuple3(
const TBase* v,
const size_t vlen);
89template <
typename TSum,
typename TBase>
90TSum sumTuple3(
const std::vector<TBase> &v);
92template <
typename TSum,
typename TBase>
95template <
typename TSum,
typename TBase>
96TSum sumTuple4(
const TBase* v,
const size_t vlen);
98template <
typename TSum,
typename TBase>
99TSum sumTuple4(
const std::vector<TBase> &v);
101template <
typename TSum,
typename TBase>
125template <
typename Ta,
typename Tb>
126std::vector<Ta> sum(
const std::vector<Ta> &va,
const std::vector<Tb> &vb,
double afac = 1.0,
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,
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);
139template <
typename Ta,
typename Tb>
140void sum(Ta* va,
const Tb* vb,
const size_t length,
double afac = 1.0,
double bfac = 1.0);
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);
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);
150template <
typename Ta,
typename Tb>
151void sum(std::vector<Ta> *va,
const std::vector<Tb> &vb,
double afac = 1.0,
double bfac = 1.0);
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);
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,
162template <
typename Ta,
typename Tb>
165template <
typename Ta,
typename Tb,
typename Tc>
167 double bfac = 1.0,
double cfac = 1.0);
169template <
typename Ta,
typename Tb,
typename Tc,
typename Td>
171 double afac = 1.0,
double bfac = 1.0,
double cfac = 1.0,
double dfac = 1.0);
177#include "summation.tpp"
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202