OpenQMC API
Loading...
Searching...
No Matches
lattice.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Contributors to the OpenQMC Project.
3
6
7#pragma once
8
9#include "gpu.h"
10#include "rank1.h"
11#include "sampler.h"
12#include "state.h"
13
14#include <cstddef>
15#include <cstdint>
16
17namespace oqmc
18{
19
21class LatticeImpl
22{
23 // See SamplerInterface for public API documentation.
25
26 static constexpr std::size_t cacheSize = 0;
27 static void initialiseCache(void* cache);
28
29 /*AUTO_DEFINED*/ LatticeImpl() = default;
31 OQMC_HOST_DEVICE LatticeImpl(int x, int y, int frame, int index,
32 const void* cache);
33
34 OQMC_HOST_DEVICE LatticeImpl newDomain(int key) const;
35 OQMC_HOST_DEVICE LatticeImpl newDomainSplit(int key, int size,
36 int index) const;
37 OQMC_HOST_DEVICE LatticeImpl newDomainDistrib(int key, int index) const;
38
39 template <int Size>
40 OQMC_HOST_DEVICE void drawSample(std::uint32_t sample[Size]) const;
41
42 template <int Size>
43 OQMC_HOST_DEVICE void drawRnd(std::uint32_t rnd[Size]) const;
44
45 State64Bit state;
46};
47
48inline void LatticeImpl::initialiseCache([[maybe_unused]] void* cache)
49{
50}
51
52inline LatticeImpl::LatticeImpl(State64Bit state) : state(state)
53{
54}
55
56inline LatticeImpl::LatticeImpl(int x, int y, int frame, int index,
57 [[maybe_unused]] const void* cache)
58 : state(x, y, frame, index)
59{
60 state = state.pixelDecorrelate();
61}
62
63inline LatticeImpl LatticeImpl::newDomain(int key) const
64{
65 return {state.newDomain(key)};
66}
67
68inline LatticeImpl LatticeImpl::newDomainSplit(int key, int size,
69 int index) const
70{
71 return {state.newDomainSplit(key, size, index)};
72}
73
74inline LatticeImpl LatticeImpl::newDomainDistrib(int key, int index) const
75{
76 return {state.newDomainDistrib(key, index)};
77}
78
79template <int Size>
80void LatticeImpl::drawSample(std::uint32_t sample[Size]) const
81{
82 shuffledRotatedLattice<Size>(state.sampleId, state.patternId, sample);
83}
84
85template <int Size>
86void LatticeImpl::drawRnd(std::uint32_t rnd[Size]) const
87{
88 state.drawRnd<Size>(rnd);
89}
91
107
108} // namespace oqmc
#define OQMC_HOST_DEVICE
Definition gpu.h:13
Public sampler API.
Definition sampler.h:111
EncodeKey decodeBits16(std::uint16_t value)
Decode a value back into a key.
Definition encode.h:81
Definition bntables.h:21