Skip to content

Commit 5640a99

Browse files
DEP: using mt19937 instead of philox4x32x10 for random (#371)
1 parent cbb2607 commit 5640a99

File tree

4 files changed

+36
-36
lines changed

4 files changed

+36
-36
lines changed

dpnp/backend/queue_sycl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#if defined(DPNP_LOCAL_QUEUE)
3434
cl::sycl::queue* backend_sycl::queue = nullptr;
3535
#endif
36-
mkl_rng::philox4x32x10* backend_sycl::rng_engine = nullptr;
36+
mkl_rng::mt19937* backend_sycl::rng_engine = nullptr;
3737

3838
/**
3939
* Function push the SYCL kernels to be linked (final stage of the compilation) for the current queue
@@ -137,7 +137,7 @@ void backend_sycl::backend_sycl_rng_engine_init(size_t seed)
137137
{
138138
backend_sycl::destroy_rng_engine();
139139
}
140-
rng_engine = new mkl_rng::philox4x32x10(DPNP_QUEUE, seed);
140+
rng_engine = new mkl_rng::mt19937(DPNP_QUEUE, seed);
141141
}
142142

143143
void dpnp_queue_initialize_c(QueueOptions selector)

dpnp/backend/queue_sycl.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ namespace mkl_rng = oneapi::mkl::rng;
5555
* This is container for the SYCL queue, random number generation engine and related functions like queue and engine
5656
* initialization and maintenance.
5757
* The queue could not be initialized as a global object. Global object initialization order is undefined.
58-
* This class postpone initialization of the SYCL queue and philox4x32x10 random number generation engine.
58+
* This class postpone initialization of the SYCL queue and mt19937 random number generation engine.
5959
*/
6060
class backend_sycl
6161
{
6262
#if defined(DPNP_LOCAL_QUEUE)
6363
static cl::sycl::queue* queue; /**< contains SYCL queue pointer initialized in @ref backend_sycl_queue_init */
6464
#endif
65-
static mkl_rng::philox4x32x10* rng_engine; /**< RNG engine ptr. initialized in @ref backend_sycl_rng_engine_init */
65+
static mkl_rng::mt19937* rng_engine; /**< RNG engine ptr. initialized in @ref backend_sycl_rng_engine_init */
6666

6767
static void destroy()
6868
{
@@ -136,7 +136,7 @@ class backend_sycl
136136
/**
137137
* Return the @ref rng_engine to the user
138138
*/
139-
static mkl_rng::philox4x32x10& get_rng_engine()
139+
static mkl_rng::mt19937& get_rng_engine()
140140
{
141141
if (!rng_engine)
142142
{

dpnp/random/dpnp_iface_random.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1298,7 +1298,7 @@ def shuffle(x):
12981298

12991299
def seed(seed=None):
13001300
"""
1301-
Reseed a legacy philox4x32x10 random number generator engine.
1301+
Reseed a legacy mt19937 random number generator engine.
13021302
13031303
Limitations
13041304
-----------

tests/test_random.py

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ def test_beta_check_moments():
124124
var = numpy.var(dpnp.random.beta(a=a, b=b, size=10**6))
125125
mean = numpy.mean(dpnp.random.beta(a=a, b=b, size=10**6))
126126

127-
assert math.isclose(var, expected_var, abs_tol=0.003)
128-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
127+
assert math.isclose(var, expected_var, abs_tol=0.03)
128+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
129129

130130

131131
def test_binomial_seed():
@@ -149,8 +149,8 @@ def test_binomial_check_moments():
149149
expected_var = n * p * (1 - p)
150150
var = numpy.var(dpnp.random.binomial(n=n, p=p, size=10**6))
151151
mean = numpy.mean(dpnp.random.binomial(n=n, p=p, size=10**6))
152-
assert math.isclose(var, expected_var, abs_tol=0.003)
153-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
152+
assert math.isclose(var, expected_var, abs_tol=0.03)
153+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
154154

155155

156156
def test_binomial_check_extreme_value():
@@ -259,8 +259,8 @@ def test_gamma_check_moments():
259259
expected_var = shape * scale * scale
260260
var = numpy.var(dpnp.random.gamma(shape=shape, scale=scale, size=10**6))
261261
mean = numpy.mean(dpnp.random.gamma(shape=shape, scale=scale, size=10**6))
262-
assert math.isclose(var, expected_var, abs_tol=0.003)
263-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
262+
assert math.isclose(var, expected_var, abs_tol=0.03)
263+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
264264

265265

266266
def test_geometric_seed():
@@ -292,8 +292,8 @@ def test_geometric_check_moments():
292292
expected_var = (1 - p) / (p**2)
293293
var = numpy.var(dpnp.random.geometric(p=p, size=size))
294294
mean = numpy.mean(dpnp.random.geometric(p=p, size=size))
295-
assert math.isclose(var, expected_var, abs_tol=0.003)
296-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
295+
assert math.isclose(var, expected_var, abs_tol=0.03)
296+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
297297

298298

299299
def test_geometric_check_extreme_value():
@@ -340,8 +340,8 @@ def test_gumbel_check_moments():
340340

341341
var = numpy.var(dpnp.random.gumbel(loc=loc, scale=scale, size=size))
342342
mean = numpy.mean(dpnp.random.gumbel(loc=loc, scale=scale, size=size))
343-
assert math.isclose(var, expected_var, abs_tol=0.003)
344-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
343+
assert math.isclose(var, expected_var, abs_tol=0.03)
344+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
345345

346346

347347
def test_gumbel_check_extreme_value():
@@ -419,8 +419,8 @@ def test_hypergeometric_check_moments():
419419

420420
var = numpy.var(dpnp.random.hypergeometric(ngood=ngood, nbad=nbad, nsample=nsample, size=size))
421421
mean = numpy.mean(dpnp.random.hypergeometric(ngood=ngood, nbad=nbad, nsample=nsample, size=size))
422-
assert math.isclose(var, expected_var, abs_tol=0.003)
423-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
422+
assert math.isclose(var, expected_var, abs_tol=0.03)
423+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
424424

425425

426426
def test_hypergeometric_check_extreme_value():
@@ -478,8 +478,8 @@ def test_laplace_check_moments():
478478
expected_var = 2 * scale * scale
479479
var = numpy.var(dpnp.random.laplace(loc=loc, scale=scale, size=size))
480480
mean = numpy.mean(dpnp.random.laplace(loc=loc, scale=scale, size=size))
481-
assert math.isclose(var, expected_var, abs_tol=0.003)
482-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
481+
assert math.isclose(var, expected_var, abs_tol=0.03)
482+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
483483

484484

485485
def test_laplace_check_extreme_value():
@@ -526,7 +526,7 @@ def test_lognormal_check_moments():
526526
var = numpy.var(dpnp.random.lognormal(mean=mean, sigma=sigma, size=size))
527527
mean = numpy.mean(dpnp.random.lognormal(mean=mean, sigma=sigma, size=size))
528528
assert math.isclose(var, expected_var, abs_tol=0.03)
529-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
529+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
530530

531531

532532
def test_lognormal_check_extreme_value():
@@ -605,8 +605,8 @@ def test_multinomial_check_moments():
605605

606606
var = numpy.var(dpnp.random.multinomial(n=n, pvals=pvals, size=size))
607607
mean = numpy.mean(dpnp.random.multinomial(n=n, pvals=pvals, size=size))
608-
assert math.isclose(var, expected_var, abs_tol=0.003)
609-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
608+
assert math.isclose(var, expected_var, abs_tol=0.03)
609+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
610610

611611

612612
def test_multivariate_normal_output_shape_check():
@@ -664,7 +664,7 @@ def test_multivariate_normal_check_moments():
664664
res = numpy.array(dpnp.random.multivariate_normal(mean=mean, cov=cov, size=size))
665665
res_mean = [numpy.mean(res.T[0]), numpy.mean(res.T[1])]
666666

667-
assert_allclose(res_mean, mean, rtol=1e-03, atol=0)
667+
assert_allclose(res_mean, mean, rtol=1e-02, atol=0)
668668

669669

670670
def test_negative_binomial_seed():
@@ -741,8 +741,8 @@ def test_normal_check_moments():
741741
expected_var = scale**2
742742
var = numpy.var(dpnp.random.normal(loc=loc, scale=scale, size=size))
743743
mean = numpy.mean(dpnp.random.normal(loc=loc, scale=scale, size=size))
744-
assert math.isclose(var, expected_var, abs_tol=0.003)
745-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
744+
assert math.isclose(var, expected_var, abs_tol=0.03)
745+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
746746

747747

748748
def test_normal_check_extreme_value():
@@ -785,8 +785,8 @@ def test_poisson_check_moments():
785785
expected_var = lam
786786
var = numpy.var(dpnp.random.poisson(lam=lam, size=size))
787787
mean = numpy.mean(dpnp.random.poisson(lam=lam, size=size))
788-
assert math.isclose(var, expected_var, abs_tol=0.003)
789-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
788+
assert math.isclose(var, expected_var, abs_tol=0.03)
789+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
790790

791791

792792
def test_poisson_check_extreme_value():
@@ -849,8 +849,8 @@ def test_rayleigh_check_moments():
849849
expected_var = ((4 - numpy.pi) / 2) * scale * scale
850850
var = numpy.var(dpnp.random.rayleigh(scale=scale, size=size))
851851
mean = numpy.mean(dpnp.random.rayleigh(scale=scale, size=size))
852-
assert math.isclose(var, expected_var, abs_tol=0.003)
853-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
852+
assert math.isclose(var, expected_var, abs_tol=0.03)
853+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
854854

855855

856856
def test_rayleigh_check_extreme_value():
@@ -893,8 +893,8 @@ def test_standard_exponential_check_moments():
893893
expected_var = 1.0
894894
var = numpy.var(dpnp.random.standard_exponential(size=size))
895895
mean = numpy.mean(dpnp.random.standard_exponential(size=size))
896-
assert math.isclose(var, expected_var, abs_tol=0.003)
897-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
896+
assert math.isclose(var, expected_var, abs_tol=0.03)
897+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
898898

899899

900900
def test_standard_gamma_seed():
@@ -925,8 +925,8 @@ def test_standard_gamma_check_moments():
925925
expected_var = shape
926926
var = numpy.var(dpnp.random.gamma(shape=shape, size=10**6))
927927
mean = numpy.mean(dpnp.random.gamma(shape=shape, size=10**6))
928-
assert math.isclose(var, expected_var, abs_tol=0.003)
929-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
928+
assert math.isclose(var, expected_var, abs_tol=0.03)
929+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
930930

931931

932932
def test_standard_gamma_check_extreme_value():
@@ -959,8 +959,8 @@ def test_standard_normal_check_moments():
959959
expected_var = 1.0
960960
var = numpy.var(dpnp.random.standard_normal(size=size))
961961
mean = numpy.mean(dpnp.random.standard_normal(size=size))
962-
assert math.isclose(var, expected_var, abs_tol=0.003)
963-
assert math.isclose(mean, expected_mean, abs_tol=0.003)
962+
assert math.isclose(var, expected_var, abs_tol=0.03)
963+
assert math.isclose(mean, expected_mean, abs_tol=0.03)
964964

965965

966966
def test_weibull_seed():

0 commit comments

Comments
 (0)