From bfa3b52de2cfbd330efc19e2096134a20c645406 Mon Sep 17 00:00:00 2001 From: Gian Marco Date: Tue, 12 Dec 2017 10:08:38 +0000 Subject: COMPMID-556 - Fix examples - Fixed data type issue in cl_sgemm - Added support for NEON and OpenCL targets in graph examples. Before we could run only OpenCL target - Add auto_init() in NEDepthwiseVectorToTensorKernel Change-Id: I4410ce6f4992b2375b980634fe55f1083cf3c471 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/112850 Reviewed-by: Anthony Barbier Tested-by: BSG Visual Compute Jenkins server to access repositories on http://mpd-gerrit.cambridge.arm.com --- utils/GraphUtils.h | 21 +++++++++++++++++++++ utils/Utils.h | 12 ++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) (limited to 'utils') diff --git a/utils/GraphUtils.h b/utils/GraphUtils.h index d7d5cd6778..429394d1cc 100644 --- a/utils/GraphUtils.h +++ b/utils/GraphUtils.h @@ -25,6 +25,7 @@ #define __ARM_COMPUTE_GRAPH_UTILS_H__ #include "arm_compute/core/PixelValue.h" +#include "arm_compute/graph/Graph.h" #include "arm_compute/graph/ITensorAccessor.h" #include "arm_compute/graph/Types.h" @@ -220,6 +221,26 @@ inline std::unique_ptr get_input_accessor(const std::str } } +/** Utility function to return the TargetHint + * + * @param[in] target Integer value which expresses the selected target. Must be 0 for NEON or 1 for OpenCL + * + * @return the TargetHint + */ +inline graph::TargetHint set_target_hint(int target) +{ + ARM_COMPUTE_ERROR_ON_MSG(target > 1, "Invalid target. Target must be 0 (NEON) or 1 (OpenCL)"); + if(target == 1 && graph::Graph::opencl_is_available()) + { + // If type of target is OpenCL, check if OpenCL is available and initialize the scheduler + return graph::TargetHint::OPENCL; + } + else + { + return graph::TargetHint::NEON; + } +} + /** Generates appropriate output accessor according to the specified labels_path * * @note If labels_path is empty will generate a DummyAccessor else will generate a TopNPredictionsAccessor diff --git a/utils/Utils.h b/utils/Utils.h index 9133fd0ac0..eb4e846e80 100644 --- a/utils/Utils.h +++ b/utils/Utils.h @@ -708,7 +708,7 @@ void save_to_ppm(T &tensor, const std::string &ppm_filename) /** Template helper function to save a tensor image to a NPY file. * - * @note Only F32 format supported. + * @note Only F32 data type supported. * @note Only works with 2D tensors. * @note If the input tensor is a CLTensor, the function maps and unmaps the image * @@ -719,7 +719,7 @@ void save_to_ppm(T &tensor, const std::string &ppm_filename) template void save_to_npy(T &tensor, const std::string &npy_filename, bool fortran_order) { - ARM_COMPUTE_ERROR_ON_FORMAT_NOT_IN(&tensor, arm_compute::Format::F32); + ARM_COMPUTE_ERROR_ON_DATA_TYPE_NOT_IN(&tensor, arm_compute::DataType::F32); ARM_COMPUTE_ERROR_ON(tensor.info()->num_dimensions() > 2); std::ofstream fs; @@ -745,9 +745,9 @@ void save_to_npy(T &tensor, const std::string &npy_filename, bool fortran_order) // Map buffer if creating a CLTensor map(tensor, true); - switch(tensor.info()->format()) + switch(tensor.info()->data_type()) { - case arm_compute::Format::F32: + case arm_compute::DataType::F32: { std::vector tmp; /* Used only to get the typestring */ npy::Typestring typestring_o{ tmp }; @@ -851,9 +851,9 @@ void fill_random_tensor(T &tensor, float lower_bound, float upper_bound) Iterator it(&tensor, window); - switch(tensor.info()->format()) + switch(tensor.info()->data_type()) { - case arm_compute::Format::F32: + case arm_compute::DataType::F32: { std::uniform_real_distribution dist(lower_bound, upper_bound); -- cgit v1.2.1