IVGCVSW-5334 Remove remaining boost::numeric_cast from armnn
authorMatthew Sloyan <matthew.sloyan@arm.com>
Wed, 23 Sep 2020 15:57:23 +0000 (16:57 +0100)
committerColm Donelan <colm.donelan@arm.com>
Fri, 2 Oct 2020 15:05:08 +0000 (15:05 +0000)
 * Floating point casts now use armnn::numeric_cast.
 * Also removed remaining header imports.

Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: I2d37847d67f164fc0a0ae17f34d49ff3d2210c30

30 files changed:
src/armnn/QuantizerVisitor.cpp
src/armnn/TypesUtils.cpp
src/armnnCaffeParser/CaffeParser.cpp
src/backends/backendsCommon/MemImportWorkload.cpp
src/backends/backendsCommon/MemSyncWorkload.cpp
src/backends/backendsCommon/test/BackendProfilingTests.cpp
src/backends/backendsCommon/test/LayerReleaseConstantDataTest.cpp
src/backends/backendsCommon/test/MockBackend.cpp
src/backends/backendsCommon/test/layerTests/Conv2dTestImpl.cpp
src/backends/backendsCommon/test/layerTests/Pooling2dTestImpl.cpp
src/backends/cl/workloads/ClAbsWorkload.cpp
src/backends/cl/workloads/ClExpWorkload.cpp
src/backends/cl/workloads/ClNegWorkload.cpp
src/backends/cl/workloads/ClRsqrtWorkload.cpp
src/backends/cl/workloads/ClSliceWorkload.cpp
src/backends/neon/NeonBackend.cpp
src/backends/neon/workloads/NeonConstantWorkload.cpp
src/backends/neon/workloads/NeonTransposeConvolution2dWorkload.cpp
src/backends/reference/workloads/ConvImpl.hpp
src/backends/reference/workloads/Debug.cpp
src/backends/reference/workloads/DetectionPostProcess.cpp
src/backends/reference/workloads/Mean.cpp
src/backends/reference/workloads/Pooling2d.cpp
src/backends/reference/workloads/RefFakeQuantizationFloat32Workload.cpp
src/backends/reference/workloads/Resize.cpp
src/backends/reference/workloads/Slice.cpp
tests/InferenceTest.cpp
tests/InferenceTest.inl
tests/InferenceTestImage.cpp
tests/MobileNetSsdInferenceTest.hpp

index 9fbdd9f..7889f03 100644 (file)
@@ -8,10 +8,9 @@
 #include "QuantizerVisitor.hpp"
 #include "StaticRangeVisitor.hpp"
 
+#include <armnn/utility/NumericCast.hpp>
 #include <armnn/utility/PolymorphicDowncast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 namespace armnn
 {
 
@@ -105,7 +104,7 @@ ConstTensor QuantizerVisitor::CreateQuantizedBias(const IConnectableLayer* srcLa
     for (size_t i = 0; i < backing.size(); ++i)
     {
         float fp32Value = static_cast<const float*>(biases.value().GetMemoryArea())[i];
-        backing[i] = boost::numeric_cast<int32_t>(fp32Value * ( 1 / scale ));
+        backing[i] = armnn::numeric_cast<int32_t>(fp32Value * ( 1 / scale ));
     }
 
     return ConstTensor(qInfo, backing);
index dd27df9..3b32782 100644 (file)
@@ -4,8 +4,7 @@
 //
 #include <armnn/TypesUtils.hpp>
 #include <armnn/utility/Assert.hpp>
-
-#include <boost/numeric/conversion/cast.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 namespace
 {
@@ -49,7 +48,7 @@ float armnn::Dequantize(QuantizedType value, float scale, int32_t offset)
     static_assert(IsQuantizedType<QuantizedType>(), "Not an integer type.");
     ARMNN_ASSERT(scale != 0.f);
     ARMNN_ASSERT(!IsNan(value));
-    return (boost::numeric_cast<float>(value - offset)) * scale;
+    return (armnn::numeric_cast<float>(value - offset)) * scale;
 }
 
 /// Explicit specialization of Quantize for int8_t
index 0a6a6c5..f95fe9c 100644 (file)
@@ -16,7 +16,6 @@
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <fmt/format.h>
 
 // Caffe
@@ -955,10 +954,10 @@ void CaffeParserBase::ParsePoolingLayer(const LayerParameter& layerParam)
           inputInfo.GetShape()[1],
           static_cast<unsigned int>(ceil(
               static_cast<float>(inputInfo.GetShape()[2] + 2 * pad_h - kernel_h) /
-              boost::numeric_cast<float>(stride_h))) + 1,
+              armnn::numeric_cast<float>(stride_h))) + 1,
           static_cast<unsigned int>(ceil(
               static_cast<float>(inputInfo.GetShape()[3] + 2 * pad_w - kernel_w) /
-              boost::numeric_cast<float>(stride_w))) + 1 },
+              armnn::numeric_cast<float>(stride_w))) + 1 },
         DataType::Float32);
 
     GetArmnnOutputSlotForCaffeTop(layerParam.bottom(0)).Connect(poolingLayer->GetInputSlot(0));
