Add buildSubtensor() and objects() into AclMemoryManager to be used by AclTensorManager in the future
Apply buildSubtensor() into TemplTensorBuilder
Remove unnecessary namespace
Signed-off-by: Yongseop Kim <yons.kim@samsung.com>
{
using MemoryManager =
- ::neurun::backend::acl_common::AclMemoryManager<operand::CLTensor, operand::CLSubTensor,
- operand::Object>;
+ ::neurun::backend::acl_common::AclMemoryManager<operand::ICLTensor, operand::CLTensor,
+ operand::CLSubTensor, operand::Object>;
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>;
+ operand::ICLTensor, operand::CLTensor, operand::CLSubTensor, operand::Object,
+ ::arm_compute::MemoryManagerOnDemand, ::arm_compute::PoolManager,
+ ::arm_compute::BlobLifetimeManager, ::arm_compute::CLBufferAllocator,
+ ::arm_compute::CLMemoryGroup>;
MemoryManager *createMemoryManager()
{
namespace acl_common
{
-template <typename T_Tensor, typename T_SubTensor, typename T_Object, typename T_MemoryManager,
- typename T_PoolManager, typename T_LifetimeManager, typename T_Allocator,
- typename T_MemoryGroup>
-class AclLinearMemoryManager : public AclMemoryManager<T_Tensor, T_SubTensor, T_Object>
+template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object,
+ typename T_MemoryManager, typename T_PoolManager, typename T_LifetimeManager,
+ typename T_Allocator, typename T_MemoryGroup>
+class AclLinearMemoryManager : public AclMemoryManager<T_ITensor, T_Tensor, T_SubTensor, T_Object>
{
public:
AclLinearMemoryManager()
namespace acl_common
{
-template <typename T_Tensor, typename T_SubTensor, typename T_Object>
+template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object>
class AclMemoryManager : public backend::IMemoryManager
{
public:
virtual void startLifetime(const model::OperandIndex &) {}
virtual void finishLifetime(const model::OperandIndex &) {}
+
+ // TODO Remove this
virtual std::shared_ptr<::arm_compute::IMemoryManager> internal_buffer_manager()
{
return nullptr;
_tensors[ind] = tensor;
}
+ void buildSubtensor(std::shared_ptr<T_ITensor> parent_tensor,
+ const model::OperandIndex &child_ind, const ::arm_compute::TensorShape &shape,
+ const ::arm_compute::Coordinates &coordinates, size_t rank,
+ bool extent_parent)
+ {
+ auto subtensor =
+ std::make_shared<T_SubTensor>(parent_tensor.get(), shape, coordinates, rank, extent_parent);
+ _subtensors[child_ind] = subtensor;
+ }
+
std::shared_ptr<T_Object> wrapTensor(const model::OperandIndex &ind)
{
if (_objects.find(ind) != _objects.end())
model::OperandIndexMap<std::shared_ptr<T_SubTensor>> &subtensors(void) { return _subtensors; }
+ model::OperandIndexMap<std::shared_ptr<T_Object>> &objects(void) { return _objects; }
+
private:
model::OperandIndexMap<std::shared_ptr<T_Tensor>> _tensors;
model::OperandIndexMap<std::shared_ptr<T_SubTensor>> _subtensors;
class TemplTensorBuilder : public ITensorBuilder
{
public:
- using T_AclMemoryManager = AclMemoryManager<T_Tensor, T_SubTensor, T_Object>;
+ using T_AclMemoryManager = AclMemoryManager<T_ITensor, T_Tensor, T_SubTensor, T_Object>;
TemplTensorBuilder(T_AclMemoryManager *mem_mgr);
_apply_dim_correction_map[current]);
::arm_compute::Coordinates coordinates =
asTensorCoordinate(info.offset(), frontend_layout, backend_layout);
- auto tensor = std::make_shared<T_SubTensor>(parent_tensor.get(), shape, coordinates,
- info.shape().rank(), true);
- subtensors[current] = tensor;
+ _mem_mgr->buildSubtensor(parent_tensor, current, shape, coordinates, info.shape().rank(),
+ true);
stack.pop();
}
}
{
using MemoryManager =
- ::neurun::backend::acl_common::AclMemoryManager<operand::NETensor, operand::NESubTensor,
+ ::neurun::backend::acl_common::AclMemoryManager<operand::INETensor, operand::NETensor,
+ operand::NESubTensor,
::neurun::backend::operand::Object>;
using LinearMemoryManager = ::neurun::backend::acl_common::AclLinearMemoryManager<
- operand::NETensor, operand::NESubTensor, ::neurun::backend::operand::Object,
+ operand::INETensor, operand::NETensor, operand::NESubTensor, ::neurun::backend::operand::Object,
::arm_compute::MemoryManagerOnDemand, ::arm_compute::PoolManager,
::arm_compute::OffsetLifetimeManager, ::arm_compute::Allocator, ::arm_compute::MemoryGroup>;