!1380 Fix error of single_op memory free.

From: @zhao_zhixuan
Reviewed-by: @xchu42,@ji_chen
Signed-off-by: @ji_chen
pull/1380/MERGE
mindspore-ci-bot 4 years ago committed by Gitee
commit e0c79f8f39

@ -356,6 +356,14 @@ void CachingAllocator::FreeBlocks() {
(void) FreeCachedBlocks();
}
void CachingAllocator::TryFreeBlocks() {
GELOGI("Try free blocks.");
std::lock_guard<std::recursive_mutex> lock(mutex_);
if (allocated_blocks_.empty()) {
(void) FreeCachedBlocks();
}
}
void CachingAllocator::FreeBlockBins() {
GELOGI("Free block bins.");
std::lock_guard<std::recursive_mutex> lock(mutex_);

@ -94,6 +94,13 @@ class CachingAllocator {
///
Status Free(uint8_t *memory_addr, uint32_t device_id = 0);
///
/// @ingroup ge_graph
/// @brief try to free memory when no memory is referenced
/// @return void
///
void TryFreeBlocks();
private:
///

@ -19,6 +19,9 @@
#include <mutex>
#include <string>
#include "graph/manager/graph_mem_allocator.h"
#include "graph/manager/graph_caching_allocator.h"
namespace ge {
FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY SingleOpManager::~SingleOpManager() {
for (auto &it : stream_resources_) {
@ -69,6 +72,7 @@ FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY Status SingleOpManager::Release
delete it->second;
it->second = nullptr;
(void)stream_resources_.erase(it);
MemManager::Instance().CachingInstance(RT_MEMORY_HBM).TryFreeBlocks();
return SUCCESS;
}

Loading…
Cancel
Save