From 9cb2366d2782e5262f2905b95c926b0893ce89a9 Mon Sep 17 00:00:00 2001 From: Avik Pal Date: Mon, 1 Sep 2025 14:26:17 -0400 Subject: [PATCH 1/4] fix: indexing for `gpu_rand` --- src/host/random.jl | 5 +++-- test/testsuite/random.jl | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/host/random.jl b/src/host/random.jl index 256ecea9..cb79de3b 100644 --- a/src/host/random.jl +++ b/src/host/random.jl @@ -97,8 +97,9 @@ function Random.randn!(rng::RNG, A::AnyGPUArray{T}) where T <: Number @kernel function randn!(a, randstates) i = @index(Global, Linear) idx = 2*(i - 1) + 1 - U1 = gpu_rand(T, i, randstates) - U2 = gpu_rand(T, i, randstates) + threadidx = (i-1)%length(randstates) + 1 + U1 = gpu_rand(T, threadidx, randstates) + U2 = gpu_rand(T, threadidx, randstates) Z0 = sqrt(T(-2.0)*log(U1))*cos(T(2pi)*U2) Z1 = sqrt(T(-2.0)*log(U1))*sin(T(2pi)*U2) @inbounds a[idx] = Z0 diff --git a/test/testsuite/random.jl b/test/testsuite/random.jl index f2cf832a..cec0a74b 100644 --- a/test/testsuite/random.jl +++ b/test/testsuite/random.jl @@ -7,7 +7,7 @@ cpu_rng = Random.default_rng() @testset "rand" begin # uniform - for T in eltypes, d in (10, (10,10)) + for T in eltypes, d in (10, (10,10), (128,128)) A = AT{T}(undef, d) B = copy(A) rand!(rng, A) From 8daec657a9c58aaf5d38131bd2901f0bb1b57d96 Mon Sep 17 00:00:00 2001 From: Avik Pal Date: Mon, 1 Sep 2025 14:28:07 -0400 Subject: [PATCH 2/4] chore: fix runic formatting --- src/host/random.jl | 2 +- test/testsuite/random.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/host/random.jl b/src/host/random.jl index cb79de3b..a7419e40 100644 --- a/src/host/random.jl +++ b/src/host/random.jl @@ -97,7 +97,7 @@ function Random.randn!(rng::RNG, A::AnyGPUArray{T}) where T <: Number @kernel function randn!(a, randstates) i = @index(Global, Linear) idx = 2*(i - 1) + 1 - threadidx = (i-1)%length(randstates) + 1 + threadidx = (i - 1) % length(randstates) + 1 U1 = gpu_rand(T, threadidx, randstates) U2 = gpu_rand(T, threadidx, randstates) Z0 = sqrt(T(-2.0)*log(U1))*cos(T(2pi)*U2) diff --git a/test/testsuite/random.jl b/test/testsuite/random.jl index cec0a74b..78156bf5 100644 --- a/test/testsuite/random.jl +++ b/test/testsuite/random.jl @@ -7,7 +7,7 @@ cpu_rng = Random.default_rng() @testset "rand" begin # uniform - for T in eltypes, d in (10, (10,10), (128,128)) + for T in eltypes, d in (10, (10, 10), (128, 128)) A = AT{T}(undef, d) B = copy(A) rand!(rng, A) From 39c3f4b82c12c4506adb379c9733c1a24f45a57b Mon Sep 17 00:00:00 2001 From: Avik Pal Date: Mon, 1 Sep 2025 16:38:14 -0400 Subject: [PATCH 3/4] test: see which testset fails --- src/host/random.jl | 2 +- test/testsuite/random.jl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/host/random.jl b/src/host/random.jl index a7419e40..7759e841 100644 --- a/src/host/random.jl +++ b/src/host/random.jl @@ -96,8 +96,8 @@ function Random.randn!(rng::RNG, A::AnyGPUArray{T}) where T <: Number threads = (length(A) - 1) ÷ 2 + 1 @kernel function randn!(a, randstates) i = @index(Global, Linear) + threadidx = @index(Local, Linear) idx = 2*(i - 1) + 1 - threadidx = (i - 1) % length(randstates) + 1 U1 = gpu_rand(T, threadidx, randstates) U2 = gpu_rand(T, threadidx, randstates) Z0 = sqrt(T(-2.0)*log(U1))*cos(T(2pi)*U2) diff --git a/test/testsuite/random.jl b/test/testsuite/random.jl index 78156bf5..99d54958 100644 --- a/test/testsuite/random.jl +++ b/test/testsuite/random.jl @@ -7,7 +7,7 @@ cpu_rng = Random.default_rng() @testset "rand" begin # uniform - for T in eltypes, d in (10, (10, 10), (128, 128)) + for T in eltypes, d in (10, (10,10)) A = AT{T}(undef, d) B = copy(A) rand!(rng, A) @@ -44,7 +44,7 @@ @testset "randn" begin # normally-distributed # XXX: randn calls sqrt, and Base's sqrt(::Complex) performs # checked type conversions that throw boxed numbers. - for T in filter(isrealfloattype, eltypes), d in (2, (2,2)) + for T in filter(isrealfloattype, eltypes), d in (2, (2, 2), (128, 128)) A = AT{T}(undef, d) B = copy(A) randn!(rng, A) From f37e4de7de0a1d69e34c4e5154c7fdf099e6382c Mon Sep 17 00:00:00 2001 From: Avik Pal Date: Wed, 3 Sep 2025 09:42:31 -0400 Subject: [PATCH 4/4] test: try using approx --- test/testsuite/random.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testsuite/random.jl b/test/testsuite/random.jl index 99d54958..f9430258 100644 --- a/test/testsuite/random.jl +++ b/test/testsuite/random.jl @@ -56,7 +56,7 @@ randn!(rng, A) Random.seed!(rng, 1) randn!(rng, B) - @test Array(A) == Array(B) + @test Array(A) ≈ Array(B) if rng != cpu_rng randn!(cpu_rng, A)