#include "Config.h"
#include "StageGenerator.h"
+#include "MemoryManager.h"
namespace neurun
{
Backend(const neurun::model::Operands &operand_ctx)
: ::neurun::backend::Backend{
std::make_shared<Config>(),
- std::make_shared<StageGenerator>(operand_ctx, std::make_shared<TensorBuilder>())}
+ std::make_shared<StageGenerator>(
+ operand_ctx, std::make_shared<TensorBuilder>(createMemoryManager()))}
{
// DO NOTHING
}
#include <arm_compute/runtime/CL/CLMemoryGroup.h>
#include "acl_common/AclMemoryManager.h"
-//#include "acl_common/AclLinearMemoryManager.h"
+#include "acl_common/AclLinearMemoryManager.h"
#include "operand/CLTensor.h"
#include "operand/CLSubTensor.h"
::neurun::backend::acl_common::AclMemoryManager<operand::CLTensor, operand::CLSubTensor,
operand::Object>;
-#if 1
-using LinearMemoryManager =
- ::neurun::backend::acl_common::LinearAclMemoryManager<operand::CLTensor, operand::CLSubTensor,
- operand::Object>;
-#else
using LinearMemoryManager = ::neurun::backend::acl_common::AclLinearMemoryManager<
operand::CLTensor, operand::CLSubTensor, operand::Object, ::arm_compute::MemoryManagerOnDemand,
::arm_compute::PoolManager, ::arm_compute::BlobLifetimeManager,
::arm_compute::CLBufferAllocator, ::arm_compute::CLMemoryGroup>;
-#endif
MemoryManager *createMemoryManager()
{
+ return new MemoryManager();
+
+// TODO Enable this after TensorBuilders' notify{First|Last}UseIf lands
+#if 0
const std::string executor_str =
config::ConfigManager::instance().get<std::string>(config::EXECUTOR);
+
if (executor_str == "Linear")
{
VERBOSE(acl_cl_createMemoryManager) << "AclMemoryManager as Linear" << std::endl;
VERBOSE(acl_cl_createMemoryManager) << "AclMemoryManager" << std::endl;
return new MemoryManager();
}
+#endif
}
} // namespace acl_cl
class TemplTensorBuilder : public ITensorBuilder
{
public:
- TemplTensorBuilder();
+ using T_AclMemoryManager = AclMemoryManager<T_Tensor, T_SubTensor, T_Object>;
+
+ TemplTensorBuilder(T_AclMemoryManager *mem_mgr);
/**
* @brief Register tensor information to allocate on ACL-CL backend
model::OperandIndexMap<compiler::SubTensorInfo> _subtensor_info_map;
model::OperandIndexMap<bool> _apply_dim_correction_map;
model::Layout _layout;
-
- std::unique_ptr<AclMemoryManager<T_Tensor, T_SubTensor, T_Object>> _mem_mgr;
+ std::unique_ptr<T_AclMemoryManager> _mem_mgr;
};
} // namespace acl_common
{
template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object>
-TemplTensorBuilder<T_ITensor, T_Tensor, T_SubTensor, T_Object>::TemplTensorBuilder()
+TemplTensorBuilder<T_ITensor, T_Tensor, T_SubTensor, T_Object>::TemplTensorBuilder(
+ T_AclMemoryManager *mem_mgr)
+ : _mem_mgr{mem_mgr}
{
- // TODO Replace this with createMemoryManager() at StageGenerator's ctor
- _mem_mgr = nnfw::cpp14::make_unique<AclMemoryManager<T_Tensor, T_SubTensor, T_Object>>();
assert(_mem_mgr);
}
#include "Config.h"
#include "StageGenerator.h"
+#include "MemoryManager.h"
namespace neurun
{
Backend(const neurun::model::Operands &operand_ctx)
: ::neurun::backend::Backend{
std::make_shared<Config>(),
- std::make_shared<StageGenerator>(operand_ctx, std::make_shared<TensorBuilder>())}
+ std::make_shared<StageGenerator>(
+ operand_ctx, std::make_shared<TensorBuilder>(createMemoryManager()))}
{
// DO NOTHING
}
#include <arm_compute/runtime/MemoryGroup.h>
#include "acl_common/AclMemoryManager.h"
-//#include "acl_common/AclLinearMemoryManager.h"
+#include "acl_common/AclLinearMemoryManager.h"
#include "operand/NETensor.h"
#include "operand/NESubTensor.h"
::neurun::backend::acl_common::AclMemoryManager<operand::NETensor, operand::NESubTensor,
::neurun::backend::operand::Object>;
-#if 1
-using LinearMemoryManager =
- ::neurun::backend::acl_common::LinearAclMemoryManager<operand::NETensor, operand::NESubTensor,
- ::neurun::backend::operand::Object>;
-#else
using LinearMemoryManager = ::neurun::backend::acl_common::AclLinearMemoryManager<
operand::NETensor, operand::NESubTensor, ::neurun::backend::operand::Object,
::arm_compute::MemoryManagerOnDemand, ::arm_compute::PoolManager,
::arm_compute::OffsetLifetimeManager, ::arm_compute::Allocator, ::arm_compute::MemoryGroup>;
-#endif
MemoryManager *createMemoryManager()
{
+ return new MemoryManager();
+
+// TODO Enable this after TensorBuilders' notify{First|Last}UseIf lands
+#if 0
const std::string executor_str =
config::ConfigManager::instance().get<std::string>(config::EXECUTOR);
if (executor_str == "Linear")
VERBOSE(acl_neon_createMemoryManager) << "AclMemoryManager" << std::endl;
return new MemoryManager();
}
+#endif
}
} // namespace acl_neon