Install+Ubuntu+12.04.3+with+CUDA+5.5+support+on+a+OPTIMUS+video+card+system

=__Installatie van Ubuntu 12.04.3 LTS op een systeem met een NVIDIA OPTIMUS enabled GPGPU kaart en CUDA 5.5 ondersteuning__=

__**STAP 1**: Installeer Ubuntu 12.04.3 op uw systeem__


 * Ga naar lokaal C206 en neem de installatie CD uit de kast
 * Steek de CD in je CD-drive
 * Heropstarten van je systeem + installatie van Ubuntu (kies ook meteen voor online updates)

__**STAP 2:** Updates installeren en je aptitude updaten__


 * Na een installatie komt de update manager vragen om heel wat fixes en updates uit te voeren --> doen!
 * Ga naar een terminal en typ de volgende commando's (steeds met sudo/administrator rechten)

//sudo apt-get update// //sudo apt-get upgrade//

__**STAP 3:** zorgen dat er geen enkele nvidia installatie op je systeem staat__


 * Is zeker nodig als je een bestaand systeem gebruikt
 * Wordt gebruikt om de bestaande drivers van nvidia te verwijderen en stap voor stap de correcte te installeren
 * In terminal geef je volgende commando's

//nvidia-uninstall// //sudo apt-get remove --purge nvidia*//

__**STAP 4:** installeer Bumblebee en de bijhorende Nvidia drivers__


 * Download geen drivers via de NVIDIA website maar doe alles via apt - repositories
 * Verwijder de standaard linux headers (geven problemen in 12.04.3)

//sudo apt-get remove linux-headers-generic//


 * In terminal geef je volgende commando's

//sudo add-apt-repository ppa:bumblebee/stable// //sudo add-apt-repository ppa:ubuntu-x-swat/x-updates// //sudo apt-get update// //sudo apt-get install bumblebee bumblebee-nvidia virtualgl linux-headers-generic-lts-raring// //sudo reboot//


 * Dit zorgt dat de nvidia-304 drivers geinstalleerd worden via het nvidia-current package. CUDA5.5 wordt door deze driver niet ondersteund en dus moeten we een recentere driver installeren in de volgende stap.

__**STAP 5:** Installeer de laatste nieuwe nvidia drivers voor Ubuntu 12.04.3 zodat CUDA 5.5 ondersteund wordt__


 * Installeer de recentste ondersteunde drivers voor deze kernel via

//sudo apt-get install nvidia-319-updates nvidia-settings-319-updates// //sudo reboot//

__**STAP 6:** Configureer bumblebee correct, zodanig dat je optirun kan gebruiken__


 * Optirun is de manier om via bumblebee te zeggen dat je software op de NVIDIA GPU wil uitvoeren en niet de zwakkere intel GPU die aanwezig is
 * Eerst zorgen dat je in **/etc/bumblebee/bumblebee.conf** de bumblebee configuratie bijstuurt. Stel volgende zaken opnieuw in

//[bumblebeed]// //Driver=nvidia//

//[driver-nvidia]// //KernelDriver=nvidia-319-updates// //LibraryPath=/usr/lib/nvidia-319-updates:/usr/lib32/nvidia-319-updates// //XorgModulePath=/usr/lib/nvidia-319-updates/xorg,/usr/lib/xorg/modules//


 * Add a line in /etc/bumblebee/xorg.conf.nvidia using the correct guidelines. We will explicitly specify the bus address of the nvidia GPU card.

//Section "Device"// //Identifier "DiscreteNvidia"// //Driver "nvidia"// //VendorName "NVIDIA Corporation"// //BusID "PCI:01:00:0"//


 * Herstart de bumblebee deamon zodat de wijzigingen opgenomen worden

s//udo service bumblebeed restart//

Op dit moment zou je een werkende bumblebee deamon moeten hebben die doet wat noodzakelijk is. Je kan dit testen via de volgende stappen:


 * Controleer of bumblebee deamon correct opstart door het process expliciet op te starten met een debugger

//sudo bumblebeed --debug//


 * Controleer zeker in de debug output of de driver (nvidia-319-updates) correct geinitialiseerd wordt een je bericht krijgt dat de deamon op messages wacht.
 * Controleer nu of je software kan opstarten via de NVIDIA GPU (in feite de rendering die gedaan wordt op GPU via de bumblebee pipeline)

//optirun -vv firefox//


 * Als alles correct werkt, zal een firefox venster openen. Groot verschil is dat deze visualisatie nu gerenderd wordt door de NVIDIA GPU en niet de onboard Intel GPU.

