# Program Listing for File hiprand.h

↰ Return to documentation for file (`hiprand/hiprand.h`)

    // Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved.
    //
    // Permission is hereby granted, free of charge, to any person obtaining a copy
    // of this software and associated documentation files (the "Software"), to deal
    // in the Software without restriction, including without limitation the rights
    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    // copies of the Software, and to permit persons to whom the Software is
    // furnished to do so, subject to the following conditions:
    //
    // The above copyright notice and this permission notice shall be included in
    // all copies or substantial portions of the Software.
    //
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    // THE SOFTWARE.

    #ifndef HIPRAND_H_
    #define HIPRAND_H_

    #include <hip/hip_runtime.h>
    #include <hip/hip_fp16.h>

    #ifndef HIPRANDAPI
    #ifdef WIN32
      #ifdef hiprand_EXPORTS
      /* We are building this library */
        #define HIPRANDAPI __declspec(dllexport)
      #else
        /* We are using this library */
        #define HIPRANDAPI __declspec(dllimport)
      #endif
    #else
      #define HIPRANDAPI
    #endif
    #endif

    #include "hiprand/hiprand_version.h"
    #ifdef HIPRAND_DOXYGEN // Only for the documentation
    #define HIPRAND_VERSION
    #endif

    #if defined(__HIP_PLATFORM_HCC__) || defined(__HIP_PLATFORM_AMD__)
    #include "hiprand/hiprand_hcc.h"
    #elif defined(__HIP_PLATFORM_NVCC__)
    #include "hiprand/hiprand_nvcc.h"
    #endif

    typedef hiprandGenerator_st * hiprandGenerator_t;

    typedef hiprandDiscreteDistribution_st * hiprandDiscreteDistribution_t;

    typedef __half half;

    #define HIPRAND_DEFAULT_MAX_BLOCK_SIZE 256
    #define HIPRAND_DEFAULT_MIN_WARPS_PER_EU 1

    #if defined(__cplusplus)
    extern "C" {
    #endif /* __cplusplus */

    typedef enum hiprandStatus {
        HIPRAND_STATUS_SUCCESS = 0,
        HIPRAND_STATUS_VERSION_MISMATCH = 100,
        HIPRAND_STATUS_NOT_INITIALIZED = 101,
        HIPRAND_STATUS_ALLOCATION_FAILED = 102,
        HIPRAND_STATUS_TYPE_ERROR = 103,
        HIPRAND_STATUS_OUT_OF_RANGE = 104,
        HIPRAND_STATUS_LENGTH_NOT_MULTIPLE = 105,
        HIPRAND_STATUS_DOUBLE_PRECISION_REQUIRED = 106,
        HIPRAND_STATUS_LAUNCH_FAILURE = 201,
        HIPRAND_STATUS_PREEXISTING_FAILURE = 202,
        HIPRAND_STATUS_INITIALIZATION_FAILED = 203,
        HIPRAND_STATUS_ARCH_MISMATCH = 204,
        HIPRAND_STATUS_INTERNAL_ERROR = 999,
        HIPRAND_STATUS_NOT_IMPLEMENTED = 1000
    } hiprandStatus_t;

    typedef enum hiprandRngType {
        HIPRAND_RNG_TEST = 0,
        HIPRAND_RNG_PSEUDO_DEFAULT = 400,
        HIPRAND_RNG_PSEUDO_XORWOW = 401,
        HIPRAND_RNG_PSEUDO_MRG32K3A = 402,
        HIPRAND_RNG_PSEUDO_MTGP32 = 403,
        HIPRAND_RNG_PSEUDO_MT19937 = 404,
        HIPRAND_RNG_PSEUDO_PHILOX4_32_10 = 405,
        HIPRAND_RNG_QUASI_DEFAULT = 500,
        HIPRAND_RNG_QUASI_SOBOL32 = 501,
        HIPRAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 502,
        HIPRAND_RNG_QUASI_SOBOL64 = 503,
        HIPRAND_RNG_QUASI_SCRAMBLED_SOBOL64 = 504
    } hiprandRngType_t;

    // Host API functions

    hiprandStatus_t HIPRANDAPI
    hiprandCreateGenerator(hiprandGenerator_t * generator, hiprandRngType_t rng_type);

    hiprandStatus_t HIPRANDAPI
    hiprandCreateGeneratorHost(hiprandGenerator_t * generator, hiprandRngType_t rng_type);

    hiprandStatus_t HIPRANDAPI
    hiprandDestroyGenerator(hiprandGenerator_t generator);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerate(hiprandGenerator_t generator,
                    unsigned int * output_data, size_t n);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateChar(hiprandGenerator_t generator,
                        unsigned char * output_data, size_t n);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateShort(hiprandGenerator_t generator,
                         unsigned short * output_data, size_t n);

    hiprandStatus_t HIPRANDAPI hiprandGenerateLongLong(hiprandGenerator_t  generator,
                                                       unsigned long long* output_data,
                                                       size_t              n);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateUniform(hiprandGenerator_t generator,
                           float * output_data, size_t n);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateUniformDouble(hiprandGenerator_t generator,
                                 double * output_data, size_t n);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateUniformHalf(hiprandGenerator_t generator,
                               half * output_data, size_t n);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateNormal(hiprandGenerator_t generator,
                          float * output_data, size_t n,
                          float mean, float stddev);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateNormalDouble(hiprandGenerator_t generator,
                                double * output_data, size_t n,
                                double mean, double stddev);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateNormalHalf(hiprandGenerator_t generator,
                              half * output_data, size_t n,
                              half mean, half stddev);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateLogNormal(hiprandGenerator_t generator,
                             float * output_data, size_t n,
                             float mean, float stddev);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateLogNormalDouble(hiprandGenerator_t generator,
                                   double * output_data, size_t n,
                                   double mean, double stddev);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateLogNormalHalf(hiprandGenerator_t generator,
                                 half * output_data, size_t n,
                                 half mean, half stddev);

    hiprandStatus_t HIPRANDAPI
    hiprandGeneratePoisson(hiprandGenerator_t generator,
                           unsigned int * output_data, size_t n,
                           double lambda);

    hiprandStatus_t HIPRANDAPI
    hiprandGenerateSeeds(hiprandGenerator_t generator);

    hiprandStatus_t HIPRANDAPI
    hiprandSetStream(hiprandGenerator_t generator, hipStream_t stream);

    hiprandStatus_t HIPRANDAPI
    hiprandSetPseudoRandomGeneratorSeed(hiprandGenerator_t generator, unsigned long long seed);

    hiprandStatus_t HIPRANDAPI
    hiprandSetGeneratorOffset(hiprandGenerator_t generator, unsigned long long offset);

    hiprandStatus_t HIPRANDAPI
    hiprandSetQuasiRandomGeneratorDimensions(hiprandGenerator_t generator, unsigned int dimensions);

    hiprandStatus_t HIPRANDAPI
    hiprandGetVersion(int * version);

    hiprandStatus_t HIPRANDAPI
    hiprandCreatePoissonDistribution(double lambda, hiprandDiscreteDistribution_t * discrete_distribution);

    hiprandStatus_t HIPRANDAPI
    hiprandDestroyDistribution(hiprandDiscreteDistribution_t discrete_distribution);

    #if defined(__cplusplus)
    }
    #endif /* __cplusplus */

    #endif // HIPRAND_H_