From 68d59a2913477a4e18d5c74a31e58563ab3c54b9 Mon Sep 17 00:00:00 2001 From: Dmitry Kurtaev Date: Thu, 14 May 2020 21:48:14 +0300 Subject: [PATCH] Flush to zero Convolution denormal weights --- modules/dnn/src/layers/convolution_layer.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index 6deebb194c..15fa9a24cd 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -1230,6 +1230,13 @@ public: CV_TRACE_FUNCTION(); CV_TRACE_ARG_VALUE(name, "name", name.c_str()); +#if CV_TRY_SSE + uint32_t ftzMode = _MM_GET_FLUSH_ZERO_MODE(); + uint32_t dazMode = _MM_GET_DENORMALS_ZERO_MODE(); + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); +#endif + CV_OCL_RUN(IS_DNN_OPENCL_TARGET(preferableTarget), forward_ocl(inputs_arr, outputs_arr, internals_arr)) @@ -1312,6 +1319,10 @@ public: ParallelConv::run(inputs[0], outputs[0], weightsMat, biasvec, reluslope, kernel_size, strides, pads_begin, pads_end, dilations, activ.get(), ngroups, nstripes); } +#if CV_TRY_SSE + _MM_SET_FLUSH_ZERO_MODE(ftzMode); + _MM_SET_DENORMALS_ZERO_MODE(dazMode); +#endif } virtual int64 getFLOPS(const std::vector &inputs,