dmlc/mshadow

Random<>::SampleUniform() has inconsistant behaviours on CPU, GPU and docs

cairijun opened this issue · 1 comments

According to docs, Random<>::SampleUniform(&dst, a, b) should generate random samples uniformly distributed in [a, b).

However, when DType = float, std::uniform_real_distribution, which is used internally in SampleUniform for CPU, might accidentally return b. This is an issue in most stdlib implementations. See LWG#2524, GCC#63176, LLVM#18767.

On GPU, curandGenerateUniform() is used, but it actually produces samples in (0, 1] according its documentation:

Results are 32-bit floating point values between 0.0f and 1.0f, excluding 0.0f and including 1.0f.

which results in (a, b] for SampleUniform(). The same issue affects double version as well.

szha commented

This code base has been donated to the Apache MXNet project per #373, and repo is deprecated. Future development and issue tracking should continue in Apache MXNet.