1 // Copyright (C) 2018 Intel Corporation 2 // 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 // 6 7 /// @file memory_descriptor.hpp 8 9 #ifndef ADE_MEMORY_DESCRIPTOR_HPP 10 #define ADE_MEMORY_DESCRIPTOR_HPP 11 12 #include "ade/util/memory_range.hpp" 13 14 #include "ade/memory/memory_types.hpp" 15 #include "ade/memory/memory_accessor.hpp" 16 17 namespace ade 18 { 19 20 class MemoryDescriptorRef; 21 class MemoryDescriptorView; 22 23 /// This class represents continuous buffer used in graph 24 /// It can have optional memory view, accessible to external users 25 class MemoryDescriptor final 26 { 27 public: 28 /// MemoryDescriptor constructor 29 /// 30 /// @param element_size Data element size in bytes 31 /// @param dims Memory dimensions in elements 32 explicit MemoryDescriptor(size_t element_size, 33 const memory::DynMdSize& dims); 34 MemoryDescriptor(const MemoryDescriptor&) = delete; 35 MemoryDescriptor& operator=(const MemoryDescriptor&) = delete; 36 ~MemoryDescriptor(); 37 38 /// Add events listener 39 /// 40 /// @param listener Listener to be added, must not be null 41 /// Same listener must not be added twice 42 void addListener(IMemoryAccessListener* listener); 43 44 /// Remove events listener 45 /// 46 /// @param listener Listener to be removed, must not be null 47 /// Listener must be previously added via addListener call 48 void removeListener(IMemoryAccessListener* listener); 49 50 using AccessHandle = MemoryAccessor::AccessHandle; 51 52 /// Notify all listeners about memory access 53 /// 54 /// @param span Span that represents a ROI of current view to be accessed 55 /// @param accessType Access type for this view, it must be Read, Write or ReadWrite 56 /// @returns Handle which later will be passed to commit 57 AccessHandle access(const memory::DynMdSpan& span, MemoryAccessType accessType); 58 59 /// Notify all listeners about memory commit 60 /// 61 /// @param handle Handle returned from successuful access call 62 void commit(AccessHandle handle); 63 64 /// Get memory dimensions 65 /// 66 /// @returns Dimensions 67 const memory::DynMdSize& dimensions() const; 68 69 /// Get buffer element size 70 /// 71 /// @returns Size in bytes, always greater than 0 72 std::size_t elementSize() const; 73 74 /// Update externally accessible memory view and notify all listeners 75 /// 76 /// @param view New memory view 77 void setExternalView(const memory::DynMdView<void>& view); 78 79 /// Returns externally accessible memory view if any 80 /// 81 /// @returns View into externally accessible memory or null view 82 memory::DynMdView<void> getExternalView() const; 83 84 private: 85 friend class MemoryDescriptorView; 86 87 const size_t m_elementSize; 88 const memory::DynMdSize m_dims; 89 memory::DynMdView<void> m_externalView; 90 91 MemoryAccessor m_accessor; 92 }; 93 94 } 95 96 #endif // ADE_MEMORY_DESCRIPTOR_HPP 97