This is documentation for Mathematica 8, which was
based on an earlier version of the Wolfram Language.

# Reference

CUDALink allows Mathematica to use the CUDA parallel computing architecture on Graphical Processing Units (GPUs). It contains functions that use CUDA-enabled GPUs to boost performance in a number of areas, such as linear algebra, financial simulation, and image processing. CUDALink also integrates CUDA with existing Mathematica development tools, allowing a high degree of automation and control.
This section summarizes the functionality.

## Mathematica Functions

This describes the Mathematica functions provided by CUDALink.

### Query

Functions for querying the setup of CUDALink.

### Resource Installation

 CUDAResourcesInstall install the CUDA resources CUDAResourcesInformation give information on installed CUDA resources CUDAResourcesUninstall uninstall the CUDA resources

Functions for installing and uninstalling CUDALink resources.

### Image Processing

 CUDAImageConvolve convolve images with specified kernel CUDABoxFilter apply the box filter on images

Filtering functions for image processing using CUDA.

 CUDADilation apply morphological dilation on images CUDAErosion apply morphological dilation on images CUDAClosing apply morphological closing on images CUDAOpening apply morphological opening on images

Morphological functions for image processing using CUDA.

 CUDAImageAdd add two images CUDAImageSubtract subtract two images CUDAImageMultiply multiply two images CUDAImageDivide divide two images CUDAClamp clamp values of an image between a specified range CUDAColorNegate invert an image

Binary operations for image processing using CUDA.

### Fourier Transform

 CUDAFourier find the Fourier transform CUDAInverseFourier find the inverse Fourier transform

Fourier transform operations using CUDA.

### Linear Algebra

 CUDADot give product of vectors and matrices CUDATranspose tranpose input matrix CUDAArgMaxList give the index with maximum absolute element CUDAArgMinList give the index with minimum absolute element CUDATotal give the total of the absolute values of a vector

Linear algebra functions using CUDA.

Working with CUDA functions.

 NVCCCompiler compile code using the NVIDIA CUDA compiler CUDACCompilers give list of supported C compilers installed on system

 SymbolicCUDAFunction symbolic representation of a CUDA function SymbolicCUDABlockIndex symbolic representation of a block index CUDA call SymbolicCUDAThreadIndex symbolic representation of a thread index CUDA call SymbolicCUDABlockDimension symbolic representation of a block dimension CUDA call SymbolicCUDACalculateKernelIndex symbolic representation of a CUDA index calculation SymbolicCUDADeclareIndexBlock symbolic representation of a CUDA index declaration

Symbolic representations of CUDA programs.

### Memory

 CUDAMemory handle to CUDA memory registered using CUDAMemoryLoad or CUDAMemoryAllocate CUDAMemoryLoad load Mathematica memory into CUDALink returning CUDAMemory CUDAMemoryAllocate allocate memory for CUDALink returning CUDAMemory CUDAMemoryGet copy CUDAMemory to Mathematica CUDAMemoryUnload unload and delete a CUDAMemory handle CUDAMemoryInformation get CUDAMemory handle information CUDAMemoryCopyToHost copy CUDAMemory from GPU to CPU CUDAMemoryCopyToDevice copy CUDAMemory from CPU to GPU

Functions for working with memory in CUDA.

 CUDAFinancialDerivative financial option valuation CUDAMap apply a function to each element on an input list CUDASort sort input elements CUDAFold fold input elements CUDAFoldList fold input elements into a list CUDAVolumetricDataRead read raw volumetric data to be rendered CUDAVolumetricRender render volumetric data read CUDAFluidDynamics compute and render a fluid dynamics simulation

## CUDAQ and CUDAInformation

CUDAInformation gives user information on the hardware. To use, first load the CUDALink application.
This gets information on the CUDA devices on the system.
 Out[2]=
Similar to other Mathematica functions, CUDAQ will not return an error on failure. Running CUDAInformation will give an error describing why CUDA failed.
If CUDALink fails, it will return one of the following errors.

There are three main reasons for getting False from CUDAQ:
• Unsupported operating system — CUDA is not supported on SUN's Solaris or versions of Apple's OS X earlier than 10.6.3.
• Unsupported hardware — CUDA only works on CUDA-capable graphics cards.
• Incompatible graphics driver — a recent NVIDIA driver is needed for CUDA to operate properly.

## System Requirements

CUDALink requires a compatible operating system, hardware, and driver software. This section describes what these are and how to confirm them.

### Operating System

CUDALink is supported on Linux, Linux-x86-64, Windows, Windows-x86-64, Mac OS X-x86, and Mac OS X-x86-64. Mac OS X users need at least Mac OS X 10.6.3.
On Linux, CUDALink requires the system to be run in a runlevel that will load the video drivers. Usually this is default level 5, but on some servers the administrator may need to configure it manually.

### GPU Hardware

