1#ifndef AMREX_GPU_DEVICE_BUFFER_H_
2#define AMREX_GPU_DEVICE_BUFFER_H_
3#include <AMReX_Config.H>
11#include <initializer_list>
16template <
typename T, std::enable_if_t<std::is_trivially_copyable_v<T>,
int> = 0>
21 Buffer (std::initializer_list<T> init) {
24 if (init.size() > 0) {
25 std::memcpy(
h_vect.data(), init.begin(), init.size()*
sizeof(T));
30 Buffer (T
const* h_p,
const std::size_t n) {
33 if (n > 0 && h_p !=
nullptr) {
34 std::memcpy(
h_vect.data(), h_p, n*
sizeof(T));
45 [[nodiscard]] T
const*
data () const noexcept {
48 [[nodiscard]] T*
data () noexcept {
74 [[nodiscard]] T&
operator[] (
const std::size_t i)
noexcept {
78 [[nodiscard]]
const T&
operator[] (
const std::size_t i)
const noexcept {
82 [[nodiscard]] std::size_t
size () const noexcept {
return h_vect.size(); }
84 [[nodiscard]]
bool empty () const noexcept {
return h_vect.size() == 0; }
86 void resize (
const std::size_t n)
noexcept {
Definition AMReX_GpuBuffer.H:18
T const * data() const noexcept
Definition AMReX_GpuBuffer.H:45
void reserve(const std::size_t n) noexcept
Definition AMReX_GpuBuffer.H:103
void push_back(const T &value) noexcept
Adds an element to the back of the host (CPU) vector. Does not update the device (GPU) vector,...
Definition AMReX_GpuBuffer.H:129
Buffer(std::initializer_list< T > init)
Definition AMReX_GpuBuffer.H:21
DeviceVector< T > d_vect
Definition AMReX_GpuBuffer.H:163
T const * hostData() const noexcept
Definition AMReX_GpuBuffer.H:52
T * data() noexcept
Definition AMReX_GpuBuffer.H:48
Buffer(T const *h_p, const std::size_t n)
Definition AMReX_GpuBuffer.H:30
T & operator[](const std::size_t i) noexcept
Changes the value of an element of the host (CPU) vector. Does not update the device (GPU) vector,...
Definition AMReX_GpuBuffer.H:74
void shrink_to_fit() noexcept
Definition AMReX_GpuBuffer.H:98
PinnedVector< T > h_vect
Definition AMReX_GpuBuffer.H:164
T * copyToHost() noexcept
Definition AMReX_GpuBuffer.H:145
bool empty() const noexcept
Definition AMReX_GpuBuffer.H:84
bool useDVect() const noexcept
Definition AMReX_GpuBuffer.H:159
void resize(const std::size_t n) noexcept
Definition AMReX_GpuBuffer.H:86
std::size_t size() const noexcept
Definition AMReX_GpuBuffer.H:82
T * copyToDeviceAsync() noexcept
Definition AMReX_GpuBuffer.H:133
void clear() noexcept
Definition AMReX_GpuBuffer.H:93
Buffer(const std::size_t n)
Definition AMReX_GpuBuffer.H:39
T * hostData() noexcept
Definition AMReX_GpuBuffer.H:53
Definition AMReX_PODVector.H:297
Definition AMReX_BaseFwd.H:52
void streamSynchronize() noexcept
Definition AMReX_GpuDevice.H:260
void dtoh_memcpy_async(void *p_h, const void *p_d, const std::size_t sz) noexcept
Definition AMReX_GpuDevice.H:303
bool inLaunchRegion() noexcept
Definition AMReX_GpuControl.H:92
void htod_memcpy_async(void *p_d, const void *p_h, const std::size_t sz) noexcept
Definition AMReX_GpuDevice.H:289