# Heterogeneous random seeding

**URL:** <https://discourse.julialang.org/t/heterogeneous-random-seeding/130196>\
**Category:** GPU\
**Tags:** question, feature-request\
**Created:** [June 25, 2025, 12:58pm UTC](https://discourse.julialang.org/t/heterogeneous-random-seeding/130196 "2025-06-25T12:58:00Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![0samuraiE](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/0samuraie/32/209825_2.png) [@0samuraiE](https://discourse.julialang.org/u/0samuraiE)\
**Post date:** [June 25, 2025, 12:58pm UTC](https://discourse.julialang.org/t/heterogeneous-random-seeding/130196/1 "2025-06-25T12:58:00Z")

</div>

Hello all,

Is there a unified way to set the random seed across heterogeneous devices, such as CPU and GPU?  
I’d be happy if GPUArrays.jl or KernelAbstractions.jl provides such a method.

```julia
julia> using CUDA

julia> using Random

julia> A = CUDA.zeros(10);

julia> Random.seed!(0);

julia> rand!(A);

julia> B = CUDA.zeros(10);

julia> Random.seed!(0);

julia> rand!(B);

julia> A == B
false

julia> C = CUDA.zeros(10);

julia> CURAND.seed!(0);

julia> rand!(C);

julia> D = CUDA.zeros(10);

julia> CURAND.seed!(0);

julia> rand!(D);

julia> C == D
true

```

---

<div class="post-metadata">

**Author:** ![maleadt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/maleadt/32/10097_2.png) [@maleadt](https://discourse.julialang.org/u/maleadt)\
**Post date:** [June 25, 2025, 3:00pm UTC](https://discourse.julialang.org/t/heterogeneous-random-seeding/130196/2 "2025-06-25T15:00:20Z")

</div>

Use an explicit RNG:

```julia
julia> rng = CUDA.RNG();

julia> A = CUDA.zeros(10);

julia> Random.seed!(rng, 0);

julia> rand!(rng, A);

julia> B = CUDA.zeros(10);

julia> Random.seed!(rng, 0);

julia> rand!(rng, B);

julia> A == B
true

```

Only disadvantage is that you have to pick between the CUDA.jl native RNG (`CUDA.RNG()`) and the CURAND one(`CURAND.RNG()`). The latter is faster, but only supports types that are known to the CURAND C library.
