Skip to main content

oxicuda_rand/
lib.rs

1//! # OxiCUDA Rand -- GPU-Accelerated Random Number Generation
2//!
3//! This crate provides GPU-accelerated random number generation, serving as
4//! a pure Rust equivalent to NVIDIA's cuRAND library. It supports multiple
5//! RNG engines (Philox, XORWOW, MRG32k3a), various distributions (uniform,
6//! normal, log-normal, Poisson), and quasi-random sequences (Sobol).
7//!
8//! ## Engines
9//!
10//! - **Philox-4x32-10** -- Counter-based PRNG, the cuRAND default.
11//! - **XORWOW** -- XORshift with Weyl sequence, fast and suitable for
12//!   most Monte Carlo workloads.
13//! - **MRG32k3a** -- Combined multiple recursive generator with the
14//!   highest statistical quality.
15//!
16//! ## Distributions
17//!
18//! - Uniform \[0, 1) in f32/f64
19//! - Normal (Gaussian) via Box-Muller transform
20//! - Log-normal via exponentiation of normals
21//! - Poisson (Knuth for small lambda, normal approximation for large lambda)
22//!
23//! ## Quasi-random
24//!
25//! - Sobol sequences for low-discrepancy sampling in Monte Carlo integration
26
27#![warn(clippy::all)]
28#![warn(missing_docs)]
29
30pub mod distributions;
31pub mod engines;
32pub mod error;
33pub mod generator;
34pub mod graph_gen;
35pub mod matrix_gen;
36pub mod monte_carlo;
37pub mod quasi;
38pub mod statistical_tests;
39
40pub use error::{RandError, RandResult};
41pub use generator::{RngEngine, RngGenerator};
42pub use graph_gen::{
43    AdjacencyList, BarabasiAlbertGenerator, ErdosRenyiGenerator, GraphStats, GraphType,
44    RandomRegularGenerator, StochasticBlockModelGenerator, WattsStrogatzGenerator,
45};
46pub use matrix_gen::{
47    CorrelationMatrixGenerator, GaussianMatrixGenerator, MatrixLayout, OrthogonalMatrixGenerator,
48    RandomMatrix, SymmetricPositiveDefiniteGenerator, WishartGenerator,
49};
50pub use monte_carlo::{
51    BlackScholesParams, HamiltonianMC, McmcResult, MetropolisHastings, MonteCarloConfig,
52    MonteCarloResult, SamplerState,
53};
54pub use quasi::{HaltonGenerator, LatinHypercubeSampler, ScrambledSobolGenerator, SobolGenerator};
55
56/// Prelude for convenient imports.
57pub mod prelude {
58    pub use crate::error::{RandError, RandResult};
59    pub use crate::generator::{RngEngine, RngGenerator};
60    pub use crate::graph_gen::{
61        AdjacencyList, BarabasiAlbertGenerator, ErdosRenyiGenerator, GraphStats, GraphType,
62        RandomRegularGenerator, StochasticBlockModelGenerator, WattsStrogatzGenerator,
63    };
64    pub use crate::matrix_gen::{
65        CorrelationMatrixGenerator, GaussianMatrixGenerator, MatrixLayout,
66        OrthogonalMatrixGenerator, RandomMatrix, SymmetricPositiveDefiniteGenerator,
67        WishartGenerator,
68    };
69    pub use crate::monte_carlo::{
70        BlackScholesParams, HamiltonianMC, McmcResult, MetropolisHastings, MonteCarloConfig,
71        MonteCarloResult, SamplerState,
72    };
73    pub use crate::quasi::{
74        HaltonGenerator, LatinHypercubeSampler, ScrambledSobolGenerator, SobolGenerator,
75    };
76}