From 3f26ef4f9a2d447adb324dd69aec7c49cf7905fc Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Tue, 23 Feb 2021 10:01:33 +0000 Subject: Add tensor related data structures for the new API Adds the following: - TensorDescriptor: which is responsible for holding the information needed to represent a tensor (e.g. shape, dimensions, etc) - Tensor: an aggreate object of a descriptor and a backing memory - TensorPack: A map of tensor that can be passed to operators as inputs/outputs Signed-off-by: Georgios Pinitas Change-Id: I02734ac6ad85700d91d6e73217b4637adbf5d177 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5260 Tested-by: Arm Jenkins Comments-Addressed: Arm Jenkins --- arm_compute/AclEntrypoints.h | 127 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) (limited to 'arm_compute/AclEntrypoints.h') diff --git a/arm_compute/AclEntrypoints.h b/arm_compute/AclEntrypoints.h index 02e072f826..cd974341c2 100644 --- a/arm_compute/AclEntrypoints.h +++ b/arm_compute/AclEntrypoints.h @@ -62,6 +62,133 @@ AclStatus AclCreateContext(AclContext *ctx, */ AclStatus AclDestroyContext(AclContext ctx); +/** Create a Tensor object + * + * Tensor is a generalized matrix construct that can represent up to ND dimensionality (where N = 6 for Compute Library) + * The object holds a backing memory along-side to operate on + * + * @param[in, out] tensor A valid non-zero tensor object if no failures occur + * @param[in] ctx Context to be used + * @param[in] desc Tensor representation meta-data + * @param[in] allocate Instructs allocation of the tensor objects + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclOutOfMemory if there was a failure allocating memory resources + * - @ref AclUnsupportedTarget if the requested target is unsupported + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclCreateTensor(AclTensor *tensor, AclContext ctx, const AclTensorDescriptor *desc, bool allocate); + +/** Map a tensor's backing memory to the host + * + * @param[in] tensor Tensor to be mapped + * @param[in, out] handle A handle to the underlying backing memory + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclMapTensor(AclTensor tensor, void **handle); + +/** Unmap the tensor's backing memory + * + * @param[in] tensor tensor to unmap memory from + * @param[in] handle Backing memory to be unmapped + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclUnmapTensor(AclTensor tensor, void *handle); + +/** Import external memory to a given tensor object + * + * @param[in, out] tensor Tensor to import memory to + * @param[in] handle Backing memory to be imported + * @param[in] type Type of the imported memory + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclTensorImport(AclTensor tensor, void *handle, AclImportMemoryType type); + +/** Destroy a given tensor object + * + * @param[in,out] tensor A valid tensor object to be destroyed + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclInvalidArgument if the provided tensor is invalid + */ +AclStatus AclDestroyTensor(AclTensor tensor); + +/** Creates a tensor pack + * + * Tensor packs are used to create a collection of tensors that can be passed around for operator execution + * + * @param[in,out] pack A valid non-zero tensor pack object if no failures occur + * @param[in] ctx Context to be used + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclOutOfMemory if there was a failure allocating memory resources + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclCreateTensorPack(AclTensorPack *pack, AclContext ctx); + +/** Add a tensor to a tensor pack + * + * @param[in,out] pack Pack to append a tensor to + * @param[in] tensor Tensor to pack + * @param[in] slot_id Slot of the operator that the tensors corresponds to + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclOutOfMemory if there was a failure allocating memory resources + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclPackTensor(AclTensorPack pack, AclTensor tensor, int32_t slot_id); + +/** A list of tensors to a tensor pack + * + * @param[in,out] pack Pack to append the tensors to + * @param[in] tensors Tensors to append to the pack + * @param[in] slot_ids Slot IDs of each tensors to the operators + * @param[in] num_tensors Number of tensors that are passed + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if function was completed successfully + * - @ref AclOutOfMemory if there was a failure allocating memory resources + * - @ref AclInvalidArgument if a given argument is invalid + */ +AclStatus AclPackTensors(AclTensorPack pack, AclTensor *tensors, int32_t *slot_ids, size_t num_tensors); + +/** Destroy a given tensor pack object + * + * @param[in,out] pack A valid tensor pack object to destroy + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if functions was completed successfully + * - @ref AclInvalidArgument if the provided context is invalid + */ +AclStatus AclDestroyTensorPack(AclTensorPack pack); + #ifdef __cplusplus } #endif /* __cplusplus */ -- cgit v1.2.1