## GPGPU / NVidia Cuda / OpenSuse 11

From: "andrew cooke" <andrew@...>

Date: Mon, 14 Jul 2008 23:40:44 -0400 (CLT)

I decided to explore GPGPU - http://en.wikipedia.org/wiki/GPGPU

After a look around it seemed like NVidia CUDA had most activity/support
and a low entry price.  So I went out and bought me a new graphics card (a
couple of days before the rumours started about bad 8400 and 8600 chips) -
an air-cooled MSI GeForce NX8600GT with 512 MB memory (nothing wonderful -
just one step up from the minimum so it should, hopefully, be faster than
my CPU).

a look at my disks, and found they were worryingly high at around 45C;
Removing an unused bracket from inside the case improved airflow and got
them down to around 35C.  The GPU sits at just under 50C when in normal
use - the heatsink is directly under a fairly quiet case mounted fan (I
bought aircooled mainly because I was worried about replacement GPU fans -
I know I can find quiet, case-mounted fans no problem)).

Then I installed the software.  The NVidia site -
http://www.nvidia.com/object/cuda_get.html - doesn't mention OpenSuse 11,
but the 10.3 stuff has worked OK so far.  First I installed the driver,
which works the same as other NVidia binary driver installs (a curses
non-X interface that compiles and installs automatically - looks a bit odd
but has always been very reliable).  Next the support library, and finally
the SDK.

The SDK install was a bit odd - turns out there's a Perl script in there
that's buffering text it should be sending to stdout.  So here's the
workaround:

./NVIDIA_CUDA_sdk_2.0beta2_linux.run --help

shows a bunch of options, including one to just unpack the source.  Use
that.  Then edit the perl script - install-sdk-linux.pl - so that it
includes

select((select(STDOUT), |=1)[0]); just before the first "if" statement. Then run the script. I've not actually used the toolkit yet - will post updates later. Andrew ### Using gcc-4.3 From: "andrew cooke" <andrew@...> Date: Tue, 15 Jul 2008 00:22:18 -0400 (CLT) Just hit this: http://forums.nvidia.com/lofiversion/index.php?t70216.html (I had to modify cmd_arg_reader.h instead of .cpp, and cppIntegration.cpp seems to be missing from a path). Also hit the first known issue here: http://developer.download.nvidia.com/compute/cuda/1_1/CUDA_SDK_release_notes_linux.txt Also hit http://forums.nvidia.com/lofiversion/index.php?t43510.html ...and with those fixes, it seems to work - compile with no further errors, and the first example runs! While running the screen locks up (mouse disappears) for a moment, and the GPU temperature increases slightly. :o) Ooo - and some graphics demos too :o))) qp6c release: ./deviceQuery There is 1 device supporting CUDA Device 0: "GeForce 8600 GT" Major revision number: 1 Minor revision number: 1 Total amount of global memory: 536543232 bytes Number of multiprocessors: 4 Number of cores: 32 Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 16384 bytes Total number of registers available per block: 8192 Warp size: 32 Maximum number of threads per block: 512 Maximum sizes of each dimension of a block: 512 x 512 x 64 Maximum sizes of each dimension of a grid: 65535 x 65535 x 1 Maximum memory pitch: 262144 bytes Texture alignment: 256 bytes Clock rate: 1.19 GHz Concurrent copy and execution: Yes Andrew ### Diff and Patched CUDA SDK for OpenSuse 11, 64 bit From: "andrew cooke" <andrew@...> Date: Thu, 17 Jul 2008 08:32:41 -0400 (CLT) Updated: Diffs now include change to installer perl script too (tarball is unchanged) Important: see additional instructions at the end of this post. There are also downloads below. Here is a simple diff of the changes I made. Note that they are just as I did them in a hurry, taking no care to place includes under correct comment blocks etc: qp6c nvidia: diff -r sdk sdk-patched diff -r sdk/install-sdk-linux.pl sdk-patched/install-sdk-linux.pl 20a21,22 > select((select(STDOUT),|=1)[0]);
>
diff -r sdk/sdk/common/common.mk sdk-patched/sdk/common/common.mk
125c125,126
< CUBIN_ARCH_FLAG := -m32
---
> #CUBIN_ARCH_FLAG := -m32
> CUBIN_ARCH_FLAG := -m64
34a35,36
> #include <typeinfo>
>
diff -r sdk/sdk/common/inc/exception.h sdk-patched/sdk/common/inc/exception.h
37a38
> #include <cstdlib>
diff -r sdk/sdk/common/src/cutil.cpp sdk-patched/sdk/common/src/cutil.cpp
52a53
> #include <cstring>
diff -r sdk/sdk/common/src/paramgl.cpp sdk-patched/sdk/common/src/paramgl.cpp
8a9
> #include <cstring>
diff -r sdk/sdk/projects/cppIntegration/main.cpp
sdk-patched/sdk/projects/cppIntegration/main.cpp
47a48
> #include <cstdlib>

For a limited time, I am also providing the following downloads.  There's
no intention of breaking any copyright and if NVidia or anyone else wants
these removed, please just email me at andrew@...

A context diff is available at
http://www.acooke.org/cuda-sdk.diff

A gzipped tarball of the patched SDK is available at
http://www.acooke.org/sdk-patched.tgz
To use this, unpack and then run the perl script install-sdk-linux.pl

*** IMPORTANT ****

In addition, you still need to apply the fix described at

This means doing the following:
sudo ln -s /usr/lib64/libglut.so.3 /usr/lib64/libglut.so

So, to use CUDA on OpenSuse 11 64 bit you must:
1: Install the various drivers and support files provide by NVidia
2: Instead of installing the SDK they provide, install the one provided
above.
3: Link libglut as described above

For 32 bit things should be similar, but omit the "-m64" change in
common.mk and look for libglut in /usr/lib.

Disclaimer:
With these changes I can (nearly?) run all the examples.  I have not done
any other work yet with CUDA.

Andrew

### More Notes on GPGPU Programming

From: andrew cooke <andrew@...>

Date: Sat, 9 Jan 2010 12:22:27 -0300

Since writing the notes here I switched to OpenCL.  See the following links:

http://www.acooke.org/cute/Experience0.html - Summarizes the work I
did moving code from Matlab to OpenCL (a speedup of around 100x).

http://acooke.org/cute/MatlabonNV0.html - Earlier notes on Matlab +
Andrew