# CUDALink not working on Linux-64 and Asus GTX460

On my hardware I have a CUDA enabled video card an ASUS GTX460, yet Mathematica does not seem to recognize this.

I have:

• CUDA Toolkit 4.1
• CUDA SDK 4.0
• NVIDIA Driver 295.49

on Sabayon Linux 64 bit with Mathematica 8.0.0.

For example, following the CUDALink Setup, I get

Needs["CUDALink"]
CUDAQ[](* False *)


The NVIDIA command /opt/cuda/sdk/C/bin/linux/release/deviceQuery finds the card and reports "passed" as well as listing the card capabilities.

Examples from /opt/cuda/sdk/C/bin/linux/release directory, such as smokeParticles, scan, randomFog, run well.

The relevant shell variables are set as follows:

export CUDA_LIBRARY_PATH=/usr/lib64/libcuda.so

export NVIDIA_DRIVER_LIBRARY_PATH=/usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.*

Supported Hardware

The Wolfram CUDA reference page CUDA Reference does not explicitly list the GTX 460 GPU. It does list the GTX 460M, the mobile version, and a mysterious GTS 460.

The Wolfram linked NVIDIA CUDA GPUs lists the popular GTX 460 but has no entry at all for the GTS 460. Perhaps this is a typo in the Wolfram documentation, as it would seem unlikely that they wouldn't support a commonplace NVIDIA GPU whilst supporting a seemingly non-existent GPU. If this isn't the case - I'm clearly stuck.

Problems finding the NVIDIA driver

Some poking around suggests that one sticking point is that

GPUToolsInternal$NVIDIADriverLibraryVersion  is set to $Failed.

Would anyone know where this is set? From trying to Trace CUDADriverVersion it isn't obvious to me where things go wrong.

How do I convince Mathematica that my card supports CUDA?

-
This might be a silly question as I don't even have an nVidia graphics card, but what if you update your CUDA toolkit to version 4.2? There seem to be newer drivers too: nvidia.com/object/linux-display-amd64-295.53-driver.html –  Szabolcs Jun 5 '12 at 15:35
@Szabolcs It's possible, but that version isn't marked as stable for my distribution, Toolit 4.1 is the latest approved version. This is an ongoing problem and has persisted over several toolkit and driver versions, so unless there is something particular in 4.2 that addresses this I'd rather not adopt an unstable version, does that seem reasonable ? –  image_doctor Jun 5 '12 at 15:39
I needed to set the variables NVIDIA_DRIVER_LIBRARY_PATH and CUDA_LIBRARY_PATHas mentioned towards the end of the page you mention. –  b.gatessucks Jun 5 '12 at 22:06
@image_doctor I don't have a CUDA compatible card, so I can't do this. But the first thing would be finding the source code of CUDAQ. It's in SystemFiles/Links/CUDALink/CUDALink.m. You'll see it's defined in terms of DeviceCount which then uses iDeviceCount. These seem to be defined in SystemFiles/Links/GPUTools/WGLPrivate.m and use WGLQuery. You can try calling these functions manually as well as applying Trace or TracePrint to them to find out where things go wrong. It'll be a lot of work, but I think you get the idea ;-) I did it with ClusterIntegration . –  Szabolcs Jun 6 '12 at 7:53
@image_doctor On my system (the equivalent of) your export NVIDIA_DRIVER_LIBRARY_PATH=/usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.* does not work. I have to point to the specific library (ending in .so). –  b.gatessucks Jun 6 '12 at 19:56

NVIDIA_DRIVER_LIBRARY_PATH=/usr/lib64/opengl/nvidia/lib/libnvidia-tls.so