AI::MXNet::CudaModule - Interface to runtime cuda kernel compile module.
Interface to runtime cuda kernel compile module. Compile and run CUDA code from Perl. In CUDA 7.5, you need to prepend your kernel definitions with 'extern "C"' to avoid name mangling:: $source = ' extern "C" __global__ void axpy(const float *x, float *y, float alpha) { int i = threadIdx.x + blockIdx.x * blockDim.x; y[i] += alpha * x[i]; } '; $module = mx->rtc->CudaModule(source); $func = $module->get_kernel("axpy", "const float *x, float *y, float alpha"); $x = mx->nd->ones([10]), ctx=>mx->gpu(0)); $y = mx->nd->zeros([10]), ctx=>mx->gpu(0)); $func->launch([$x, $y, 3.0], mx->gpu(0), [1, 1, 1], [10, 1, 1]); print $y->aspdl; Starting from CUDA 8.0, you can instead export functions by name. This also allows you to use templates:: my $source = ' template<typename DType> __global__ void axpy(const DType *x, DType *y, DType alpha) { int i = threadIdx.x + blockIdx.x * blockDim.x; y[i] += alpha * x[i]; } '; $module = mx->rtc->CudaModule($source, exports=>['axpy<float>', 'axpy<double>']); $func32 = $module->get_kernel("axpy<float>", "const float *x, float *y, float alpha"); $x = mx->nd->ones([10], dtype=>'float32', ctx=>mx->gpu(0)); $y = mx->nd->zeros([10], dtype=>'float32', ctx=>mx->gpu(0)); $func32->launch([$x, $y, 3.0], mx->gpu(0), [1, 1, 1], [10, 1, 1]); print $y->aspdl; $func64 = $module->get_kernel("axpy<double>", "const double *x, double *y, double alpha"); $x = mx->nd->ones([10], dtype=>'float64', ctx=>mx->gpu(0)); $y = mx->nd->zeros([10], dtype=>'float64', ctx=>mx->gpu(0)); $func32->launch([$x, $y, 3.0], mx->gpu(0), [1, 1, 1], [10, 1, 1]); print $y->aspdl; Parameters ---------- source : Str Complete source code. options : Str|ArrayRef[Str] Compiler flags. For example, use "-I/usr/local/cuda/include" to add cuda headers to include path. exports : Str|ArrayRef[Str] Export kernel names.
Get CUDA kernel from compiled module. Parameters ---------- $name : Str String name of the kernel. $signature : Str Function signature for the kernel. For example, if a kernel is declared as:: extern "C" __global__ void axpy(const float *x, double *y, int alpha) Then its signature should be:: const float *x, double *y, int alpha or:: const float *, double *, int Note that `*` in signature marks an argument as array and `const` marks an argument as constant (input) array. Returns ------- AI::MXNet::CudaKernel CUDA kernels that can be launched on GPUs.
AI::MXNet::CudaKernel - Constructs CUDA kernel.
Constructs CUDA kernel. Intended to be created by calling AI::MXNet::CudaModule->get_kernel only.
Launch cuda kernel. Parameters ---------- $args : ArrayRef[AI::MXNet::NDArray|Num] List of arguments for kernel. NDArrays are expected for pointer types (e.g. `float*`, `double*`) while numbers are expected for non-pointer types (e.g. `int`, `float`). $ctx : AI::MXNet::Context The context to launch kernel on. Must be GPU context. $grid_dims : array ref of 3 integers (CudaKernelShape) Grid dimensions for CUDA kernel. $block_dims : array ref of 3 integers (CudaKernelShape) Block dimensions for CUDA kernel. $shared_mem=0 : integer, optional Size of dynamically allocated shared memory. Defaults to 0.
To install AI::MXNet, copy and paste the appropriate command in to your terminal.
cpanm
cpanm AI::MXNet
CPAN shell
perl -MCPAN -e shell install AI::MXNet
For more information on module installation, please visit the detailed CPAN module installation guide.