HIP: Heterogenous-computing Interface for Portability: CURAND API supported by HIP

HIP: Heterogenous-computing Interface for Portability

CURAND API supported by HIP

# <strong>1. CURAND Data types</strong>

| type | CUDA |**CUDA version***| HIP | HIP value (if differs) | |----------—:|------------------------------------------------------------—|:-------------—:|---------------------------------------------------------—|-------------------------—| | define |`CURAND_VER_MAJOR` | 10.1 Update 2 | | | define |`CURAND_VER_MINOR` | 10.1 Update 2 | | | define |`CURAND_VER_PATCH` | 10.1 Update 2 | | | define |`CURAND_VER_BUILD` | 10.1 Update 2 | | | define |`CURAND_VERSION` | 10.1 Update 2 | | | enum |***`curandStatus`*** | |***`hiprandStatus`*** | | enum |***`curandStatus_t`*** | |***`hiprandStatus_t`*** | | 0 |*`CURAND_STATUS_SUCCESS`* | |*`HIPRAND_STATUS_SUCCESS`* | | 100 |*`CURAND_STATUS_VERSION_MISMATCH`* | |*`HIPRAND_STATUS_VERSION_MISMATCH`* | | 101 |*`CURAND_STATUS_NOT_INITIALIZED`* | |*`HIPRAND_STATUS_NOT_INITIALIZED`* | | 102 |*`CURAND_STATUS_ALLOCATION_FAILED`* | |*`HIPRAND_STATUS_ALLOCATION_FAILED`* | | 103 |*`CURAND_STATUS_TYPE_ERROR`* | |*`HIPRAND_STATUS_TYPE_ERROR`* | | 104 |*`CURAND_STATUS_OUT_OF_RANGE`* | |*`HIPRAND_STATUS_OUT_OF_RANGE`* | | 105 |*`CURAND_STATUS_LENGTH_NOT_MULTIPLE`* | |*`HIPRAND_STATUS_LENGTH_NOT_MULTIPLE`* | | 106 |*`CURAND_STATUS_DOUBLE_PRECISION_REQUIRED`* | |*`HIPRAND_STATUS_DOUBLE_PRECISION_REQUIRED`* | | 201 |*`CURAND_STATUS_LAUNCH_FAILURE`* | |*`HIPRAND_STATUS_LAUNCH_FAILURE`* | | 202 |*`CURAND_STATUS_PREEXISTING_FAILURE`* | |*`HIPRAND_STATUS_PREEXISTING_FAILURE`* | | 203 |*`CURAND_STATUS_INITIALIZATION_FAILED`* | |*`HIPRAND_STATUS_INITIALIZATION_FAILED`* | | 204 |*`CURAND_STATUS_ARCH_MISMATCH`* | |*`HIPRAND_STATUS_ARCH_MISMATCH`* | | 999 |*`CURAND_STATUS_INTERNAL_ERROR`* | |*`HIPRAND_STATUS_INTERNAL_ERROR`* | | enum |***`curandRngType`*** | |***`hiprandRngType`*** | | enum |***`curandRngType_t`*** | |***`hiprandRngType_t`*** | | 0 |*`CURAND_RNG_TEST`* | |*`HIPRAND_RNG_TEST`* | | 100 |*`CURAND_RNG_PSEUDO_DEFAULT`* | |*`HIPRAND_RNG_PSEUDO_DEFAULT`* | 400 | | 101 |*`CURAND_RNG_PSEUDO_XORWOW`* | |*`HIPRAND_RNG_PSEUDO_XORWOW`* | 401 | | 121 |*`CURAND_RNG_PSEUDO_MRG32K3A`* | |*`HIPRAND_RNG_PSEUDO_MRG32K3A`* | 402 | | 141 |*`CURAND_RNG_PSEUDO_MTGP32`* | |*`HIPRAND_RNG_PSEUDO_MTGP32`* | 403 | | 142 |*`CURAND_RNG_PSEUDO_MT19937`* | |*`HIPRAND_RNG_PSEUDO_MT19937`* | 404 | | 161 |*`CURAND_RNG_PSEUDO_PHILOX4_32_10`* | |*`HIPRAND_RNG_PSEUDO_PHILOX4_32_10`* | 405 | | 200 |*`CURAND_RNG_QUASI_DEFAULT`* | |*`HIPRAND_RNG_QUASI_DEFAULT`* | 500 | | 201 |*`CURAND_RNG_QUASI_SOBOL32`* | |*`HIPRAND_RNG_QUASI_SOBOL32`* | 501 | | 202 |*`CURAND_RNG_QUASI_SCRAMBLED_SOBOL32`* | |*`HIPRAND_RNG_QUASI_SCRAMBLED_SOBOL32`* | 502 | | 203 |*`CURAND_RNG_QUASI_SOBOL64`* | |*`HIPRAND_RNG_QUASI_SOBOL64`* | 503 | | 204 |*`CURAND_RNG_QUASI_SCRAMBLED_SOBOL64`* | |*`HIPRAND_RNG_QUASI_SCRAMBLED_SOBOL64`* | 504 | | enum |***`curandOrdering`*** | | | | enum |***`curandOrdering_t`*** | | | | 100 |*`CURAND_ORDERING_PSEUDO_BEST`* | | | | 101 |*`CURAND_ORDERING_PSEUDO_DEFAULT`* | | | | 102 |*`CURAND_ORDERING_PSEUDO_SEEDED`* | | | | 201 |*`CURAND_ORDERING_QUASI_DEFAULT`* | | | | enum |***`curandDirectionVectorSet`*** | | | | enum |***`curandDirectionVectorSet_t`*** | | | | 101 |*`CURAND_DIRECTION_VECTORS_32_JOEKUO6`* | | | | 102 |*`CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6`* | | | | 103 |*`CURAND_DIRECTION_VECTORS_64_JOEKUO6`* | | | | 104 |*`CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6`* | | | | uint | `curandDirectionVectors32_t` | | `hiprandDirectionVectors32_t` | | uint | `curandDirectionVectors64_t` | | | | struct | `curandGenerator_st` | | `hiprandGenerator_st` | | struct* | `curandGenerator_t` | | `hiprandGenerator_t` | | double | `curandDistribution_st` | | | | double | `curandHistogramM2V_st` | | | | double* | `curandDistribution_t` | | | | double* | `curandHistogramM2V_t` | | | | struct | `curandDistributionShift_st` | | | | struct* | `curandDistributionShift_t` | | | | struct | `curandDistributionM2Shift_st` | | | | struct* | `curandDistributionM2Shift_t` | | | | struct | `curandHistogramM2_st` | | | | struct* | `curandHistogramM2_t` | | | | uint | `curandHistogramM2K_st` | | | | uint* | `curandHistogramM2K_t` | | | | struct | `curandDiscreteDistribution_st` | | `hiprandDiscreteDistribution_st` | | struct* | `curandDiscreteDistribution_t` | | `hiprandDiscreteDistribution_t` | | enum |***`curandMethod`*** | | | | enum |***`curandMethod_t`*** | | | | 0 |*`CURAND_CHOOSE_BEST`* | | | | 1 |*`CURAND_ITR`* | | | | 2 |*`CURAND_KNUTH`* | | | | 3 |*`CURAND_HITR`* | | | | 4 |*`CURAND_M1`* | | | | 5 |*`CURAND_M2`* | | | | 6 |*`CURAND_BINARY_SEARCH`* | | | | 7 |*`CURAND_DISCRETE_GAUSS`* | | | | 8 |*`CURAND_REJECTION`* | | | | 9 |*`CURAND_DEVICE_API`* | | | | 10 |*`CURAND_FAST_REJECTION`* | | | | 11 |*`CURAND_3RD`* | | | | 12 |*`CURAND_DEFINITION`* | | | | 13 |*`CURAND_POISSON`* | | | | struct | `curandStateMtgp32` | | `hiprandStateMtgp32` | | typedef | `curandStateMtgp32_t` | | `hiprandStateMtgp32_t` | | struct | `curandStateScrambledSobol64` | | | | typedef | `curandStateScrambledSobol64_t` | | | | struct | `curandStateSobol64` | | | | typedef | `curandStateSobol64_t` | | | | struct | `curandStateScrambledSobol32` | | | | typedef | `curandStateScrambledSobol32_t` | | | | struct | `curandStateSobol32` | | `hiprandStateSobol32` | | typedef | `curandStateSobol32_t` | | `hiprandStateSobol32_t` | | struct | `curandStateMRG32k3a` | | `hiprandStateMRG32k3a` | | typedef | `curandStateMRG32k3a_t` | | `hiprandStateMRG32k3a_t` | | struct | `curandStatePhilox4_32_10` | | `hiprandStatePhilox4_32_10` | | typedef | `curandStatePhilox4_32_10_t` | | `hiprandStatePhilox4_32_10_t` | | struct | `curandStateXORWOW` | | `hiprandStateXORWOW` | | typedef | `curandStateXORWOW_t` | | `hiprandStateXORWOW_t` | | struct | `curandState` | | `hiprandState` | | typedef | `curandState_t` | | `hiprandState_t` |

