diff options
Diffstat (limited to 'arm_compute/AclEntrypoints.h')
-rw-r--r-- | arm_compute/AclEntrypoints.h | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/arm_compute/AclEntrypoints.h b/arm_compute/AclEntrypoints.h new file mode 100644 index 0000000000..0d4902a3d5 --- /dev/null +++ b/arm_compute/AclEntrypoints.h @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2021 Arm Limited. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef ARM_COMPUTE_ACL_ENTRYPOINTS_H_ +#define ARM_COMPUTE_ACL_ENTRYPOINTS_H_ + +#include "arm_compute/AclTypes.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /** __cplusplus */ + + /** Create a context object + * + * Context is responsible for retaining internal information and work as an aggregate service mechanism + * + * @param[in, out] ctx A valid non-zero context object if no failure occurs + * @param[in] target Target to create the context for + * @param[in] options Context options to be used for all the kernels that are created under the context + * + * @return Status code + * + * 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 AclCreateContext(AclContext *ctx, AclTarget target, const AclContextOptions *options); + + /** Destroy a given context object + * + * @param[in] ctx A valid context object to destroy + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if functions was completed successfully + * - @ref AclInvalidArgument if the provided context is invalid + */ + AclStatus AclDestroyContext(AclContext ctx); + + /** Create an operator queue + * + * Queue is responsible for any scheduling related activities + * + * @param[in, out] queue A valid non-zero queue object is not failures occur + * @param[in] ctx Context to be used + * @param[in] options Queue options to be used for the operators using the queue + * + * @return Status code + * + * 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 AclCreateQueue(AclQueue *queue, AclContext ctx, const AclQueueOptions *options); + + /** Wait until all elements on the queue have been completed + * + * @param[in] queue Queue to wait on completion + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if functions was completed successfully + * - @ref AclInvalidArgument if the provided queue is invalid + * - @ref AclRuntimeError on any other runtime related error + */ + AclStatus AclQueueFinish(AclQueue queue); + + /** Destroy a given queue object + * + * @param[in] queue A valid context object to destroy + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if functions was completed successfully + * - @ref AclInvalidArgument if the provided context is invalid + */ + AclStatus AclDestroyQueue(AclQueue queue); + + /** 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); + + /** Eager execution of a given operator on a list of inputs and outputs + * + * @param[in] op Operator to execute + * @param[in] queue Queue to schedule the operator on + * @param[in,out] tensors A list of input and outputs tensors to execute the operator on + * + * @return Status Code + * + * 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 + * - @ref AclRuntimeError on any other runtime related error + */ + AclStatus AclRunOperator(AclOperator op, AclQueue queue, AclTensorPack tensors); + + /** Destroy a given operator object + * + * @param[in,out] op A valid operator object to destroy + * + * @return Status code + * + * Returns: + * - @ref AclSuccess if functions was completed successfully + * - @ref AclInvalidArgument if the provided context is invalid + */ + AclStatus AclDestroyOperator(AclOperator op); +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* ARM_COMPUTE_ACL_ENTRYPOINTS_H_ */ |