/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-rocrand/checkouts/latest/library/include/rocrand/rocrand.h Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-rocrand/checkouts/latest/library/include/rocrand/rocrand.h Source File#

API library: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-rocrand/checkouts/latest/library/include/rocrand/rocrand.h Source File
API library
rocrand.h
1 // Copyright (c) 2017-2023 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 
29 #include "rocrand/rocrand_discrete_types.h"
30 #include "rocrand/rocrand_hip_cpu.h"
31 
32 #include <hip/hip_fp16.h>
33 #include <hip/hip_runtime.h>
34 #include <hip/hip_vector_types.h>
35 
36 #include "rocrand/rocrandapi.h"
37 
38 #include "rocrand/rocrand_version.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 typedef enum rocrand_status {
74 
78 typedef enum rocrand_rng_type
79 {
89  = 408,
91  = 409,
93  = 410,
95  = 411,
101 
103 
107 typedef enum rocrand_ordering
108 {
116 
121 {
122  ROCRAND_DIRECTION_VECTORS_32_JOEKUO6 = 101,
123  ROCRAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 = 102,
124  ROCRAND_DIRECTION_VECTORS_64_JOEKUO6 = 103,
125  ROCRAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 = 104,
127 
128 // Host API function
129 
163 rocrand_status ROCRANDAPI
164 rocrand_create_generator(rocrand_generator * generator, rocrand_rng_type rng_type);
165 
177 rocrand_status ROCRANDAPI
178 rocrand_destroy_generator(rocrand_generator generator);
179 
200 rocrand_status ROCRANDAPI
201 rocrand_generate(rocrand_generator generator,
202  unsigned int * output_data, size_t n);
203 
225 rocrand_status ROCRANDAPI rocrand_generate_long_long(rocrand_generator generator,
226  unsigned long long int* output_data,
227  size_t n);
228 
249 rocrand_status ROCRANDAPI
250 rocrand_generate_char(rocrand_generator generator,
251  unsigned char * output_data, size_t n);
252 
273 rocrand_status ROCRANDAPI
274 rocrand_generate_short(rocrand_generator generator,
275  unsigned short * output_data, size_t n);
276 
297 rocrand_status ROCRANDAPI
298 rocrand_generate_uniform(rocrand_generator generator,
299  float * output_data, size_t n);
300 
321 rocrand_status ROCRANDAPI
322 rocrand_generate_uniform_double(rocrand_generator generator,
323  double * output_data, size_t n);
324 
345 rocrand_status ROCRANDAPI
346 rocrand_generate_uniform_half(rocrand_generator generator,
347  half * output_data, size_t n);
348 
368 rocrand_status ROCRANDAPI
369 rocrand_generate_normal(rocrand_generator generator,
370  float * output_data, size_t n,
371  float mean, float stddev);
372 
392 rocrand_status ROCRANDAPI
393 rocrand_generate_normal_double(rocrand_generator generator,
394  double * output_data, size_t n,
395  double mean, double stddev);
396 
416 rocrand_status ROCRANDAPI
417 rocrand_generate_normal_half(rocrand_generator generator,
418  half * output_data, size_t n,
419  half mean, half stddev);
420 
440 rocrand_status ROCRANDAPI
441 rocrand_generate_log_normal(rocrand_generator generator,
442  float * output_data, size_t n,
443  float mean, float stddev);
444 
464 rocrand_status ROCRANDAPI
465 rocrand_generate_log_normal_double(rocrand_generator generator,
466  double * output_data, size_t n,
467  double mean, double stddev);
468 
488 rocrand_status ROCRANDAPI
489 rocrand_generate_log_normal_half(rocrand_generator generator,
490  half * output_data, size_t n,
491  half mean, half stddev);
492 
512 rocrand_status ROCRANDAPI
513 rocrand_generate_poisson(rocrand_generator generator,
514  unsigned int * output_data, size_t n,
515  double lambda);
516 
534 rocrand_status ROCRANDAPI
535 rocrand_initialize_generator(rocrand_generator generator);
536 
550 rocrand_status ROCRANDAPI
551 rocrand_set_stream(rocrand_generator generator, hipStream_t stream);
552 
578 rocrand_status ROCRANDAPI
579 rocrand_set_seed(rocrand_generator generator, unsigned long long seed);
580 
603 rocrand_status ROCRANDAPI rocrand_set_seed_uint4(rocrand_generator generator, uint4 seed);
604 
625 rocrand_status ROCRANDAPI
626 rocrand_set_offset(rocrand_generator generator, unsigned long long offset);
627 
653 rocrand_status ROCRANDAPI rocrand_set_ordering(rocrand_generator generator, rocrand_ordering order);
654 
673 rocrand_status ROCRANDAPI
675  unsigned int dimensions);
676 
689 rocrand_status ROCRANDAPI
691 
706 rocrand_status ROCRANDAPI
708  rocrand_discrete_distribution * discrete_distribution);
709 
728 rocrand_status ROCRANDAPI
729 rocrand_create_discrete_distribution(const double * probabilities,
730  unsigned int size,
731  unsigned int offset,
732  rocrand_discrete_distribution * discrete_distribution);
733 
746 rocrand_status ROCRANDAPI
748 
760 rocrand_status ROCRANDAPI rocrand_get_direction_vectors32(const unsigned int** vectors,
762 
774 rocrand_status ROCRANDAPI rocrand_get_direction_vectors64(const unsigned long long** vectors,
776 
785 rocrand_status ROCRANDAPI rocrand_get_scramble_constants32(const unsigned int** constants);
786 
795 rocrand_status ROCRANDAPI rocrand_get_scramble_constants64(const unsigned long long** constants);
796 
797 #if defined(__cplusplus)
798 }
799 #endif /* __cplusplus */
800  // end of group rocrandhost
802 
803 #endif // ROCRAND_H_
rocrand_status ROCRANDAPI rocrand_create_poisson_distribution(double lambda, rocrand_discrete_distribution *discrete_distribution)
Construct the histogram for a Poisson distribution.
rocrand_status ROCRANDAPI rocrand_generate_short(rocrand_generator generator, unsigned short *output_data, size_t n)
Generates uniformly distributed 16-bit unsigned integers.
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_status ROCRANDAPI rocrand_set_offset(rocrand_generator generator, unsigned long long offset)
Sets the offset of a random number generator.
rocrand_status ROCRANDAPI rocrand_initialize_generator(rocrand_generator generator)
Initializes the generator's state on GPU or host.
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_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 generator ordering
Definition: rocrand.h:108
rocrand_status ROCRANDAPI rocrand_generate_char(rocrand_generator generator, unsigned char *output_data, size_t n)
Generates uniformly distributed 8-bit unsigned integers.
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 function call status type
Definition: rocrand.h:60
rocrand_status ROCRANDAPI rocrand_create_generator(rocrand_generator *generator, rocrand_rng_type rng_type)
Creates a new random number generator.
rocrand_rng_type
rocRAND generator type
Definition: rocrand.h:79
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_status ROCRANDAPI rocrand_generate_uniform_half(rocrand_generator generator, half *output_data, size_t n)
Generates uniformly distributed half-precision floating-point values.
rocrand_status ROCRANDAPI rocrand_set_stream(rocrand_generator generator, hipStream_t stream)
Sets the current stream for kernel launches.
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_status ROCRANDAPI rocrand_get_scramble_constants32(const unsigned int **constants)
Get the scramble constants for 32-bit scrambled sobol generation.
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_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_status ROCRANDAPI rocrand_generate_uniform(rocrand_generator generator, float *output_data, size_t n)
Generates uniformly distributed float values.
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_status ROCRANDAPI rocrand_set_ordering(rocrand_generator generator, rocrand_ordering order)
Sets the ordering of a random number generator.
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_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_status ROCRANDAPI rocrand_get_version(int *version)
Returns the version number of the library.
rocrand_status ROCRANDAPI rocrand_set_seed_uint4(rocrand_generator generator, uint4 seed)
Sets the seeds of a pseudo-random number generator.
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 vector set
Definition: rocrand.h:121
rocrand_status ROCRANDAPI rocrand_destroy_discrete_distribution(rocrand_discrete_distribution discrete_distribution)
Destroy the histogram array for a discrete distribution.
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_status ROCRANDAPI rocrand_set_seed(rocrand_generator generator, unsigned long long seed)
Sets the seed of a pseudo-random number generator.
rocrand_status ROCRANDAPI rocrand_get_scramble_constants64(const unsigned long long **constants)
Get the scramble constants for 64-bit scrambled sobol generation.
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_status ROCRANDAPI rocrand_destroy_generator(rocrand_generator generator)
Destroys random number generator.
@ ROCRAND_ORDERING_PSEUDO_DEFAULT
Default ordering for pseudorandom results.
Definition: rocrand.h:110
@ ROCRAND_ORDERING_QUASI_DEFAULT
n-dimensional ordering for quasirandom results
Definition: rocrand.h:114
@ ROCRAND_ORDERING_PSEUDO_SEEDED
Fast lower quality pseudorandom results.
Definition: rocrand.h:111
@ ROCRAND_ORDERING_PSEUDO_DYNAMIC
Adjust to the device executing the generator.
Definition: rocrand.h:113
@ ROCRAND_ORDERING_PSEUDO_BEST
Best ordering for pseudorandom results.
Definition: rocrand.h:109
@ ROCRAND_ORDERING_PSEUDO_LEGACY
Legacy ordering for pseudorandom results.
Definition: rocrand.h:112
@ ROCRAND_STATUS_NOT_CREATED
Generator was not created using rocrand_create_generator.
Definition: rocrand.h:63
@ ROCRAND_STATUS_LAUNCH_FAILURE
Kernel launch failure.
Definition: rocrand.h:71
@ ROCRAND_STATUS_VERSION_MISMATCH
Header file and linked library version do not match.
Definition: rocrand.h:62
@ ROCRAND_STATUS_LENGTH_NOT_MULTIPLE
Definition: rocrand.h:67
@ ROCRAND_STATUS_DOUBLE_PRECISION_REQUIRED
GPU does not have double precision.
Definition: rocrand.h:70
@ ROCRAND_STATUS_SUCCESS
No errors.
Definition: rocrand.h:61
@ ROCRAND_STATUS_INTERNAL_ERROR
Internal library error.
Definition: rocrand.h:72
@ ROCRAND_STATUS_OUT_OF_RANGE
Argument out of range.
Definition: rocrand.h:66
@ ROCRAND_STATUS_ALLOCATION_FAILED
Memory allocation failed during execution.
Definition: rocrand.h:64
@ ROCRAND_STATUS_TYPE_ERROR
Generator type is wrong.
Definition: rocrand.h:65
@ ROCRAND_RNG_PSEUDO_DEFAULT
Default pseudorandom generator.
Definition: rocrand.h:80
@ ROCRAND_RNG_QUASI_SOBOL64
Sobol64 quasirandom generator.
Definition: rocrand.h:99
@ ROCRAND_RNG_PSEUDO_LFSR113
LFSR113 pseudorandom generator.
Definition: rocrand.h:86
@ ROCRAND_RNG_PSEUDO_THREEFRY2_64_20
ThreeFry 64 bit state size 2 pseudorandom generator.
Definition: rocrand.h:90
@ ROCRAND_RNG_QUASI_DEFAULT
Default quasirandom generator.
Definition: rocrand.h:96
@ ROCRAND_RNG_PSEUDO_XORWOW
XORWOW pseudorandom generator.
Definition: rocrand.h:81
@ ROCRAND_RNG_PSEUDO_THREEFRY4_32_20
ThreeFry 32 bit state size 4 pseudorandom generator.
Definition: rocrand.h:92
@ ROCRAND_RNG_PSEUDO_MRG31K3P
MRG31k3p pseudorandom generator.
Definition: rocrand.h:85
@ ROCRAND_RNG_PSEUDO_MT19937
Mersenne Twister MT19937 pseudorandom generator.
Definition: rocrand.h:87
@ ROCRAND_RNG_PSEUDO_PHILOX4_32_10
PHILOX-4x32-10 pseudorandom generator.
Definition: rocrand.h:84
@ ROCRAND_RNG_PSEUDO_THREEFRY2_32_20
ThreeFry 32 bit state size 2 pseudorandom generator.
Definition: rocrand.h:88
@ ROCRAND_RNG_PSEUDO_THREEFRY4_64_20
ThreeFry 64 bit state size 4 pseudorandom generator.
Definition: rocrand.h:94
@ ROCRAND_RNG_PSEUDO_MTGP32
Mersenne Twister MTGP32 pseudorandom generator.
Definition: rocrand.h:83
@ ROCRAND_RNG_QUASI_SOBOL32
Sobol32 quasirandom generator.
Definition: rocrand.h:97
@ ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL32
Scrambled Sobol32 quasirandom generator.
Definition: rocrand.h:98
@ ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL64
Scrambled Sobol64 quasirandom generator.
Definition: rocrand.h:100
@ ROCRAND_RNG_PSEUDO_MRG32K3A
MRG32k3a pseudorandom generator.
Definition: rocrand.h:82
int version()
Returns rocRAND version.
Definition: rocrand.hpp:3749
Represents a discrete probability distribution.
Definition: rocrand_discrete_types.h:26