aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiorgio Arena <giorgio.arena@arm.com>2020-12-15 15:45:43 +0000
committerGiorgio Arena <giorgio.arena@arm.com>2020-12-17 13:08:07 +0000
commit6aeb2170d18824135acef2d5c16fb93c4488c1fe (patch)
treeb91c323eeae2ecccb8c42cd3c69f296298de7c4c
parent72610dcf2d634c9c2919ad55245c5c91609e87eb (diff)
downloadComputeLibrary-6aeb2170d18824135acef2d5c16fb93c4488c1fe.tar.gz
Fix fill() for FP data type in fixtures - Part 1
Resolves: COMPMID-4050 Signed-off-by: Giorgio Arena <giorgio.arena@arm.com> Change-Id: I182548bf4b944c499a7134ac005b137877e61baf Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4700 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
-rw-r--r--support/Random.h12
-rw-r--r--tests/AssetsLibrary.h9
-rw-r--r--tests/validation/fixtures/ArgMinMaxFixture.h9
-rw-r--r--tests/validation/fixtures/ConvertFullyConnectedWeightsFixture.h11
-rw-r--r--tests/validation/fixtures/ConvolutionLayerFixture.h7
-rw-r--r--tests/validation/fixtures/DeconvolutionLayerFixture.h7
-rw-r--r--tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h13
-rw-r--r--tests/validation/fixtures/DirectConvolutionLayerFixture.h7
-rw-r--r--tests/validation/fixtures/DirectConvolutionLayerTensorShiftFixture.h9
-rw-r--r--tests/validation/fixtures/ElementWiseUnaryFixture.h9
-rw-r--r--tests/validation/fixtures/FFTFixture.h6
-rw-r--r--tests/validation/fixtures/GEMMFixture.h7
-rw-r--r--tests/validation/fixtures/GEMMInterleave4x4Fixture.h9
-rw-r--r--tests/validation/fixtures/GEMMLowpFixture.h8
-rw-r--r--tests/validation/fixtures/GEMMTranspose1xWFixture.h9
-rw-r--r--tests/validation/fixtures/WinogradConvolutionLayerFixture.h11
-rw-r--r--utils/Utils.h22
17 files changed, 112 insertions, 53 deletions
diff --git a/support/Random.h b/support/Random.h
index c8b767e505..d5d372dc82 100644
--- a/support/Random.h
+++ b/support/Random.h
@@ -25,6 +25,7 @@
#define ARM_COMPUTE_MISC_RANDOM_H
#include "arm_compute/core/Error.h"
+#include "utils/Utils.h"
#include <random>
#include <type_traits>
@@ -43,13 +44,14 @@ template <typename T>
class RangedUniformDistribution
{
public:
- using DT = typename std::conditional<std::is_integral<T>::value,
- std::uniform_int_distribution<T>,
- std::uniform_real_distribution<float>>::type;
+ static constexpr bool is_half = std::is_same<T, half>::value;
+ static constexpr bool is_integral = std::is_integral<T>::value && !is_half;
+
+ using fp_dist = typename std::conditional<is_half, arm_compute::utils::uniform_real_distribution_fp16, std::uniform_real_distribution<T>>::type;
+ using DT = typename std::conditional<is_integral, std::uniform_int_distribution<T>, fp_dist>::type;
using result_type = T;
using range_pair = std::pair<result_type, result_type>;
-public:
/** Constructor
*
* @param[in] low lowest value in the range (inclusive)
@@ -62,7 +64,7 @@ public:
result_type clow = low;
for(const auto &erange : exclude_ranges)
{
- result_type epsilon = std::is_integral<result_type>::value ? 1 : static_cast<result_type>(std::numeric_limits<float>::epsilon());
+ result_type epsilon = is_integral ? result_type(1) : result_type(std::numeric_limits<T>::epsilon());
ARM_COMPUTE_ERROR_ON(clow > erange.first || clow >= erange.second);
diff --git a/tests/AssetsLibrary.h b/tests/AssetsLibrary.h
index 28a51d6ae9..fdb05691ea 100644
--- a/tests/AssetsLibrary.h
+++ b/tests/AssetsLibrary.h
@@ -36,6 +36,7 @@
#include "tests/TensorCache.h"
#include "tests/Utils.h"
#include "tests/framework/Exceptions.h"
+#include "utils/Utils.h"
#include <algorithm>
#include <cstddef>
@@ -782,7 +783,7 @@ void AssetsLibrary::fill_tensor_uniform(T &&tensor, std::random_device::result_t
case DataType::F16:
{
// It doesn't make sense to check [-inf, inf], so hard code it to a big number
- std::uniform_real_distribution<float> distribution_f16(-100.f, 100.f);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution_f16{ half(-100.f), half(100.f) };
fill(tensor, distribution_f16, seed_offset);
break;
}
@@ -888,8 +889,8 @@ void AssetsLibrary::fill_tensor_uniform_ranged(T
case DataType::F16:
{
// It doesn't make sense to check [-inf, inf], so hard code it to a big number
- const auto converted_pairs = detail::convert_range_pair<float>(excluded_range_pairs);
- RangedUniformDistribution<float> distribution_f16(-100.f, 100.f, converted_pairs);
+ const auto converted_pairs = detail::convert_range_pair<half>(excluded_range_pairs);
+ RangedUniformDistribution<half> distribution_f16(half(-100.f), half(100.f), converted_pairs);
fill(tensor, distribution_f16, seed_offset);
break;
}
@@ -979,7 +980,7 @@ void AssetsLibrary::fill_tensor_uniform(T &&tensor, std::random_device::result_t
}
case DataType::F16:
{
- std::uniform_real_distribution<float> distribution_f16(low, high);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution_f16{ half(low), half(high) };
fill(tensor, distribution_f16, seed_offset);
break;
}
diff --git a/tests/validation/fixtures/ArgMinMaxFixture.h b/tests/validation/fixtures/ArgMinMaxFixture.h
index cf34bcc00e..044e253d92 100644
--- a/tests/validation/fixtures/ArgMinMaxFixture.h
+++ b/tests/validation/fixtures/ArgMinMaxFixture.h
@@ -59,10 +59,15 @@ protected:
{
switch(tensor.data_type())
{
- case DataType::F32:
case DataType::F16:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, 0);
+ break;
+ }
+ case DataType::F32:
+ {
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, 0);
break;
}
diff --git a/tests/validation/fixtures/ConvertFullyConnectedWeightsFixture.h b/tests/validation/fixtures/ConvertFullyConnectedWeightsFixture.h
index c90409f3a4..f1eeff7872 100644
--- a/tests/validation/fixtures/ConvertFullyConnectedWeightsFixture.h
+++ b/tests/validation/fixtures/ConvertFullyConnectedWeightsFixture.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 Arm Limited.
+ * Copyright (c) 2018-2020 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -65,10 +65,15 @@ protected:
library->fill(tensor, distribution, i);
break;
}
- case DataType::F32:
case DataType::F16:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
+ case DataType::F32:
+ {
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/ConvolutionLayerFixture.h b/tests/validation/fixtures/ConvolutionLayerFixture.h
index e1452f5dfc..94fbc53d65 100644
--- a/tests/validation/fixtures/ConvolutionLayerFixture.h
+++ b/tests/validation/fixtures/ConvolutionLayerFixture.h
@@ -142,9 +142,14 @@ protected:
}
case DataType::BFLOAT16:
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/DeconvolutionLayerFixture.h b/tests/validation/fixtures/DeconvolutionLayerFixture.h
index 7c7f32bffd..d56a9337e9 100644
--- a/tests/validation/fixtures/DeconvolutionLayerFixture.h
+++ b/tests/validation/fixtures/DeconvolutionLayerFixture.h
@@ -90,9 +90,14 @@ protected:
break;
}
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h b/tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h
index af3838f438..9cd60cc1fb 100644
--- a/tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h
+++ b/tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h
@@ -97,10 +97,15 @@ protected:
library->fill(tensor, distribution, i);
break;
}
- case DataType::F32:
case DataType::F16:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
+ case DataType::F32:
+ {
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
@@ -343,13 +348,13 @@ protected:
{
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
case DataType::F16:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/DirectConvolutionLayerFixture.h b/tests/validation/fixtures/DirectConvolutionLayerFixture.h
index e37063e2e5..7faea5518f 100644
--- a/tests/validation/fixtures/DirectConvolutionLayerFixture.h
+++ b/tests/validation/fixtures/DirectConvolutionLayerFixture.h
@@ -108,9 +108,14 @@ protected:
break;
}
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.f, 1.f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/DirectConvolutionLayerTensorShiftFixture.h b/tests/validation/fixtures/DirectConvolutionLayerTensorShiftFixture.h
index b313c8490d..be43853e0b 100644
--- a/tests/validation/fixtures/DirectConvolutionLayerTensorShiftFixture.h
+++ b/tests/validation/fixtures/DirectConvolutionLayerTensorShiftFixture.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2018 Arm Limited.
+ * Copyright (c) 2017-2020 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -93,9 +93,14 @@ protected:
break;
}
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/ElementWiseUnaryFixture.h b/tests/validation/fixtures/ElementWiseUnaryFixture.h
index f04463d466..b1d54fd940 100644
--- a/tests/validation/fixtures/ElementWiseUnaryFixture.h
+++ b/tests/validation/fixtures/ElementWiseUnaryFixture.h
@@ -74,10 +74,15 @@ protected:
{
switch(data_type)
{
- case DataType::F32:
case DataType::F16:
{
- std::uniform_real_distribution<> distribution(-2.0f, 2.0f);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-2.0f), half(2.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
+ case DataType::F32:
+ {
+ std::uniform_real_distribution<float> distribution(-2.0f, 2.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/FFTFixture.h b/tests/validation/fixtures/FFTFixture.h
index 564098497b..ae5b226954 100644
--- a/tests/validation/fixtures/FFTFixture.h
+++ b/tests/validation/fixtures/FFTFixture.h
@@ -35,8 +35,6 @@
#include "tests/validation/reference/ConvolutionLayer.h"
#include "tests/validation/reference/DFT.h"
-#include "utils/Utils.h"
-
#include <random>
namespace arm_compute
@@ -65,7 +63,7 @@ protected:
{
case DataType::F16:
{
- arm_compute::utils::uniform_real_distribution_fp16 distribution(half(-5.0f), half(5.0f));
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-5.0f), half(5.0f) };
library->fill(tensor, distribution, 0);
break;
}
@@ -153,7 +151,7 @@ protected:
{
case DataType::F16:
{
- arm_compute::utils::uniform_real_distribution_fp16 distribution(half(-1.0f), half(1.0f));
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/GEMMFixture.h b/tests/validation/fixtures/GEMMFixture.h
index 358056ad65..7e775887b6 100644
--- a/tests/validation/fixtures/GEMMFixture.h
+++ b/tests/validation/fixtures/GEMMFixture.h
@@ -63,9 +63,14 @@ protected:
switch(tensor.data_type())
{
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(lo), half(hi) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(lo, hi);
+ std::uniform_real_distribution<float> distribution(lo, hi);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/GEMMInterleave4x4Fixture.h b/tests/validation/fixtures/GEMMInterleave4x4Fixture.h
index fb04a08755..3b153a85dc 100644
--- a/tests/validation/fixtures/GEMMInterleave4x4Fixture.h
+++ b/tests/validation/fixtures/GEMMInterleave4x4Fixture.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2018 Arm Limited.
+ * Copyright (c) 2017-2020 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -63,9 +63,14 @@ protected:
switch(tensor.data_type())
{
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.f, 1.f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/GEMMLowpFixture.h b/tests/validation/fixtures/GEMMLowpFixture.h
index 94b25e2243..338cf01138 100644
--- a/tests/validation/fixtures/GEMMLowpFixture.h
+++ b/tests/validation/fixtures/GEMMLowpFixture.h
@@ -78,10 +78,14 @@ void fill(U &&tensor, int i)
break;
}
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- // Between 1 and 254 in order to avoid having -128 and 128 for the DOT product path
- std::uniform_real_distribution<> distribution(-1.0f, 1.0f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/GEMMTranspose1xWFixture.h b/tests/validation/fixtures/GEMMTranspose1xWFixture.h
index 9619a667e9..6edb78fe22 100644
--- a/tests/validation/fixtures/GEMMTranspose1xWFixture.h
+++ b/tests/validation/fixtures/GEMMTranspose1xWFixture.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017-2019 Arm Limited.
+ * Copyright (c) 2017-2020 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -64,9 +64,14 @@ protected:
switch(tensor.data_type())
{
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(-1.0f), half(1.0f) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(-1.f, 1.f);
+ std::uniform_real_distribution<float> distribution(-1.0f, 1.0f);
library->fill(tensor, distribution, i);
break;
}
diff --git a/tests/validation/fixtures/WinogradConvolutionLayerFixture.h b/tests/validation/fixtures/WinogradConvolutionLayerFixture.h
index 410c2a544e..4e26a5ef95 100644
--- a/tests/validation/fixtures/WinogradConvolutionLayerFixture.h
+++ b/tests/validation/fixtures/WinogradConvolutionLayerFixture.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2019 Arm Limited.
+ * Copyright (c) 2018-2020 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -177,7 +177,7 @@ protected:
{
case DataType::F16:
{
- arm_compute::utils::uniform_real_distribution_fp16 distribution((half)min, (half)max);
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(min), half(max) };
library->fill(tensor, distribution, i);
break;
}
@@ -499,9 +499,14 @@ protected:
switch(tensor.data_type())
{
case DataType::F16:
+ {
+ arm_compute::utils::uniform_real_distribution_fp16 distribution{ half(min), half(max) };
+ library->fill(tensor, distribution, i);
+ break;
+ }
case DataType::F32:
{
- std::uniform_real_distribution<> distribution(min, max);
+ std::uniform_real_distribution<float> distribution(min, max);
library->fill(tensor, distribution, i);
break;
}
diff --git a/utils/Utils.h b/utils/Utils.h
index b10d18aca2..7eeeae5419 100644
--- a/utils/Utils.h
+++ b/utils/Utils.h
@@ -296,20 +296,15 @@ inline void unmap(GCTensor &tensor)
*/
class uniform_real_distribution_fp16
{
- half min{ 0.0f }, max{ 0.0f };
- std::uniform_real_distribution<float> neg{ min, -0.3f };
- std::uniform_real_distribution<float> pos{ 0.3f, max };
- std::uniform_int_distribution<uint8_t> sign_picker{ 0, 1 };
-
public:
using result_type = half;
/** Constructor
*
- * @param[in] a Minimum value of the distribution
- * @param[in] b Maximum value of the distribution
+ * @param[in] min Minimum value of the distribution
+ * @param[in] max Maximum value of the distribution
*/
- explicit uniform_real_distribution_fp16(half a = half(0.0), half b = half(1.0))
- : min(a), max(b)
+ explicit uniform_real_distribution_fp16(half min = half(0.0), half max = half(1.0))
+ : dist(min, max)
{
}
@@ -319,12 +314,11 @@ public:
*/
half operator()(std::mt19937 &gen)
{
- if(sign_picker(gen))
- {
- return (half)neg(gen);
- }
- return (half)pos(gen);
+ return half(dist(gen));
}
+
+private:
+ std::uniform_real_distribution<float> dist;
};
/** Numpy data loader */