CUDALink is supported on all hardware that has CUDA support. If you are not sure of the name of your graphics card, you can see the section on Graphics Card Information.
The following hardware is currently supported:
• NVIDIA Tesla Workstation: Tesla C2050/C2070, Tesla C1060, Tesla C870, and Tesla D870.
• NVIDIA Tesla Data Center: Tesla M2050/M2070, Tesla S2050, Tesla S1070, Tesla M1060, and Tesla S870.
• GeForce: GeForce GTS 480, GeForce GTS 470, GeForce GTS 465, GeForce GTS 460, GeForce GTS 450, GeForce GTX 295, GeForce GTX 285, GeForce GTX 280, GeForce GTX 275, GeForce GTX 260, GeForce GTS 250, GeForce GTS 240, GeForce GT 220, GeForce G210, GeForce GTS 150, GeForce GT 130, GeForce GT 120, GeForce G100, GeForce 9800 GX2, GeForce 9800 GTX+, GeForce 9800 GTX, GeForce 9800 GT, GeForce 9600 GSO, GeForce 9600 GT, GeForce 9500 GT, GeForce 9400GT, GeForce 8800 Ultra, GeForce 8800 GTX, GeForce 8800 GTS, GeForce 8800 GT, GeForce 8800 GS, GeForce 8600 GTS, GeForce 8600 GT, GeForce 8500 GT, GeForce 8400 GS, GeForce 9400 mGPU, GeForce 9300 mGPU, GeForce 8300 mGPU, GeForce 8200 mGPU, and GeForce 8100 mGPU.
• GeForce Mobile: GeForce GTX 480M, GeForce GTX 470M, GeForce GTX 460M, GeForce GTX 445M, GeForce GTX 435M, GeForce GTX 425M, GeForce GTX 420M, GeForce GTX 415M, GeForce GTX 285M, GeForce GTX 280M, GeForce GTX 260M, GeForce GTS 260M, GeForce GTS 250M, GeForce GTS 160M, GeForce GTS 150M, GeForce GT 240M, GeForce GT 230M, GeForce GT 130M, GeForce G210M, GeForce G110M, GeForce G105M, GeForce G102M, GeForce 9800M GTX, GeForce 9800M GT, GeForce 9800M GTS, GeForce 9800M GS, GeForce 9700M GTS, GeForce 9700M GT, GeForce 9650M GS, GeForce 9600M GT, GeForce 9600M GS, GeForce 9500M GS, GeForce 9500M G, GeForce 9400M G, GeForce 9300M GS, GeForce 9300M G, GeForce 9200M GS, GeForce 9100M G, GeForce 8800M GTS, GeForce 8700M GT, GeForce 8600M GT, GeForce 8600M GS, GeForce 8400M GT, and GeForce 8400M GS.
• ION: ION.
An updated list of device support can be found on the NVIDIA CUDA-Enabled Products page.
Users with ATI or Intel graphics processors will not be able to use CUDA, but might be able to use OpenCL using OpenCLLink.

### Double-Precision Support

CUDALink will use double precision if it is available on the hardware detected. The following hardware has double-precision support:
• NVIDIA Tesla Workstation: Tesla C2050/C2070 and Tesla C1060.
• NVIDIA Tesla Data Center: Tesla M2050/M2070, Tesla S2050, Tesla S1070, and Tesla M1060.
• GeForce: GeForce GTS 480, GeForce GTS 470, GeForce GTS 465, GeForce GTS 460, GeForce GTS 450, GeForce GTX 295, and GeForce GTX 285.
If double-precision support is not detected, then CUDALink will represent floating-point numbers in single precision.
An updated list of computer capability can be found on the NVIDIA CUDA-Enabled Products page.
Programmatically, you can detect whether the cards on the system support double precision using CUDAInformation and checking if the is greater than or equal to 1.3.
Detect which cards on the system support double precision using CUDAInformation.
 Out[1]=

### Graphics Card Information

Detailed information on your graphics can be found in the section of SystemInformation, as shown below.
 Out[1]=
This gives information on the graphics card installed on the system.
If you have trouble finding this, then checking the graphics card is done by either checking the system documentation or going to one of the following:
• Device Manager on Windows
• System Information on Mac OS X
• Invoking lspci on Linux

### Checking the NVIDIA Driver

CUDALink has a driver version detection mechanism that is accessible using CUDADriverVersion.
 Out[1]=
An alternative to this driver detection method is operating-system specific. The following details how to get the driver version on Windows, Linux, and Mac OS X.

#### Windows

If the NVIDIA driver is installed, then the NVIDIA control panel should be in the system's control panel and will give you information. The NVIDIA control panel can be accessed by clicking Start ► Control Panel.
Inside the control panel you will see the NVIDIA control panel.
Clicking on that will open windows that allow you to edit the hardware setup.
Clicking System Information in the bottom-left corner will give you the following window.
This tells you the driver version, which is 257.21 on this machine.

#### Linux

If the NVIDIA driver is installed, then running from the command line will give version information. The following screen capture shows the system running the 256.53 version of the NVIDIA driver, which can be seen in the "NVIDIA Driver Version" system information.
If X is not available, then the following command will tell you the driver version installed.
[abduld@abduldlx ~]\$ ls /usr/lib/libnvidia-tls.so.*
/usr/lib/libnvidia-tls.so.2 /usr/lib/libnvidia-tls.so.256.53.15
The above tells you a non-supported NVIDIA driver 256.53.15 is installed on . Note that on some versions of Linux the drivers are installed in or in another nondefault location.

#### Mac OS X

To find the version information on OS X, open the Finder window and go into Applications.
Opening System Preferences will show a CUDA button if the CUDA driver is installed.
Clicking on the CUDA button will show both the CUDA driver and GPU driver versions.
CUDA driver version 3.1 or above is required by CUDALink.