__**STAP 7:** Installeer CUDA 5.5__


 * Download de laatste versie voor ubuntu 12.04.3 via @https://developer.nvidia.com/cuda-downloads
 * Ga naar je tty1 - via CTRL + ALT + F1
 * Login met gebruikersnaam en paswoord
 * Zet de ligthdm service uit via

//sudo service lightdm stop//


 * Ga naar je downloads folder, geef executable rechten aan de NVIDIA *.run file en voer uit

//cd ~// //cd Downloads/// //chmod +x NVIDIA.run// //sudo ./NVIDIA.run//


 * Ga met spatiebalk door de license agreement en accepteer
 * Bij de vraag of je de nvidia - driver wil installeren zeg je **NO**
 * Bij de vraag of je CUDA toolkit wil installeren kies je **YES** en gebruik je **default locatie** voor installatie
 * Bij de vraag of je de CUDA examples wil installeren kies je **YES** en gebruik je **default locatie** voor installatie
 * Als de installatie ten einde loopt dan ga je terug naar de grafische weergave via

//sudo service lightdm start//

__**STAP 8:** Test de CUDA installatie via de voorziene samples__


 * Er dienen nog enkele configuraties te gebeuren van de juiste source folders
 * Eerst configureren we de correcte PATH initializaties bij het opstarten van een terminal. Om dit niet elke keer te moeten doen, voegen we aan het opstartscript **~/.bashrc** enkele zaken toe.

//sudo apt-get install emacs// (gemakkelijke editor om files aan te passen - keuze is hier natuurlijk vrij) //cd ~// //sudo emacs .bashrc//


 * Voeg onderaan volgende lijnen toe aan de file

//# Extra path data for CUDA toolkit functionality// //export PATH=/usr/local/cuda-5.5/bin:$PATH// //export LD_LIBRARY_PATH=/usr/local/cuda-5.5/lib64:/usr/local/cuda-5.5/lib:$LD_LIBRARY_PATH//


 * Installeer nog snel enkele pakketten die nodig zijn voor een goede werking van alle CUDA samples (OpenGL en openMPI)

//sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev// //sudo apt-get install mpi-default-dev//


 * Ga naar samples folder via een terminal en build de examples

//cd ~// //cd NVIDIA-samples-folder/// //make//


 * Na de complete build zijn alle examples te vinden in de folder ~/NVIDIA-samples-folder/bin/x86_64/linux/release/
 * Start met het uitvoeren van de deviceQuery app zodanig dat je kan controleren of je CUDA kaart herkend wordt en er eventueel debug info komt rond problemen

sudo optirun ./deviceQuery


 * Het resultaat zou eruit moeten zien als volgt

//./deviceQuery Starting...//

//CUDA Device Query (Runtime API) version (CUDART static linking)//

//Detected 1 CUDA Capable device(s)//

//Device 0: "GeForce GT 540M"// //CUDA Driver Version / Runtime Version 5.5 / 5.5// //CUDA Capability Major/Minor version number: 2.1// //Total amount of global memory: 2048 MBytes (2147155968 bytes)// //( 2) Multiprocessors, ( 48) CUDA Cores/MP: 96 CUDA Cores// //GPU Clock rate: 1344 MHz (1.34 GHz)// //Memory Clock rate: 800 Mhz// //Memory Bus Width: 128-bit// //L2 Cache Size: 131072 bytes// //Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048)// //Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers// //Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers// //Total amount of constant memory: 65536 bytes// //Total amount of shared memory per block: 49152 bytes// //Total number of registers available per block: 32768// //Warp size: 32// //Maximum number of threads per multiprocessor: 1536// //Maximum number of threads per block: 1024// //Max dimension size of a thread block (x,y,z): (1024, 1024, 64)// //Max dimension size of a grid size (x,y,z): (65535, 65535, 65535)// //Maximum memory pitch: 2147483647 bytes// //Texture alignment: 512 bytes// //Concurrent copy and kernel execution: Yes with 1 copy engine(s)// //Run time limit on kernels: Yes// //Integrated GPU sharing Host Memory: No// //Support host page-locked memory mapping: Yes// //Alignment requirement for Surfaces: Yes// //Device has ECC support: Disabled// //Device supports Unified Addressing (UVA): Yes// //Device PCI Bus ID / PCI location ID: 1 / 0// //Compute Mode:// //< Default (multiple host threads can use ::cudaSetDevice with device simultaneously) >//

//deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 5.5, CUDA Runtime Version = 5.5, NumDevs = 1, Device0 = GeForce GT 540M// //Result = PASS//


 * Probeer nadien ook wat meer rekenintensieve modules zoals de volumeRender of boxFilter


 * Je systeem kan nu overweg met CUDA 5.5 en kan visualisaties tunnelen via de bumblebee interface!**