diff options
Diffstat (limited to 'runtimes/neurun/backend/acl_common/IACLTensor.cc')
-rw-r--r-- | runtimes/neurun/backend/acl_common/IACLTensor.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/runtimes/neurun/backend/acl_common/IACLTensor.cc b/runtimes/neurun/backend/acl_common/IACLTensor.cc new file mode 100644 index 000000000..89972e267 --- /dev/null +++ b/runtimes/neurun/backend/acl_common/IACLTensor.cc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "IACLTensor.h" +#include "Convert.h" +#include "Swizzle.h" + +namespace neurun +{ +namespace backend +{ +namespace acl_common +{ + +size_t IACLTensor::num_dimensions() const +{ + throw std::runtime_error("No definition of num_dimensions()"); + return 0; +} + +size_t IACLTensor::dimension(size_t index) const +{ + // Assume that the front is higher dimensional. + // i.g. N: 0, C: 1, H: 2, W: 3 for NCHW layout + // NOTE This tensor must not be applied dim correction + assert(num_dimensions() > index); + const ARMComputeAxis reversed{(static_cast<uint32_t>(num_dimensions() - index) - 1)}; + return info()->dimension(reversed.value()); +} + +size_t IACLTensor::calcOffset(const neurun::util::Coordinates &coords) const +{ + const auto rank = coords.size(); + ::arm_compute::Coordinates acl_coords; + for (size_t i = 0; i < rank; ++i) + { + acl_coords.set(acl_common::ToARMComputeAxis(rank, i).value(), coords[i]); + } + + return info()->offset_element_in_bytes(acl_coords); +} + +model::Layout IACLTensor::layout() const +{ + return acl_common::asRuntimeLayout(info()->data_layout()); +} + +} // namespace acl_common +} // namespace backend +} // namespace neurun |