Skip to content

Commit

Permalink
[Fix #11447] Use correct type for tensor shape vectors (#11448)
Browse files Browse the repository at this point in the history
* [Fix] Use correct type for tensor shape vectors

* Replacing std::vector with absl::InlinedVector

* Remove explicit use of absl:: namespace;
Add back explicit size in constructors.

* Remove explicit size for InlinedVector
  • Loading branch information
GPhilo committed Jun 7, 2022
1 parent b4f1e76 commit 40f4304
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions onnxruntime/core/providers/acl/nn/pool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <cmath>

#include "core/common/common.h"
#include "core/common/inlined_containers.h"
#include "core/framework/op_kernel.h"
#include "core/util/math.h"
#include "core/util/math_cpuonly.h"
Expand Down Expand Up @@ -37,17 +38,17 @@ ACLNEPool PoolOperation(onnxruntime::OpKernelContext* context,
const Tensor* X = context->Input<Tensor>(0);
const TensorShape& x_shape = X->Shape();

std::vector<int64_t> pads = pool_attrs.pads;
std::vector<int64_t> strides = pool_attrs.strides;
std::vector<int64_t> kernel_shape = pool_attrs.kernel_shape;
auto pads = pool_attrs.pads;
auto strides = pool_attrs.strides;
auto kernel_shape = pool_attrs.kernel_shape;

if (pool_attrs.global_pooling) {
const auto& input_dims = x_shape.GetDims();
kernel_shape.assign(input_dims.begin() + 2, input_dims.end());
pads.assign(kernel_shape.size(), 0);
}

std::vector<int64_t> output_dims = pool_attrs.SetOutputSize(x_shape, x_shape[1], &pads);
const auto& output_dims = pool_attrs.SetOutputSize(x_shape, x_shape[1], &pads);
Tensor* Y = context->Output(0, TensorShape(output_dims));

ACLNEPool tpool;
Expand All @@ -63,11 +64,11 @@ ACLNEPool PoolOperation(onnxruntime::OpKernelContext* context,
if (pool_attrs.global_pooling) {
layer->configure(tpool.in.get(), tpool.out.get(), arm_compute::PoolingLayerInfo(pool_type));
} else {
std::vector<int64_t> aclStrides(2);
TensorShapeVector aclStrides(2);
aclStrides[0] = (strides.size() == 2) ? strides[1] : 1;
aclStrides[1] = strides[0];

std::vector<int64_t> aclPads(4);
InlinedVector<int64_t> aclPads(4);
// The pad order in acl is: pad_left, pad_right, pad_top, pad_bottom
if (pads.size() == 2) {
if (strides.size() == 1) {
Expand All @@ -91,7 +92,7 @@ ACLNEPool PoolOperation(onnxruntime::OpKernelContext* context,
arm_compute::PadStrideInfo aclPadStride = arm_compute::PadStrideInfo(aclStrides[0], aclStrides[1],
aclPads[0], aclPads[1], aclPads[2], aclPads[3], arm_compute::DimensionRoundingType::FLOOR);

std::vector<int64_t> aclKernelShape(2);
TensorShapeVector aclKernelShape(2);
aclKernelShape[0] = (kernel_shape.size() > 1) ? kernel_shape[1] : 1;
aclKernelShape[1] = kernel_shape[0];

Expand Down Expand Up @@ -145,8 +146,8 @@ Status Pool<T, PoolType>::Compute(OpKernelContext* context) const {

const Tensor* X = context->Input<Tensor>(0);

std::vector<int64_t> dilations(PoolBase::pool_attrs_.dilations);
std::vector<int64_t> aclDilations(2);
TensorShapeVector dilations(PoolBase::pool_attrs_.dilations);
InlinedVector<int64_t> aclDilations(2);
aclDilations[0] = (dilations.size() == 2) ? dilations[1] : 1;
aclDilations[1] = (!dilations.empty()) ? dilations[0] : 1;

Expand Down Expand Up @@ -191,8 +192,8 @@ template <typename T>
Status MaxPoolV8<T>::Compute(OpKernelContext* context) const {
const Tensor* X = context->Input<Tensor>(0);

std::vector<int64_t> dilations(PoolBase::pool_attrs_.dilations);
std::vector<int64_t> aclDilations(2);
TensorShapeVector dilations(PoolBase::pool_attrs_.dilations);
InlinedVector<int64_t> aclDilations(2);
aclDilations[0] = (dilations.size() == 2) ? dilations[1] : 1;
aclDilations[1] = (!dilations.empty()) ? dilations[0] : 1;

Expand Down

0 comments on commit 40f4304

Please sign in to comment.