From b28fd79fdc01e70bf724b193f49654f4a0117713 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 28 Feb 2017 17:27:26 +0300 Subject: [PATCH] core: parallel_for_(): propagate RNG state from the main thread --- modules/core/src/parallel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/core/src/parallel.cpp b/modules/core/src/parallel.cpp index 71ac94eec8..0d3a93a085 100644 --- a/modules/core/src/parallel.cpp +++ b/modules/core/src/parallel.cpp @@ -174,6 +174,9 @@ namespace double len = wholeRange.end - wholeRange.start; nstripes = cvRound(_nstripes <= 0 ? len : MIN(MAX(_nstripes, 1.), len)); + // propagate main thread state + rng = cv::theRNG(); + #ifdef ENABLE_INSTRUMENTATION pThreadRoot = cv::instr::getInstrumentTLSStruct().pCurrentNode; #endif @@ -195,6 +198,9 @@ namespace #endif CV_INSTRUMENT_REGION() + // propagate main thread state + cv::theRNG() = rng; + cv::Range r; r.start = (int)(wholeRange.start + ((uint64)sr.start*(wholeRange.end - wholeRange.start) + nstripes/2)/nstripes); @@ -208,6 +214,7 @@ namespace const cv::ParallelLoopBody* body; cv::Range wholeRange; int nstripes; + cv::RNG rng; #ifdef ENABLE_INSTRUMENTATION cv::instr::InstrNode *pThreadRoot; #endif