Compile MEX-function for GPU computation
mexcuda compiles and
links source files into a shared library called a MEX-file, executable from
within MATLAB®. The function compiles MEX-files written using the CUDA® C++ framework with the NVIDIA®
nvcc compiler, allowing the files to define and launch
GPU kernels. In addition, the
mexcuda function exposes
the GPU MEX API to allow the MEX-file to read and write gpuArrays.
mexcuda is an extension of the MATLAB
mex function. Only a subset
of the compilers supported by
mex is supported for
mexcuda. The supported compilers depend on the
CUDA Toolkit version supported by MATLAB.
Compile Simple MEX-Function
Compile a simple MEX-function to create the function
myMexFunction from a CUDA C++ source file.
An example source file is available at
Display Detailed Build and Troubleshooting Information
Use verbose mode to display the compile and link commands and other information useful for troubleshooting.
mexcuda -v myMexFunction.cu
Compile and Link Multiple Source Files
Compile and link multiple source files with one command.
mexcuda myMexFunction.cu otherSource1.cpp otherSource2.cpp
Compile and Link in Two Stages
First compile, then link to create a function.
mexcuda -c myMexFunction.cu mexcuda myMexFunction.obj
The first line compiles to
myMexFunction.o (UNIX®), and the second links to create the function
Compile with Dynamic Parallelism
Compile code that uses dynamic parallelism, defining kernels that launch other kernels.
mexcuda -dynamic myMexFunction.cu
Link to Third-Party Library
Compile a MEX-function that makes use of the CUDA image primitives library,
npp, which is
C:\Program Files\NVIDIA GPU Computing
mexcuda '-LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64' -lnppi myMexFunction.cu
filenames — One or more file names
One or more file names, including name and file extension, specified as a character vector. If the file is not in the current folder, specify the full path to the file. File names can be any combination of:
C or C++ language source files
The first source code file listed in
the name of the binary MEX-file. To override this naming convention, use
option1 ... optionN — One or more build options
character vectors corresponding to valid option flags
One or more build options, specified as one of these values. Options can appear in any order on any platform, except where indicated.
Most options available for the
mex function are
supported. In addition, the following options are also available.
Dynamic parallelism: compiles MEX-files that define kernels that launch other kernels.
Generate debug information for device code.
This makes it possible to step through kernel code
line by line in one of NVIDIA’s debugging
applications (NSight or cuda-gdb). To enable
debugging of host code use
mex function option is
Use of the MATLAB large-array-handling API is implicit, and cannot be overridden.
All other options for
mex are supported for
mexcuda. See the documentation for
mex for details.
If the CUDA toolkit is not detected or is not a supported version, MATLAB compiles the CUDA code using the NVIDIA
nvcccompiler installed with MATLAB. To check which compiler
mexcudais using, use the
-vflag for verbose output in the
The CUDA toolkit installed with MATLAB does not contain all libraries that are available in the CUDA toolkit. If you want to link a specific library that is not installed with MATLAB, install the CUDA toolkit. You can check which CUDA toolkit version MATLAB requires using
gpuDevice. For more information about the CUDA Toolkit, see CUDA Toolkit.
mexcudahas trouble locating the NVIDIA compiler (
nvcc) in your installed CUDA toolkit, it might be installed in a non-default location. You can specify the location of
nvccon your system by storing it in the environment variable
MW_NVCC_PATH. You can set this variable using the MATLAB
setenvcommand. For example,