1#ifndef AMREX_GPU_ASYNC_ARRAY_H_
2#define AMREX_GPU_ASYNC_ARRAY_H_
3#include <AMReX_Config.H>
18requires (std::is_trivially_copyable_v<T>)
25 if (n == 0) {
return; }
27 std::memcpy(h_data, h_p, n*
sizeof(T));
38 requires (std::is_standard_layout_v<T> && std::is_trivial_v<T>)
41 if (n == 0) {
return; }
61 [[nodiscard]] T
const*
data () const noexcept {
return (d_data !=
nullptr) ? d_data : h_data; }
62 [[nodiscard]] T*
data () noexcept {
return (d_data !=
nullptr) ? d_data : h_data; }
73 if (n == 0) {
return; }
83 std::memcpy(h_p, h_data, n*
sizeof(T));
Memory arena base class and global arena accessors.
virtual void * alloc(std::size_t sz)=0
Allocate sz bytes from this arena.
AsyncArray(T const *h_p, const std::size_t n)
Definition AMReX_GpuAsyncArray.H:23
void copyToHost(T *h_p, std::size_t n) const
Definition AMReX_GpuAsyncArray.H:71
AsyncArray(AsyncArray const &)=delete
AsyncArray(AsyncArray &&)=delete
void clear()
Definition AMReX_GpuAsyncArray.H:63
T * data() noexcept
Definition AMReX_GpuAsyncArray.H:62
~AsyncArray()
Definition AMReX_GpuAsyncArray.H:54
T const * data() const noexcept
Definition AMReX_GpuAsyncArray.H:61
AsyncArray(T const *h_p, const std::size_t n)
Definition AMReX_GpuAsyncArray.H:23
AsyncArray(const std::size_t n)
Definition AMReX_GpuAsyncArray.H:37
Arena * The_Pinned_Arena()
Definition AMReX_Arena.cpp:879
Arena * The_Arena()
Definition AMReX_Arena.cpp:839
Definition AMReX_BaseFwd.H:60
void freeAsync(Arena *arena, void *mem) noexcept
Definition AMReX_GpuDevice.H:364
bool inLaunchRegion() noexcept
Definition AMReX_GpuControl.H:88
void dtoh_memcpy(void *p_h, const void *p_d, const std::size_t sz) noexcept
Definition AMReX_GpuDevice.H:515
void htod_memcpy_async(void *p_d, const void *p_h, const std::size_t sz) noexcept
Definition AMReX_GpuDevice.H:440
Definition AMReX_Amr.cpp:50