17 #ifndef ROOFIT_ROOFITCORE_INC_BATCHHELPERS_H_
18 #define ROOFIT_ROOFITCORE_INC_BATCHHELPERS_H_
27 namespace BatchHelpers {
29 constexpr
size_t block = 1024;
32 const double * __restrict ptr;
35 constexpr
double operator[](std::size_t i)
const {
38 constexpr
bool batch()
const {
44 size_t size, nBatches;
47 size_t findSize(std::vector< RooSpan<const double> > parameters);
49 EvaluateInfo getInfo(std::vector<const RooRealProxy*> parameters,
size_t begin,
size_t batchSize);
50 EvaluateInfo init(std::vector< RooRealProxy > parameters,
51 std::vector< ArrayWrapper* > wrappers,
52 std::vector< double*> arrays,
53 size_t begin,
size_t batchSize );
57 template <
class T =
double>
58 class BracketAdapter {
61 constexpr BracketAdapter(T payload) noexcept :
64 constexpr
double operator[](std::size_t)
const {
68 constexpr
operator double()
const {
72 constexpr
bool isBatch() const noexcept {
81 class BracketAdapterWithMask {
83 BracketAdapterWithMask(
double payload,
const RooSpan<const double>& batch) noexcept :
84 _isBatch(!batch.empty()),
86 _pointer(batch.empty() ? &_payload : batch.data()),
87 _mask(batch.empty() ? 0 : ~static_cast<
size_t>(0))
91 BracketAdapterWithMask(
const BracketAdapterWithMask& other) noexcept:
92 _isBatch(other._isBatch),
93 _payload(other._payload),
94 _pointer(other._isBatch ? other._pointer : &_payload),
99 BracketAdapterWithMask& operator= (
const BracketAdapterWithMask& other) =
delete;
101 inline double operator[](std::size_t i)
const noexcept {
102 return _pointer[ i & _mask];
105 inline bool isBatch() const noexcept {
111 const double _payload;
112 const double* __restrict
const _pointer;