aboutsummaryrefslogtreecommitdiff
path: root/arm_compute
diff options
context:
space:
mode:
Diffstat (limited to 'arm_compute')
-rw-r--r--arm_compute/Acl.h1
-rw-r--r--arm_compute/Acl.hpp61
-rw-r--r--arm_compute/AclUtils.h63
3 files changed, 125 insertions, 0 deletions
diff --git a/arm_compute/Acl.h b/arm_compute/Acl.h
index 6958f60bfd..316407c02e 100644
--- a/arm_compute/Acl.h
+++ b/arm_compute/Acl.h
@@ -31,6 +31,7 @@ extern "C" {
/* Core headers */
#include "arm_compute/AclEntrypoints.h"
#include "arm_compute/AclTypes.h"
+#include "arm_compute/AclUtils.h"
#include "arm_compute/AclVersion.h"
#ifdef __cplusplus
diff --git a/arm_compute/Acl.hpp b/arm_compute/Acl.hpp
index a009894438..01f7179c2f 100644
--- a/arm_compute/Acl.hpp
+++ b/arm_compute/Acl.hpp
@@ -428,6 +428,20 @@ public:
_cdesc.strides = nullptr;
_cdesc.boffset = 0;
}
+ /** Constructor
+ *
+ * @param[in] desc C-type descriptor
+ */
+ explicit TensorDescriptor(const AclTensorDescriptor &desc)
+ {
+ _cdesc = desc;
+ _data_type = detail::as_enum<DataType>(desc.data_type);
+ _shape.reserve(desc.ndims);
+ for(int32_t d = 0; d < desc.ndims; ++d)
+ {
+ _shape.emplace_back(desc.shape[d]);
+ }
+ }
/** Get underlying C tensor descriptor
*
* @return Underlying structure
@@ -436,6 +450,29 @@ public:
{
return &_cdesc;
}
+ /** Operator to compare two TensorDescriptor
+ *
+ * @param[in] other The instance to compare against
+ *
+ * @return True if two instances have the same shape and data type
+ */
+ bool operator==(const TensorDescriptor &other)
+ {
+ bool is_same = true;
+
+ is_same &= _data_type == other._data_type;
+ is_same &= _shape.size() == other._shape.size();
+
+ if(is_same)
+ {
+ for(uint32_t d = 0; d < _shape.size(); ++d)
+ {
+ is_same &= _shape[d] == other._shape[d];
+ }
+ }
+
+ return is_same;
+ }
private:
std::vector<int32_t> _shape{};
@@ -524,6 +561,30 @@ public:
report_status(st, "[Arm Compute Library] Failed to import external memory to tensor!");
return st;
}
+ /** Get the size of the tensor in byte
+ *
+ * @note The size isn't based on allocated memory, but based on information in its descriptor (dimensions, data type, etc.).
+ *
+ * @return The size of the tensor in byte
+ */
+ uint64_t get_size()
+ {
+ uint64_t size{ 0 };
+ const auto st = detail::as_enum<StatusCode>(AclGetTensorSize(_object.get(), &size));
+ report_status(st, "[Arm Compute Library] Failed to get the size of the tensor");
+ return size;
+ }
+ /** Get the descriptor of this tensor
+ *
+ * @return The descriptor describing the characteristics of this tensor
+ */
+ TensorDescriptor get_descriptor()
+ {
+ AclTensorDescriptor desc;
+ const auto st = detail::as_enum<StatusCode>(AclGetTensorDescriptor(_object.get(), &desc));
+ report_status(st, "[Arm Compute Library] Failed to get the descriptor of the tensor");
+ return TensorDescriptor(desc);
+ }
};
/** Tensor pack class
diff --git a/arm_compute/AclUtils.h b/arm_compute/AclUtils.h
new file mode 100644
index 0000000000..2e75772ee8
--- /dev/null
+++ b/arm_compute/AclUtils.h
@@ -0,0 +1,63 @@
+/*
+ * 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_ACLUTILS_H_
+#define ARM_COMPUTE_ACLUTILS_H_
+
+#include "arm_compute/AclTypes.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /** __cplusplus */
+
+/** Get the size of the existing tensor in byte
+ *
+ * @note The size isn't based on allocated memory, but based on information in its descriptor (dimensions, data type, etc.).
+ *
+ * @param[in] tensor A tensor in interest
+ * @param[out] size The size of the tensor
+ *
+ * @return Status code
+ *
+ * - @ref AclSuccess if function was completed successfully
+ * - @ref AclInvalidArgument if a given argument is invalid
+ */
+AclStatus AclGetTensorSize(AclTensor tensor, uint64_t *size);
+
+/** Get the descriptor of this tensor
+ *
+ * @param[in] tensor A tensor in interest
+ * @param[out] desc The descriptor of the tensor
+ *
+ * @return Status code
+ *
+ * - @ref AclSuccess if function was completed successfully
+ * - @ref AclInvalidArgument if a given argument is invalid
+ */
+AclStatus AclGetTensorDescriptor(AclTensor tensor, AclTensorDescriptor *desc);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* ARM_COMPUTE_ACLUTILS_H_ */