piiswrong 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_r161605173
##########
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:
can we move this to Resource::ParallelRandom so that all rngs are fast when
using mkl?
----------------------------------------------------------------
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:
[email protected]
With regards,
Apache Git Services