Skip to content Skip to sidebar Skip to footer

Calling __host__ Functions In Pycuda

Is it possible to call __host__ functions in pyCUDA like you can __global__ functions? I noticed in the documentation that pycuda.driver.Function creates a handle to a __global__ f

Solution 1:

Below, I'm providing a sample code to call CUDA APIs in pyCUDA. The code generates uniformly distributed random numbers and may serve as a reference to include already made functions (as the poster says and like CUDA APIs) in a pyCUDA code.

import numpy             as np
import ctypes

import pycuda.driver      as drv
import pycuda.gpuarray    as gpuarray
import pycuda.autoinit

curand = CDLL("/usr/local/cuda/lib64/libcurand.so")

# --- Number of elements to generate
N = 10

# --- cuRAND enums
CURAND_RNG_PSEUDO_DEFAULT    = 100

# --- Query the cuRAND version
i = c_ulonglong()
curand.curandGetVersion(byref(i))
print("curand version: ", i.value)

# --- Allocate space for generation
d_x = gpuarray.empty(N, dtype = np.float32)

# --- Create random number generator
gen = c_ulonglong()
curand.curandCreateGenerator(byref(gen), CURAND_RNG_PSEUDO_DEFAULT)

# --- Generate random numbers
curand.curandGenerateUniform(gen, ctypes.cast(d_x.ptr, POINTER(c_float)), N)

print(d_x)

Post a Comment for "Calling __host__ Functions In Pycuda"