SDB:CUDA50
This article describes how to install NVIDIA's GPU SDK "CUDA 5.0" on openSUSE 12.3.
Two workarounds are needed that are both related to the fact that gcc/g++ 4.7 is (yet) not supported by NVIDIA:
- for installing the kit
- for fixing the include files and compiling the samples
Preliminaries:
- have a GPU that is supported by CUDA
- have installed all packages needed for build
- have installed the nvidia-computeG0?, x11-video-nvidiaG0? and nvidia-gfxG0?-kmp-$flavour from ftp://download.nvidia.com/opensuse/12.3/
forcing installation of the toolkit
Download the CUDA 5.0 run file for openSUSE 12.1 (latest version available at the time of writing this) and run it like this:
bash ~/Downloads/cuda_5.0.35_linux_64_suse12.1-1.run -override compiler
That will make the installer ignore the compiler mismatch.
When asked for installation of the drivers answer *NO* as the available drivers in the SUSE repo above are already good enough (and are frequently updated by NVIDIA and tested by SUSE QA).
I have been using the default paths for installation. Depending on where *YOU* installed it you have to adopt the rest of the documentation below.
Set the library search path using
cat <<'EOF' > /etc/ld.so.conf.d/cuda.conf /usr/local/cuda/lib64 /usr/local/cuda/lib EOF
and update the library index using
ldconfig
patch the include and sample source
cd /usr/local/cuda
Then paste the following on console to fix the remaining incompatibilities:
cat <<'EOF' | patch -b -p0 diff -Nur include.orig/gcc47_cuda_compat.h include/gcc47_cuda_compat.h --- include.orig/gcc47_cuda_compat.h 1970-01-01 01:00:00.000000000 +0100 +++ include/gcc47_cuda_compat.h 2013-07-09 00:22:30.581994816 +0200 @@ -0,0 +1,16 @@ + +/* + work around gcc 4.7 incompatibilities + + /usr/include/c++/4.7/ext/atomicity.h(48): error: identifier "__atomic_fetch_add" is undefined + /usr/include/c++/4.7/ext/atomicity.h(52): error: identifier "__atomic_fetch_add" is undefined + + see https://www.udacity.com/wiki/cs344/troubleshoot_gcc47 +*/ + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) + +#undef _GLIBCXX_ATOMIC_BUILTINS +#undef _GLIBCXX_USE_INT128 + +#endif diff -Nur include.orig/host_config.h include/host_config.h --- include.orig/host_config.h 2013-07-08 23:55:12.339180082 +0200 +++ include/host_config.h 2013-07-08 23:55:28.964595126 +0200 @@ -79,7 +79,7 @@ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) -#error -- unsupported GNU version! gcc 4.7 and up are not supported! +#warning -- unsupported GNU version! gcc 4.7 and up are not supported! #endif /* __GNUC__> 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) */ diff -Nur samples.orig/Makefile samples/Makefile --- samples.orig/Makefile 2013-07-08 23:14:07.643193585 +0200 +++ samples/Makefile 2013-07-08 23:19:24.822620682 +0200 @@ -40,7 +40,7 @@ PROJECTS := $(shell find 0_Simple 1_Utilities 2_Graphics 3_Imaging 4_Finance 5_Simulations 6_Advanced 7_CUDALibraries -name Makefile) %.ph_build : - +@$(MAKE) -C $(dir $*) $(MAKECMDGOALS) + +@$(MAKE) -C $(dir $*) EXTRA_NVCCFLAGS="--pre-include gcc47_cuda_compat.h" $(MAKECMDGOALS) %.ph_clean : +@$(MAKE) -C $(dir $*) clean $(USE_DEVICE) EOF
force build
cd /usr/local/cuda/samples make -k
This will *NOT* build simpleMPI unless you have manually installed mpicxx from 3rd party repos on your system.
To take advantage of a multi-cpu/multi-core system:
make -j $numberofcores -k
On a AMD FX(tm)-4100 Quad-Core Processor this decreased compile time down to 6 minutes (instead of 24 minutes).