2 #ifndef _NNDEPLOY_NET_TENSOR_POOL_H_
3 #define _NNDEPLOY_NET_TENSOR_POOL_H_
52 std::vector<std::shared_ptr<TensorUsageRecord>>
breadth_;
73 std::vector<TensorWrapper *> &tensor_repository,
74 std::vector<OpWrapper *> &op_repository);
122 device::Device *device, std::vector<TensorWrapper *> &tensor_repository,
123 std::vector<OpWrapper *> &op_repository) = 0;
131 template <
typename T>
134 device::Device *device, std::vector<TensorWrapper *> &tensor_repository,
135 std::vector<OpWrapper *> &op_repository) {
136 return new T(device, tensor_repository, op_repository);
145 std::map<TensorPoolType, std::shared_ptr<TensorPoolCreator>> &
153 template <
typename T>
172 std::vector<TensorWrapper *> &tensor_repository,
173 std::vector<OpWrapper *> &op_repository);
176 std::vector<OpWrapper *> &consumers,
177 std::vector<OpWrapper *> &op_repository);
180 std::vector<std::array<int, 2>> &intervals);
183 const std::vector<std::shared_ptr<TensorUsageRecord>>
184 &tensor_usage_records);
186 void chunkPrint(
const std::vector<std::shared_ptr<Chunk>> &chunks);
190 const std::string &src);
virtual TensorPool * createTensorPool(device::Device *device, std::vector< TensorWrapper * > &tensor_repository, std::vector< OpWrapper * > &op_repository)=0
virtual ~TensorPoolCreator()
virtual base::Status allocate()=0
virtual base::Status deallocateTensor(device::Tensor *tensor, int op_index=-1)=0
std::vector< OpWrapper * > op_repository_
virtual base::Status allocateOp(op::Op *op)=0
virtual base::Status deinitTensorUsageRecordMap()=0
virtual base::Status allocateTensor(device::Tensor *tensor)=0
virtual base::Status deallocate()=0
virtual int64_t getMemorySize()
获取推理所需的内存大小
virtual base::Status deinitOpIndexMap()=0
TensorPool(device::Device *device, std::vector< TensorWrapper * > &tensor_repository, std::vector< OpWrapper * > &op_repository)
std::vector< TensorWrapper * > tensor_repository_
virtual base::Status initOpIndexMap()=0
virtual base::Status initTensorUsageRecordMap()=0
virtual base::Status deallocateOp(op::Op *op)=0
virtual base::Status setIsExternal(bool is_external)
virtual base::Status setMemory(device::Buffer *buffer)
设置推理所需的内存(推理内存由外部分配)
TypeTensorPoolRegister(TensorPoolType type)
#define NNDEPLOY_CC_API
api
std::vector< int > IntVector
TensorPool * createTensorPool(TensorPoolType type, device::Device *device, std::vector< TensorWrapper * > &tensor_repository, std::vector< OpWrapper * > &op_repository)
Create a TensorPool object.
bool isInterval(std::array< int, 2 > &interval, std::vector< std::array< int, 2 >> &intervals)
std::vector< int > getOpOrderIndex(std::vector< OpWrapper * > &producers, std::vector< OpWrapper * > &consumers, std::vector< OpWrapper * > &op_repository)
void chunkPrint(const std::vector< std::shared_ptr< Chunk >> &chunks)
std::string tensorPoolTypeToString(TensorPoolType type)
@ kTensorPool1DOffsetCalculateTypeGreedyBySize
@ kTensorPool1DOffsetCalculateTypeGreedyByBreadth
@ kTensorPool1DSharedObjectTypeGreedyBySizeImprove
@ kTensorPool1DSharedObjectTypeGreedyByBreadth
@ kTensorPool1DSharedObjectTypeGreedyBySize
TensorPoolType stringToTensorPoolType(const std::string &src)
void tensorUsageRecordPrint(const std::vector< std::shared_ptr< TensorUsageRecord >> &tensor_usage_records)
std::map< TensorPoolType, std::shared_ptr< TensorPoolCreator > > & getGlobalTensorPoolCreatorMap()
Get the Global TensorPool Creator Map object.
std::vector< std::array< int, 2 > > intervals_
std::vector< std::shared_ptr< TensorUsageRecord > > tensor_usage_records_
std::vector< std::shared_ptr< TensorUsageRecord > > breadth_
bool operator<(const OpBreadth &other) const
TensorWrapper * tensor_wrapper_
bool operator<(const TensorUsageRecord &other) const
std::array< int, 2 > interval_