MUDA
Loading...
Searching...
No Matches
soa_sub_field.h
1#pragma once
2#include <muda/ext/field/sub_field_interface.h>
3
4namespace muda
5{
6namespace details
7{
8 struct SoACopyMap
9 {
10 uint32_t offset_in_base_struct;
11 uint32_t elem_byte_size;
12 };
13} // namespace details
14
15
16template <>
17class SubFieldImpl<FieldEntryLayout::SoA> : public SubFieldInterface
18{
19 friend class SubField;
20
21 DeviceBuffer<details::SoACopyMap> m_copy_map_buffer;
22 std::vector<details::SoACopyMap> m_h_copy_map_buffer;
23 uint32_t m_base_struct_stride = ~0;
24
25 protected:
26 virtual void build_impl() override;
27 virtual size_t require_total_buffer_byte_size(size_t element_count) override;
28 virtual void calculate_new_cores(std::byte* byte_buffer,
29 size_t total_bytes,
30 size_t element_count,
31 span<FieldEntryCore> new_cores) override;
32 virtual bool allow_inplace_shrink() const { return false; }
33
34 public:
35 using SubFieldInterface::SubFieldInterface;
36 virtual ~SubFieldImpl() override = default;
37};
38} // namespace muda
39
40#include "details/soa_sub_field.inl"
A std::vector like wrapper of cuda device memory, allows user to:
Definition device_buffer.h:46
Definition sub_field.h:18
Definition field.h:14
Definition sub_field_interface.h:15
Definition soa_sub_field.h:9