GitOrigin-RevId: 0cd1d202dd
tags/v1.4.0-rc1
| @@ -269,6 +269,12 @@ class CudaCompNode::CompNodeImpl final: public CompNode::Impl { | |||||
| return {tot, free}; | return {tot, free}; | ||||
| } | } | ||||
| #if !MGB_BUILD_SLIM_SERVING | |||||
| std::pair<size_t, size_t> get_free_left_and_right(size_t begin_ptr, size_t end_ptr) override { | |||||
| return m_mem_alloc->get_free_left_and_right(begin_ptr, end_ptr); | |||||
| } | |||||
| #endif | |||||
| Locator locator() override { | Locator locator() override { | ||||
| return m_locator; | return m_locator; | ||||
| } | } | ||||
| @@ -21,6 +21,27 @@ using namespace mem_alloc; | |||||
| /* ===================== MemAllocImplHelper ===================== */ | /* ===================== MemAllocImplHelper ===================== */ | ||||
| #if !MGB_BUILD_SLIM_SERVING | |||||
| std::pair<size_t, size_t> MemAllocImplHelper::get_free_left_and_right(size_t begin_ptr, size_t end_ptr) { | |||||
| MGB_LOCK_GUARD(m_mutex); | |||||
| auto iter = m_free_blk_addr.lower_bound(begin_ptr); | |||||
| size_t left_free = 0, right_free = 0; | |||||
| if (iter != m_free_blk_addr.begin()) { | |||||
| auto prev = iter; | |||||
| prev --; | |||||
| if (prev->first + prev->second.size == begin_ptr) { | |||||
| left_free = prev->second.size; | |||||
| } | |||||
| } | |||||
| if (iter != m_free_blk_addr.end()) { | |||||
| if (iter->first == end_ptr) { | |||||
| right_free = iter->second.size; | |||||
| } | |||||
| } | |||||
| return {left_free, right_free}; | |||||
| } | |||||
| #endif | |||||
| MemAllocImplHelper::MemAddr MemAllocImplHelper::do_alloc( | MemAllocImplHelper::MemAddr MemAllocImplHelper::do_alloc( | ||||
| size_t size, bool allow_from_parent, bool log_stat_on_error) { | size_t size, bool allow_from_parent, bool log_stat_on_error) { | ||||
| @@ -115,6 +115,10 @@ class MemAllocImplHelper: virtual public MemAllocBase { | |||||
| //! get free mem for this allocator, without locking | //! get free mem for this allocator, without locking | ||||
| FreeMemStat get_free_memory_self_unsafe(); | FreeMemStat get_free_memory_self_unsafe(); | ||||
| #if !MGB_BUILD_SLIM_SERVING | |||||
| std::pair<size_t, size_t> get_free_left_and_right(size_t begin_ptr, size_t end_ptr) override; | |||||
| #endif | |||||
| public: | public: | ||||
| void print_memory_state() override; | void print_memory_state() override; | ||||
| @@ -352,6 +352,10 @@ class CompNode { | |||||
| } | } | ||||
| #if !MGB_BUILD_SLIM_SERVING | #if !MGB_BUILD_SLIM_SERVING | ||||
| std::pair<size_t, size_t> get_free_left_and_right(size_t begin_ptr, size_t end_ptr) { | |||||
| return m_impl->get_free_left_and_right(begin_ptr, end_ptr); | |||||
| } | |||||
| size_t get_used_memory() const { | size_t get_used_memory() const { | ||||
| return m_impl->get_used_memory(); | return m_impl->get_used_memory(); | ||||
| } | } | ||||
| @@ -535,6 +539,9 @@ class CompNode { | |||||
| virtual std::pair<size_t, size_t> get_mem_status_bytes() = 0; | virtual std::pair<size_t, size_t> get_mem_status_bytes() = 0; | ||||
| #if !MGB_BUILD_SLIM_SERVING | #if !MGB_BUILD_SLIM_SERVING | ||||
| virtual std::pair<size_t, size_t> get_free_left_and_right(size_t x, size_t y) { | |||||
| return {x - x, y - y}; | |||||
| } | |||||
| virtual size_t get_used_memory() { | virtual size_t get_used_memory() { | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -134,6 +134,15 @@ class MemAllocBase { | |||||
| */ | */ | ||||
| virtual FreeMemStat get_free_memory_dev() = 0; | virtual FreeMemStat get_free_memory_dev() = 0; | ||||
| #if !MGB_BUILD_SLIM_SERVING | |||||
| /*! | |||||
| * \brief get free memory adjacent to interval [begin_ptr, end_ptr] | |||||
| */ | |||||
| virtual std::pair<size_t, size_t> get_free_left_and_right(size_t begin_ptr, size_t end_ptr) { | |||||
| return {0, 0}; | |||||
| } | |||||
| #endif | |||||
| virtual ~MemAllocBase() = default; | virtual ~MemAllocBase() = default; | ||||
| }; | }; | ||||