aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/NEON/functions/NEPoolingLayer.cpp
diff options
context:
space:
mode:
authorGian Marco Iodice <gianmarco.iodice@arm.com>2017-09-28 15:41:37 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:35:24 +0000
commit1682430e220eb609752c650f85c0f96e375b6d6a (patch)
tree88db2cf1ad95df696c4477f06b30bac62fccf111 /src/runtime/NEON/functions/NEPoolingLayer.cpp
parente1f8f9b976cec4af84e5beee1109912f36096f5c (diff)
downloadComputeLibrary-1682430e220eb609752c650f85c0f96e375b6d6a.tar.gz
COMPMID-463 - Extended Pooling Layer on NEON to support Global Pooling
Change-Id: I8ae44187624deeab3d40d878e7b34ff651f1dad0 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/89834 Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com> Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Diffstat (limited to 'src/runtime/NEON/functions/NEPoolingLayer.cpp')
-rw-r--r--src/runtime/NEON/functions/NEPoolingLayer.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/runtime/NEON/functions/NEPoolingLayer.cpp b/src/runtime/NEON/functions/NEPoolingLayer.cpp
index de04f36961..f8a85b9897 100644
--- a/src/runtime/NEON/functions/NEPoolingLayer.cpp
+++ b/src/runtime/NEON/functions/NEPoolingLayer.cpp
@@ -23,19 +23,36 @@
*/
#include "arm_compute/runtime/NEON/functions/NEPoolingLayer.h"
-#include "arm_compute/core/NEON/kernels/NEPoolingLayerKernel.h"
+#include "arm_compute/core/ITensor.h"
+#include "arm_compute/runtime/NEON/NEScheduler.h"
+
#include "support/ToolchainSupport.h"
using namespace arm_compute;
+NEPoolingLayer::NEPoolingLayer()
+ : _pooling_layer_kernel(), _border_handler(), _is_global_pooling_layer(false)
+{
+}
+
void NEPoolingLayer::configure(ITensor *input, ITensor *output, const PoolingLayerInfo &pool_info)
{
+ // Check if we have Global Pooling Layer
+ _is_global_pooling_layer = (input->info()->dimension(0) == pool_info.pool_size()) && (input->info()->dimension(1) == pool_info.pool_size());
+
// Configure pooling kernel
- auto k = arm_compute::support::cpp14::make_unique<NEPoolingLayerKernel>();
- k->configure(input, output, pool_info);
- _kernel = std::move(k);
+ _pooling_layer_kernel.configure(input, output, pool_info);
// Configure border depending on operation required
BorderMode border_mode = (pool_info.pool_type() == PoolingType::MAX) ? BorderMode::REPLICATE : BorderMode::CONSTANT;
- _border_handler.configure(input, _kernel->border_size(), border_mode, PixelValue(static_cast<float>(0.f)));
+ _border_handler.configure(input, _pooling_layer_kernel.border_size(), border_mode, PixelValue(static_cast<float>(0.f)));
}
+
+void NEPoolingLayer::run()
+{
+ // Fill border
+ NEScheduler::get().schedule(&_border_handler, Window::DimY);
+
+ // Run pooling layer
+ NEScheduler::get().schedule(&_pooling_layer_kernel, _is_global_pooling_layer ? Window::DimZ : Window::DimY);
+} \ No newline at end of file