@@ -1053,7 +1052,7 @@ void CaffeParserBase::ParseLRNLayer(const LayerParameter& layerParam)
     if (param.has_alpha())
     {
         normalizationDescriptor.m_Alpha = param.alpha();
-        normalizationDescriptor.m_Alpha /= boost::numeric_cast<float>(param.local_size());
+        normalizationDescriptor.m_Alpha /= armnn::numeric_cast<float>(param.local_size());
     }
     else
     {
index be7dbd6..6584e40 100644 (file)
@@ -8,8 +8,6 @@
 #include <backendsCommon/MemImportWorkload.hpp>
 #include <backendsCommon/CpuTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 #include <cstring>
 
 namespace armnn
index 3e76854..b29c46e 100644 (file)
@@ -8,8 +8,6 @@
 #include <backendsCommon/MemSyncWorkload.hpp>
 #include <backendsCommon/CpuTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 #include <cstring>
 
 namespace armnn
index 8434536..377ca22 100644 (file)
@@ -21,7 +21,6 @@
 #include <armnn/Logging.hpp>
 #include <armnn/profiling/ISendTimelinePacket.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <boost/test/unit_test.hpp>
 #include <vector>
 
index eb1b976..817cdee 100644 (file)
@@ -10,7 +10,6 @@
 #include <backendsCommon/CpuTensorHandle.hpp>
 #include <backendsCommon/WorkloadData.hpp>
 
-#include <boost/cast.hpp>
 #include <boost/test/unit_test.hpp>
 
 #include <utility>
index abdaa81..e706fc8 100644 (file)
@@ -14,8 +14,6 @@
 #include <Optimizer.hpp>
 #include <SubgraphViewSelector.hpp>
 
-#include <boost/cast.hpp>
-
 #include <algorithm>
 
 namespace
index d020eeb..858ef5b 100644 (file)
@@ -13,8 +13,6 @@
 
 #include <cl/ClTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index 5b5e0a5..abf4181 100644 (file)
@@ -12,8 +12,6 @@
 
 #include <cl/ClTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index 9f83cd3..2788662 100644 (file)
@@ -12,8 +12,6 @@
 
 #include <cl/ClTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index a305a4a..48fd1e0 100644 (file)
@@ -12,8 +12,6 @@
 
 #include <cl/ClTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index 5ea4c4c..d7b1dbb 100644 (file)
@@ -12,8 +12,6 @@
 
 #include <cl/ClTensorHandle.hpp>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index d300960..642c19d 100644 (file)
@@ -23,8 +23,6 @@
 
 #include <arm_compute/runtime/Allocator.h>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index 05fdcf2..0859abd 100644 (file)
@@ -14,8 +14,6 @@
 #include <backendsCommon/CpuTensorHandle.hpp>
 #include <backendsCommon/Workload.hpp>
 
-#include <boost/cast.hpp>
-
 namespace armnn
 {
 
index d971b8f..d9d8a87 100644 (file)
@@ -15,8 +15,6 @@
 
 #include <armnnUtils/DataLayoutIndexed.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 #include <cmath>
 #include <limits>
 
index aadbc76..df05ad7 100644 (file)
@@ -8,8 +8,6 @@
 #include <BFloat16.hpp>
 #include <Half.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 #include <algorithm>
 #include <iostream>
 
@@ -53,10 +51,10 @@ void Debug(const TensorInfo& inputInfo,
     std::cout << "], ";
 
     std::cout << "\"min\": "
-        << boost::numeric_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", ";
+        << static_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", ";
 
     std::cout << "\"max\": "
-        << boost::numeric_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", ";
+        << static_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", ";
 
     std::cout << "\"data\": ";
 
@@ -70,7 +68,7 @@ void Debug(const TensorInfo& inputInfo,
             }
         }
 
-        std::cout << boost::numeric_cast<float>(inputData[i]);
+        std::cout << static_cast<float>(inputData[i]);
 
         for (unsigned int j = 0; j < numDims; j++)
         {
index ce07110..f80f20a 100644 (file)
@@ -8,8 +8,6 @@
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 #include <algorithm>
 #include <numeric>
 
@@ -120,7 +118,7 @@ void AllocateOutputData(unsigned int numOutput,
             {
                 unsigned int boxCornorIndex = selectedBoxes[outputIndices[i]] * 4;
                 detectionScores[i] = selectedScores[outputIndices[i]];
-                detectionClasses[i] = boost::numeric_cast<float>(selectedClasses[outputIndices[i]]);
+                detectionClasses[i] = armnn::numeric_cast<float>(selectedClasses[outputIndices[i]]);
                 detectionBoxes[boxIndex] = boxCorners[boxCornorIndex];
                 detectionBoxes[boxIndex + 1] = boxCorners[boxCornorIndex + 1];
                 detectionBoxes[boxIndex + 2] = boxCorners[boxCornorIndex + 2];
@@ -136,7 +134,7 @@ void AllocateOutputData(unsigned int numOutput,
                 detectionBoxes[boxIndex + 3] = 0.0f;
             }
         }
-        numDetections[0] = boost::numeric_cast<float>(numSelected);
+        numDetections[0] = armnn::numeric_cast<float>(numSelected);
 }
 
 void DetectionPostProcess(const TensorInfo& boxEncodingsInfo,
index e43a4d5..fe34efe 100644 (file)
@@ -8,8 +8,6 @@
 
 #include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 #include <cmath>
 #include <cstddef>
 #include <functional>
@@ -130,15 +128,15 @@ void Mean(const armnn::TensorInfo& inputInfo,
     for (unsigned int idx = 0; idx < numResolvedAxis; ++idx)
     {
         unsigned int current = inputDims[resolvedAxis[idx]];
-        ARMNN_ASSERT(boost::numeric_cast<float>(current) <
-              (std::numeric_limits<float>::max() / boost::numeric_cast<float>(numElementsInAxis)));
+        ARMNN_ASSERT(armnn::numeric_cast<float>(current) <
+              (std::numeric_limits<float>::max() / armnn::numeric_cast<float>(numElementsInAxis)));
         numElementsInAxis *= current;
     }
     if (numElementsInAxis > 0) {
         for (unsigned int idx = 0; idx < numOutputs; ++idx)
         {
             output[idx];
-            output.Set(tempSum[idx] / boost::numeric_cast<float>(numElementsInAxis));
+            output.Set(tempSum[idx] / armnn::numeric_cast<float>(numElementsInAxis));
         }
     }
 }
index be6ff38..c5633e8 100644 (file)
@@ -11,8 +11,6 @@
 #include <armnnUtils/DataLayoutIndexed.hpp>
 #include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 #include <limits>
 #include <algorithm>
 #include <functional>
@@ -208,7 +206,7 @@ void Pooling2d(Decoder<float>& rInputDecoder,
                     wend = std::min(wend, widthInput + padRight);
 
                     float result = defaultInitializer;
-                    float poolAreaSize = boost::numeric_cast<float>(height * (wend - wstart));
+                    float poolAreaSize = armnn::numeric_cast<float>(height * (wend - wstart));
 
                     // Special case: when the pooling kernel is over a padding region and the padding
                     //               size is larger or equal to the kernel and the kernel only covers
@@ -248,7 +246,7 @@ void Pooling2d(Decoder<float>& rInputDecoder,
                     {
                         // When we exclude the padding, it means we calculate with a smaller
                         // kernel size, so I changed the divisor here.
-                        poolAreaSize = boost::numeric_cast<float>((hend - hstart) * (wend - wstart));
+                        poolAreaSize = armnn::numeric_cast<float>((hend - hstart) * (wend - wstart));
                     }
 
                     for (auto yInput = hstart; yInput < hend; yInput++)
index aca3308..cf355d3 100644 (file)
@@ -9,7 +9,7 @@
 
 #include "Profiling.hpp"
 
-#include <boost/numeric/conversion/cast.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 namespace armnn
 {
@@ -17,7 +17,7 @@ namespace armnn
 void FakeQuantization(const float* inputData, float* outputData, uint32_t numElements, float min, float max)
 {
     float scale = (max - min) / 255.f;
-    int32_t offset = boost::numeric_cast<int32_t>((-min * 255.f) / (max - min));
+    int32_t offset = armnn::numeric_cast<int32_t>((-min * 255.f) / (max - min));
 
     for (uint32_t i = 0; i < numElements; i++)
     {
index 16cdd4a..b8bf1bc 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "TensorBufferArrayView.hpp"
 
-#include <boost/numeric/conversion/cast.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 #include <cmath>
 #include <algorithm>
@@ -27,7 +27,7 @@ inline float Lerp(float a, float b, float w)
 
 inline double EuclideanDistance(float Xa, float Ya, const unsigned int Xb, const unsigned int Yb)
 {
-    return std::sqrt(pow(Xa - boost::numeric_cast<float>(Xb), 2) + pow(Ya - boost::numeric_cast<float>(Yb), 2));
+    return std::sqrt(pow(Xa - armnn::numeric_cast<float>(Xb), 2) + pow(Ya - armnn::numeric_cast<float>(Yb), 2));
 }
 
 inline float CalculateResizeScale(const unsigned int& InputSize,
@@ -35,8 +35,8 @@ inline float CalculateResizeScale(const unsigned int& InputSize,
                                   const bool& AlignCorners)
 {
     return (AlignCorners && OutputSize > 1)
-            ?  boost::numeric_cast<float>(InputSize - 1) / boost::numeric_cast<float>(OutputSize - 1)
-            :  boost::numeric_cast<float>(InputSize) / boost::numeric_cast<float>(OutputSize);
+            ?  armnn::numeric_cast<float>(InputSize - 1) / armnn::numeric_cast<float>(OutputSize - 1)
+            :  armnn::numeric_cast<float>(InputSize) / armnn::numeric_cast<float>(OutputSize);
 }
 
 inline float PixelScaler(const unsigned int& Pixel,
index e972524..d6836c6 100644 (file)
@@ -8,8 +8,6 @@
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/IgnoreUnused.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 namespace armnn
 {
 
index b0d0b47..6420544 100644 (file)
@@ -8,7 +8,6 @@
 #include <Filesystem.hpp>
 
 #include "../src/armnn/Profiling.hpp"
-#include <boost/numeric/conversion/cast.hpp>
 #include <boost/format.hpp>
 #include <boost/program_options.hpp>
 
index e10bb38..e8401f6 100644 (file)
@@ -7,7 +7,6 @@
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <boost/program_options.hpp>
 #include <fmt/format.h>
 
@@ -247,8 +246,8 @@ ClassifierTestCaseProvider<TDatabase, InferenceModel>::GetTestCase(unsigned int
 template <typename TDatabase, typename InferenceModel>
 bool ClassifierTestCaseProvider<TDatabase, InferenceModel>::OnInferenceTestFinished()
 {
-    const double accuracy = boost::numeric_cast<double>(m_NumCorrectInferences) /
-        boost::numeric_cast<double>(m_NumInferences);
+    const double accuracy = armnn::numeric_cast<double>(m_NumCorrectInferences) /
+        armnn::numeric_cast<double>(m_NumInferences);
     ARMNN_LOG(info) << std::fixed << std::setprecision(3) << "Overall accuracy: " << accuracy;
 
     // If a validation file was requested as output, the predictions are saved to it.
index a1b6cf4..bb1f5c2 100644 (file)
@@ -8,7 +8,6 @@
 #include <armnn/utility/IgnoreUnused.hpp>
 #include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <fmt/format.h>
 
 #include <array>
@@ -72,8 +71,8 @@ std::vector<float> ResizeBilinearAndNormalize(const InferenceTestImage & image,
 
     // How much to scale pixel coordinates in the output image to get the corresponding pixel coordinates
     // in the input image.
-    const float scaleY = boost::numeric_cast<float>(inputHeight) / boost::numeric_cast<float>(outputHeight);
-    const float scaleX = boost::numeric_cast<float>(inputWidth) / boost::numeric_cast<float>(outputWidth);
+    const float scaleY = armnn::numeric_cast<float>(inputHeight) / armnn::numeric_cast<float>(outputHeight);
+    const float scaleX = armnn::numeric_cast<float>(inputWidth) / armnn::numeric_cast<float>(outputWidth);
 
     uint8_t rgb_x0y0[3];
     uint8_t rgb_x1y0[3];
@@ -83,11 +82,11 @@ std::vector<float> ResizeBilinearAndNormalize(const InferenceTestImage & image,
     for (unsigned int y = 0; y < outputHeight; ++y)
     {
         // Corresponding real-valued height coordinate in input image.
-        const float iy = boost::numeric_cast<float>(y) * scaleY;
+        const float iy = armnn::numeric_cast<float>(y) * scaleY;
 
         // Discrete height coordinate of top-left texel (in the 2x2 texel area used for interpolation).
         const float fiy = floorf(iy);
-        const unsigned int y0 = boost::numeric_cast<unsigned int>(fiy);
+        const unsigned int y0 = armnn::numeric_cast<unsigned int>(fiy);
 
         // Interpolation weight (range [0,1])
         const float yw = iy - fiy;
@@ -95,9 +94,9 @@ std::vector<float> ResizeBilinearAndNormalize(const InferenceTestImage & image,
         for (unsigned int x = 0; x < outputWidth; ++x)
         {
             // Real-valued and discrete width coordinates in input image.
-            const float ix = boost::numeric_cast<float>(x) * scaleX;
+            const float ix = armnn::numeric_cast<float>(x) * scaleX;
             const float fix = floorf(ix);
-            const unsigned int x0 = boost::numeric_cast<unsigned int>(fix);
+            const unsigned int x0 = armnn::numeric_cast<unsigned int>(fix);
 
             // Interpolation weight (range [0,1]).
             const float xw = ix - fix;
index f426ed2..2a5d47d 100644 (file)
@@ -9,8 +9,8 @@
 
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/IgnoreUnused.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <boost/test/tools/floating_point_comparison.hpp>
 
 #include <vector>
@@ -53,7 +53,7 @@ public:
         const std::vector<float>& output4 = mapbox::util::get<std::vector<float>>(this->GetOutputs()[3]);
         ARMNN_ASSERT(output4.size() == k_OutputSize4);
 
-        const size_t numDetections = boost::numeric_cast<size_t>(output4[0]);
+        const size_t numDetections = armnn::numeric_cast<size_t>(output4[0]);
 
         // Check if number of valid detections matches expectations
         const size_t expectedNumDetections = m_DetectedObjects.size();