# <strong>2. Host API Functions</strong>

CUDA | HIP
--- | ---
`curandCreateGenerator` | `hiprandCreateGenerator`
`curandCreateGeneratorHost` | `hiprandCreateGeneratorHost`
`curandCreatePoissonDistribution` | `hiprandCreatePoissonDistribution`
`curandDestroyDistribution` | `hiprandDestroyDistribution`
`curandDestroyGenerator` | `hiprandDestroyGenerator`
`curandGenerate` | `hiprandGenerate`
`curandGenerateLogNormal` | `hiprandGenerateLogNormal`
`curandGenerateLogNormalDouble` | `hiprandGenerateLogNormalDouble`
`curandGenerateLongLong` |
`curandGenerateNormal` | `hiprandGenerateNormal`
`curandGenerateNormalDouble` | `hiprandGenerateNormalDouble`
`curandGeneratePoisson` | `hiprandGeneratePoisson`
`curandGenerateSeeds` | `hiprandGenerateSeeds`
`curandGenerateUniform` | `hiprandGenerateUniform`
`curandGenerateUniformDouble` | `hiprandGenerateUniformDouble`
`curandGetDirectionVectors32` |
`curandGetDirectionVectors64` |
`curandGetProperty` |
`curandGetScrambleConstants32` |
`curandGetScrambleConstants64` |
`curandGetVersion` | `hiprandGetVersion`
`curandSetGeneratorOffset` | `hiprandSetGeneratorOffset`
`curandSetGeneratorOrdering` |
`curandSetPseudoRandomGeneratorSeed` | `hiprandSetPseudoRandomGeneratorSeed`
`curandSetQuasiRandomGeneratorDimensions` | `hiprandSetQuasiRandomGeneratorDimensions`
`curandSetStream` | `hiprandSetStream`
`curandMakeMTGP32Constants` | `hiprandMakeMTGP32Constants`
`curandMakeMTGP32KernelState` | `hiprandMakeMTGP32KernelState`

