Skip to main content
`Ctrl`+`K`

# /build/rocrand-D7zBeW/rocrand-7.2.4/library/include/rocrand/rocrand.h Source File

API library: /build/rocrand-D7zBeW/rocrand-7.2.4/library/include/rocrand/rocrand.h Source File
rocrand.h
1// Copyright (c) 2017-2025 Advanced Micro Devices, Inc. All rights reserved.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy
4// of this software and associated documentation files (the "Software"), to deal
5// in the Software without restriction, including without limitation the rights
6// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7// copies of the Software, and to permit persons to whom the Software is
8// furnished to do so, subject to the following conditions:
9//
10// The above copyright notice and this permission notice shall be included in
11// all copies or substantial portions of the Software.
12//
13// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19// THE SOFTWARE.
20
21#ifndef ROCRAND_H_
22#define ROCRAND_H_
23
28
29// IWYU pragma: begin_exports
30#include "rocrand/rocrand_discrete_types.h"
31#include "rocrand/rocrand_version.h"
32// IWYU pragma: end_exports
33
34#include "rocrand/rocrandapi.h"
35
36#include <hip/hip_fp16.h>
37#include <hip/hip_runtime.h>
38#include <hip/hip_vector_types.h>
39
42 typedef struct rocrand_generator_base_type * rocrand_generator;
44
47 typedef __half half;
49
51#define ROCRAND_DEFAULT_MAX_BLOCK_SIZE 256
52
53#if defined(__cplusplus)
54 extern "C" {
55#endif /* __cplusplus */
56
60 enum rocrand_status
61{
62 ROCRAND_STATUS_SUCCESS = 0,
63 ROCRAND_STATUS_VERSION_MISMATCH = 100,
64 ROCRAND_STATUS_NOT_CREATED = 101,
65 ROCRAND_STATUS_ALLOCATION_FAILED = 102,
66 ROCRAND_STATUS_TYPE_ERROR = 103,
67 ROCRAND_STATUS_OUT_OF_RANGE = 104,
68 ROCRAND_STATUS_LENGTH_NOT_MULTIPLE
69 = 105,
72 ROCRAND_STATUS_DOUBLE_PRECISION_REQUIRED = 106,
73 ROCRAND_STATUS_LAUNCH_FAILURE = 107,
74 ROCRAND_STATUS_INTERNAL_ERROR = 108
75};
76
77 typedef enum rocrand_status rocrand_status;
79
83 enum rocrand_rng_type
84{
85 ROCRAND_RNG_PSEUDO_DEFAULT = 400,
86 ROCRAND_RNG_PSEUDO_XORWOW = 401,
87 ROCRAND_RNG_PSEUDO_MRG32K3A = 402,
88 ROCRAND_RNG_PSEUDO_MTGP32 = 403,
89 ROCRAND_RNG_PSEUDO_PHILOX4_32_10 = 404,
90 ROCRAND_RNG_PSEUDO_MRG31K3P = 405,
91 ROCRAND_RNG_PSEUDO_LFSR113 = 406,
92 ROCRAND_RNG_PSEUDO_MT19937 = 407,
93 ROCRAND_RNG_PSEUDO_THREEFRY2_32_20
94 = 408,
95 ROCRAND_RNG_PSEUDO_THREEFRY2_64_20
96 = 409,
97 ROCRAND_RNG_PSEUDO_THREEFRY4_32_20
98 = 410,
99 ROCRAND_RNG_PSEUDO_THREEFRY4_64_20
100 = 411,
101 ROCRAND_RNG_QUASI_DEFAULT = 500,
102 ROCRAND_RNG_QUASI_SOBOL32 = 501,
103 ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 502,
104 ROCRAND_RNG_QUASI_SOBOL64 = 504,
105 ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL64 = 505
106};
107
108 typedef enum rocrand_rng_type rocrand_rng_type;
110
114 enum rocrand_ordering
115{
116 ROCRAND_ORDERING_PSEUDO_BEST = 100,
117 ROCRAND_ORDERING_PSEUDO_DEFAULT = 101,
118 ROCRAND_ORDERING_PSEUDO_SEEDED = 102,
119 ROCRAND_ORDERING_PSEUDO_LEGACY = 103,
120 ROCRAND_ORDERING_PSEUDO_DYNAMIC
121 = 104,
122 ROCRAND_ORDERING_QUASI_DEFAULT = 201
123};
124
125 typedef enum rocrand_ordering rocrand_ordering;
127
131 enum rocrand_direction_vector_set
132{
133 ROCRAND_DIRECTION_VECTORS_32_JOEKUO6 = 101,
134 ROCRAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 = 102,
135 ROCRAND_DIRECTION_VECTORS_64_JOEKUO6 = 103,
136 ROCRAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 = 104,
137};
138
139 typedef enum rocrand_direction_vector_set rocrand_direction_vector_set;
141
142// Host API function
143
177 rocrand_status ROCRANDAPI
178 rocrand_create_generator(rocrand_generator * generator, rocrand_rng_type rng_type);
179
200 rocrand_status ROCRANDAPI rocrand_create_generator_host(rocrand_generator* generator,
201 rocrand_rng_type rng_type);
202
208 rocrand_status ROCRANDAPI rocrand_create_generator_host_blocking(rocrand_generator* generator,
209 rocrand_rng_type rng_type);
210
222 rocrand_status ROCRANDAPI
223 rocrand_destroy_generator(rocrand_generator generator);
224
245 rocrand_status ROCRANDAPI
246 rocrand_generate(rocrand_generator generator,
247 unsigned int * output_data, size_t n);
248
270 rocrand_status ROCRANDAPI rocrand_generate_long_long(rocrand_generator generator,
271 unsigned long long int* output_data,
272 size_t n);
273
294 rocrand_status ROCRANDAPI
295 rocrand_generate_char(rocrand_generator generator,
296 unsigned char * output_data, size_t n);
297
318 rocrand_status ROCRANDAPI
319 rocrand_generate_short(rocrand_generator generator,
320 unsigned short * output_data, size_t n);
321
342 rocrand_status ROCRANDAPI
343 rocrand_generate_uniform(rocrand_generator generator,
344 float * output_data, size_t n);
345
366 rocrand_status ROCRANDAPI
367 rocrand_generate_uniform_double(rocrand_generator generator,
368 double * output_data, size_t n);
369
390 rocrand_status ROCRANDAPI
391 rocrand_generate_uniform_half(rocrand_generator generator,
392 half * output_data, size_t n);
393
413 rocrand_status ROCRANDAPI
414 rocrand_generate_normal(rocrand_generator generator,
415 float * output_data, size_t n,
416 float mean, float stddev);
417
437 rocrand_status ROCRANDAPI
438 rocrand_generate_normal_double(rocrand_generator generator,
439 double * output_data, size_t n,
440 double mean, double stddev);
441
461 rocrand_status ROCRANDAPI
462 rocrand_generate_normal_half(rocrand_generator generator,
463 half * output_data, size_t n,
464 half mean, half stddev);
465
485 rocrand_status ROCRANDAPI
486 rocrand_generate_log_normal(rocrand_generator generator,
487 float * output_data, size_t n,
488 float mean, float stddev);
489
509 rocrand_status ROCRANDAPI
510 rocrand_generate_log_normal_double(rocrand_generator generator,
511 double * output_data, size_t n,
512 double mean, double stddev);
513
533 rocrand_status ROCRANDAPI
534 rocrand_generate_log_normal_half(rocrand_generator generator,
535 half * output_data, size_t n,
536 half mean, half stddev);
537
557 rocrand_status ROCRANDAPI
558 rocrand_generate_poisson(rocrand_generator generator,
559 unsigned int * output_data, size_t n,
560 double lambda);
561
579 rocrand_status ROCRANDAPI
580 rocrand_initialize_generator(rocrand_generator generator);
581
595 rocrand_status ROCRANDAPI
596 rocrand_set_stream(rocrand_generator generator, hipStream_t stream);
597
623 rocrand_status ROCRANDAPI
624 rocrand_set_seed(rocrand_generator generator, unsigned long long seed);
625
648 rocrand_status ROCRANDAPI rocrand_set_seed_uint4(rocrand_generator generator, uint4 seed);
649
670 rocrand_status ROCRANDAPI
671 rocrand_set_offset(rocrand_generator generator, unsigned long long offset);
672
701 rocrand_status ROCRANDAPI rocrand_set_ordering(rocrand_generator generator, rocrand_ordering order);
702
721 rocrand_status ROCRANDAPI
722 rocrand_set_quasi_random_generator_dimensions(rocrand_generator generator,
723 unsigned int dimensions);
724
737 rocrand_status ROCRANDAPI
738 rocrand_get_version(int * version);
739
754 rocrand_status ROCRANDAPI
755 rocrand_create_poisson_distribution(double lambda,
756 rocrand_discrete_distribution * discrete_distribution);
757
776 rocrand_status ROCRANDAPI
777 rocrand_create_discrete_distribution(const double * probabilities,
778 unsigned int size,
779 unsigned int offset,
780 rocrand_discrete_distribution * discrete_distribution);
781
794 rocrand_status ROCRANDAPI
795 rocrand_destroy_discrete_distribution(rocrand_discrete_distribution discrete_distribution);
796
808 rocrand_status ROCRANDAPI rocrand_get_direction_vectors32(const unsigned int** vectors,
809 rocrand_direction_vector_set set);
810
822 rocrand_status ROCRANDAPI rocrand_get_direction_vectors64(const unsigned long long** vectors,
823 rocrand_direction_vector_set set);
824
833 rocrand_status ROCRANDAPI rocrand_get_scramble_constants32(const unsigned int** constants);
834
843 rocrand_status ROCRANDAPI rocrand_get_scramble_constants64(const unsigned long long** constants);
844
845#if defined(__cplusplus)
846}
847#endif /* __cplusplus */
848 // end of group rocrandhost
850
851#endif // ROCRAND_H_
rocrand_create_poisson_distribution
rocrand_status ROCRANDAPI rocrand_create_poisson_distribution(double lambda, rocrand_discrete_distribution *discrete_distribution)
Construct the histogram for a Poisson distribution.
rocrand_generate_short
rocrand_status ROCRANDAPI rocrand_generate_short(rocrand_generator generator, unsigned short *output_data, size_t n)
Generates uniformly distributed 16-bit unsigned integers.
rocrand_generate_normal
rocrand_status ROCRANDAPI rocrand_generate_normal(rocrand_generator generator, float *output_data, size_t n, float mean, float stddev)
Generates normally distributed float values.
rocrand_set_offset
rocrand_status ROCRANDAPI rocrand_set_offset(rocrand_generator generator, unsigned long long offset)
Sets the offset of a random number generator.
rocrand_create_generator_host_blocking
rocrand_status ROCRANDAPI rocrand_create_generator_host_blocking(rocrand_generator *generator, rocrand_rng_type rng_type)
Creates a new host random number generator, similar to rocrand_create_generator_host....
rocrand_initialize_generator
rocrand_status ROCRANDAPI rocrand_initialize_generator(rocrand_generator generator)
Initializes the generator's state on GPU or host.
rocrand_get_direction_vectors32
rocrand_status ROCRANDAPI rocrand_get_direction_vectors32(const unsigned int **vectors, rocrand_direction_vector_set set)
Get the vector for 32-bit (scrambled-)sobol generation.
rocrand_create_generator_host
rocrand_status ROCRANDAPI rocrand_create_generator_host(rocrand_generator *generator, rocrand_rng_type rng_type)
Creates a new host random number generator.
rocrand_generate_normal_double
rocrand_status ROCRANDAPI rocrand_generate_normal_double(rocrand_generator generator, double *output_data, size_t n, double mean, double stddev)
Generates normally distributed double values.
rocrand_ordering
rocrand_ordering
rocRAND generator ordering
Definition rocrand.h:115
rocrand_generate_char
rocrand_status ROCRANDAPI rocrand_generate_char(rocrand_generator generator, unsigned char *output_data, size_t n)
Generates uniformly distributed 8-bit unsigned integers.
rocrand_generate_log_normal
rocrand_status ROCRANDAPI rocrand_generate_log_normal(rocrand_generator generator, float *output_data, size_t n, float mean, float stddev)
Generates log-normally distributed float values.
rocrand_status
rocrand_status
rocRAND function call status type
Definition rocrand.h:61
rocrand_create_generator
rocrand_status ROCRANDAPI rocrand_create_generator(rocrand_generator *generator, rocrand_rng_type rng_type)
Creates a new random number generator.
rocrand_rng_type
rocrand_rng_type
rocRAND generator type
Definition rocrand.h:84
rocrand_generate_long_long
rocrand_status ROCRANDAPI rocrand_generate_long_long(rocrand_generator generator, unsigned long long int *output_data, size_t n)
Generates uniformly distributed 64-bit unsigned integers.
rocrand_generate_uniform_half
rocrand_status ROCRANDAPI rocrand_generate_uniform_half(rocrand_generator generator, half *output_data, size_t n)
Generates uniformly distributed half-precision floating-point values.
rocrand_set_stream
rocrand_status ROCRANDAPI rocrand_set_stream(rocrand_generator generator, hipStream_t stream)
Sets the current stream for kernel launches.
rocrand_generate_normal_half
rocrand_status ROCRANDAPI rocrand_generate_normal_half(rocrand_generator generator, half *output_data, size_t n, half mean, half stddev)
Generates normally distributed half values.
rocrand_get_scramble_constants32
rocrand_status ROCRANDAPI rocrand_get_scramble_constants32(const unsigned int **constants)
Get the scramble constants for 32-bit scrambled sobol generation.
rocrand_generate_uniform_double
rocrand_status ROCRANDAPI rocrand_generate_uniform_double(rocrand_generator generator, double *output_data, size_t n)
Generates uniformly distributed double-precision floating-point values.
rocrand_get_direction_vectors64
rocrand_status ROCRANDAPI rocrand_get_direction_vectors64(const unsigned long long **vectors, rocrand_direction_vector_set set)
Get the vector for 64-bit (scrambled-)sobol generation.
rocrand_generate_uniform
rocrand_status ROCRANDAPI rocrand_generate_uniform(rocrand_generator generator, float *output_data, size_t n)
Generates uniformly distributed float values.
rocrand_create_discrete_distribution
rocrand_status ROCRANDAPI rocrand_create_discrete_distribution(const double *probabilities, unsigned int size, unsigned int offset, rocrand_discrete_distribution *discrete_distribution)
Construct the histogram for a custom discrete distribution.
rocrand_set_ordering
rocrand_status ROCRANDAPI rocrand_set_ordering(rocrand_generator generator, rocrand_ordering order)
Sets the ordering of a random number generator.
rocrand_generate_poisson
rocrand_status ROCRANDAPI rocrand_generate_poisson(rocrand_generator generator, unsigned int *output_data, size_t n, double lambda)
Generates Poisson-distributed 32-bit unsigned integers.
rocrand_set_quasi_random_generator_dimensions
rocrand_status ROCRANDAPI rocrand_set_quasi_random_generator_dimensions(rocrand_generator generator, unsigned int dimensions)
Set the number of dimensions of a quasi-random number generator.
rocrand_get_version
rocrand_status ROCRANDAPI rocrand_get_version(int *version)
Returns the version number of the library.
rocrand_set_seed_uint4
rocrand_status ROCRANDAPI rocrand_set_seed_uint4(rocrand_generator generator, uint4 seed)
Sets the seeds of a pseudo-random number generator.
rocrand_generate
rocrand_status ROCRANDAPI rocrand_generate(rocrand_generator generator, unsigned int *output_data, size_t n)
Generates uniformly distributed 32-bit unsigned integers.
rocrand_direction_vector_set
rocrand_direction_vector_set
rocRAND vector set
Definition rocrand.h:132
rocrand_destroy_discrete_distribution
rocrand_status ROCRANDAPI rocrand_destroy_discrete_distribution(rocrand_discrete_distribution discrete_distribution)
Destroy the histogram array for a discrete distribution.
rocrand_generate_log_normal_double
rocrand_status ROCRANDAPI rocrand_generate_log_normal_double(rocrand_generator generator, double *output_data, size_t n, double mean, double stddev)
Generates log-normally distributed double values.
rocrand_set_seed
rocrand_status ROCRANDAPI rocrand_set_seed(rocrand_generator generator, unsigned long long seed)
Sets the seed of a pseudo-random number generator.
rocrand_get_scramble_constants64
rocrand_status ROCRANDAPI rocrand_get_scramble_constants64(const unsigned long long **constants)
Get the scramble constants for 64-bit scrambled sobol generation.
rocrand_generate_log_normal_half
rocrand_status ROCRANDAPI rocrand_generate_log_normal_half(rocrand_generator generator, half *output_data, size_t n, half mean, half stddev)
Generates log-normally distributed half values.
rocrand_destroy_generator
rocrand_status ROCRANDAPI rocrand_destroy_generator(rocrand_generator generator)
Destroys random number generator.
ROCRAND_ORDERING_PSEUDO_DEFAULT
@ ROCRAND_ORDERING_PSEUDO_DEFAULT
Default ordering for pseudorandom results.
Definition rocrand.h:117
ROCRAND_ORDERING_QUASI_DEFAULT
@ ROCRAND_ORDERING_QUASI_DEFAULT
n-dimensional ordering for quasirandom results
Definition rocrand.h:122
ROCRAND_ORDERING_PSEUDO_SEEDED
@ ROCRAND_ORDERING_PSEUDO_SEEDED
Fast lower quality pseudorandom results.
Definition rocrand.h:118
ROCRAND_ORDERING_PSEUDO_DYNAMIC
@ ROCRAND_ORDERING_PSEUDO_DYNAMIC
Adjust to the device executing the generator. The global memory usage may be higher than with the oth...
Definition rocrand.h:120
ROCRAND_ORDERING_PSEUDO_BEST
@ ROCRAND_ORDERING_PSEUDO_BEST
Best ordering for pseudorandom results.
Definition rocrand.h:116
ROCRAND_ORDERING_PSEUDO_LEGACY
@ ROCRAND_ORDERING_PSEUDO_LEGACY
Legacy ordering for pseudorandom results.
Definition rocrand.h:119
ROCRAND_STATUS_NOT_CREATED
@ ROCRAND_STATUS_NOT_CREATED
Generator was not created using rocrand_create_generator.
Definition rocrand.h:64
ROCRAND_STATUS_LAUNCH_FAILURE
@ ROCRAND_STATUS_LAUNCH_FAILURE
Kernel launch failure.
Definition rocrand.h:73
ROCRAND_STATUS_VERSION_MISMATCH
@ ROCRAND_STATUS_VERSION_MISMATCH
Header file and linked library version do not match.
Definition rocrand.h:63
ROCRAND_STATUS_LENGTH_NOT_MULTIPLE
@ ROCRAND_STATUS_LENGTH_NOT_MULTIPLE
Definition rocrand.h:68
ROCRAND_STATUS_DOUBLE_PRECISION_REQUIRED
@ ROCRAND_STATUS_DOUBLE_PRECISION_REQUIRED
GPU does not have double precision.
Definition rocrand.h:72
ROCRAND_STATUS_SUCCESS
@ ROCRAND_STATUS_SUCCESS
No errors.
Definition rocrand.h:62
ROCRAND_STATUS_INTERNAL_ERROR
@ ROCRAND_STATUS_INTERNAL_ERROR
Internal library error.
Definition rocrand.h:74
ROCRAND_STATUS_OUT_OF_RANGE
@ ROCRAND_STATUS_OUT_OF_RANGE
Argument out of range.
Definition rocrand.h:67
ROCRAND_STATUS_ALLOCATION_FAILED
@ ROCRAND_STATUS_ALLOCATION_FAILED
Memory allocation failed during execution.
Definition rocrand.h:65
ROCRAND_STATUS_TYPE_ERROR
@ ROCRAND_STATUS_TYPE_ERROR
Generator type is wrong.
Definition rocrand.h:66
ROCRAND_RNG_PSEUDO_DEFAULT
@ ROCRAND_RNG_PSEUDO_DEFAULT
Default pseudorandom generator.
Definition rocrand.h:85
ROCRAND_RNG_QUASI_SOBOL64
@ ROCRAND_RNG_QUASI_SOBOL64
Sobol64 quasirandom generator.
Definition rocrand.h:104
ROCRAND_RNG_PSEUDO_LFSR113
@ ROCRAND_RNG_PSEUDO_LFSR113
LFSR113 pseudorandom generator.
Definition rocrand.h:91
ROCRAND_RNG_PSEUDO_THREEFRY2_64_20
@ ROCRAND_RNG_PSEUDO_THREEFRY2_64_20
ThreeFry 64 bit state size 2 pseudorandom generator.
Definition rocrand.h:95
ROCRAND_RNG_QUASI_DEFAULT
@ ROCRAND_RNG_QUASI_DEFAULT
Default quasirandom generator.
Definition rocrand.h:101
ROCRAND_RNG_PSEUDO_XORWOW
@ ROCRAND_RNG_PSEUDO_XORWOW
XORWOW pseudorandom generator.
Definition rocrand.h:86
ROCRAND_RNG_PSEUDO_THREEFRY4_32_20
@ ROCRAND_RNG_PSEUDO_THREEFRY4_32_20
ThreeFry 32 bit state size 4 pseudorandom generator.
Definition rocrand.h:97
ROCRAND_RNG_PSEUDO_MRG31K3P
@ ROCRAND_RNG_PSEUDO_MRG31K3P
MRG31k3p pseudorandom generator.
Definition rocrand.h:90
ROCRAND_RNG_PSEUDO_MT19937
@ ROCRAND_RNG_PSEUDO_MT19937
Mersenne Twister MT19937 pseudorandom generator.
Definition rocrand.h:92
ROCRAND_RNG_PSEUDO_PHILOX4_32_10
@ ROCRAND_RNG_PSEUDO_PHILOX4_32_10
PHILOX-4x32-10 pseudorandom generator.
Definition rocrand.h:89
ROCRAND_RNG_PSEUDO_THREEFRY2_32_20
@ ROCRAND_RNG_PSEUDO_THREEFRY2_32_20
ThreeFry 32 bit state size 2 pseudorandom generator.
Definition rocrand.h:93
ROCRAND_RNG_PSEUDO_THREEFRY4_64_20
@ ROCRAND_RNG_PSEUDO_THREEFRY4_64_20
ThreeFry 64 bit state size 4 pseudorandom generator.
Definition rocrand.h:99
ROCRAND_RNG_PSEUDO_MTGP32
@ ROCRAND_RNG_PSEUDO_MTGP32
Mersenne Twister MTGP32 pseudorandom generator.
Definition rocrand.h:88
ROCRAND_RNG_QUASI_SOBOL32
@ ROCRAND_RNG_QUASI_SOBOL32
Sobol32 quasirandom generator.
Definition rocrand.h:102
ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL32
@ ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL32
Scrambled Sobol32 quasirandom generator.
Definition rocrand.h:103
ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL64
@ ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL64
Scrambled Sobol64 quasirandom generator.
Definition rocrand.h:105
ROCRAND_RNG_PSEUDO_MRG32K3A
@ ROCRAND_RNG_PSEUDO_MRG32K3A
MRG32k3a pseudorandom generator.
Definition rocrand.h:87