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_

 // end of group hiprandhost