# <strong>3. Device API Functions</strong>

CUDA | HIP
--- | ---
`curand` | `hiprand`
`curand_init` | `hiprand_init`
`curand_log_normal` | `hiprand_log_normal`
`curand_log_normal_double` | `hiprand_log_normal_double`
`curand_log_normal2` | `hiprand_log_normal2`
`curand_log_normal2_double` | `hiprand_log_normal2_double`
`curand_log_normal4` | `hiprand_log_normal4`
`curand_log_normal4_double` | `hiprand_log_normal4_double`
`curand_mtgp32_single` |
`curand_mtgp32_single_specific` |
`curand_mtgp32_specific` |
`curand_normal` | `hiprand_normal`
`curand_normal_double` | `hiprand_normal_double`
`curand_normal2` | `hiprand_normal2`
`curand_normal2_double` | `hiprand_normal2_double`
`curand_normal4` | `hiprand_normal4`
`curand_normal4_double` | `hiprand_normal4_double`
`curand_uniform` | `hiprand_uniform`
`curand_uniform_double` | `hiprand_uniform_double`
`curand_uniform2_double` | `hiprand_uniform2_double`
`curand_uniform4` | `hiprand_uniform4`
`curand_uniform4_double` | `hiprand_uniform4_double`
`curand_discrete` | `hiprand_discrete`
`curand_discrete4` | `hiprand_discrete4`
`curand_poisson` | `hiprand_poisson`
`curand_poisson4` | `hiprand_poisson4`
`curand_Philox4x32_10` |
`skipahead` | `skipahead`
`skipahead_sequence` | `skipahead_sequence`
`skipahead_subsequence` | `skipahead_subsequence`