asmushetzel commented on a change in pull request #9366: Refactor dropout operator to use ParallelRandom generator and also react deterministically when seeding URL: https://github.com/apache/incubator-mxnet/pull/9366#discussion_r161703715
########## File path: src/operator/nn/dropout-inl.h ########## @@ -94,47 +72,124 @@ struct DropoutParam : public dmlc::Parameter<DropoutParam> { template<typename xpu, typename DType> class DropoutOp : public Operator { +#if defined(USE_MKL) && defined(_OPENMP) + static void BernoulliGenerate(common::random::RandGenerator<cpu, DType> gen, + int n, double p, int* r) { + typename RandGenerator<xpu, DType>::Impl genImpl(&gen, 1); + const int seed = 17 + genImpl.rand() % 4096; // NOLINT(runtime/threadsafe_fn) + const int nthr = engine::OpenMP::Get()->GetRecommendedOMPThreadCount(); +#pragma omp parallel num_threads(nthr) + { + const int ithr = omp_get_thread_num(); + const int avg_amount = (n + nthr - 1) / nthr; + const int my_offset = ithr * avg_amount; + const int my_amount = std::min(my_offset + avg_amount, n) - my_offset; + if (my_amount > 0) { + VSLStreamStatePtr stream; + vslNewStream(&stream, VSL_BRNG_MCG31, seed + my_offset); + vslSkipAheadStream(stream, my_offset); Review comment: +1. We should make MKL support a first class citizen ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services