Programowanie w systemie UNIX/CUDA
Wstęp do CUDA [1]

InstalacjaEdytuj
sprzętEdytuj
Sprawdzamy jaką mamy kartę graficzną:[6]
lspci | grep -i nvidia
lub za pomocą komendy:
lspci | grep VGA
lub[7]
nvidia-smi
i czy jest ona na liście kompatybilnego sprzętu: [8]
https://developer.nvidia.com/cuda-gpus
OSEdytuj
Wybieramy taką wersję OS dla której jest dostępny CUDA Toolkit[9]
Sprawdzamy aktualną wersję i typ OS:
uname -m && cat /etc/*release
otrzymujemy (przykładowy wynik):
x86_64 DISTRIB_ID=Ubuntu DISTRIB_RELEASE=13.10 DISTRIB_CODENAME=saucy DISTRIB_DESCRIPTION="Ubuntu 13.10" NAME="Ubuntu" VERSION="13.10, Saucy Salamander" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 13.10" VERSION_ID="13.10" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
Informacje o instalacji dla wersji:
Sterownik karty graficznejEdytuj
Sterownik [15]
sudo software-properties-gtk
lub:
nvidia-settings
gccEdytuj
Czy mamy odpowiednią[16] wersję gcc ?
gcc --version
W przeciwnym razie pojawi się błąd w czasie instalacji :
Error: unsupported compiler: 5.4.1. Use --override to override this check.
Rozwiązanie[17] :
sudo sh cuda_8.0.44_linux.run --override
NVIDIA CUDA ToolkitEdytuj
Nvidia CUDA toolkit[18]
dpkg -l | grep cuda-toolkit
lub
nvcc --version
WynikEdytuj
Enter CUDA Samples Location [ default is /home/a ]: Installing the CUDA Toolkit in /usr/local/cuda-8.0 ... Missing recommended library: libXmu.so Installing the CUDA Samples in /home/a ... Copying samples to /home/a/NVIDIA_CUDA-8.0_Samples now... Finished copying samples. =========== = Summary = =========== Driver: Not Selected Toolkit: Installed in /usr/local/cuda-8.0 Samples: Installed in /home/a, but missing recommended libraries Please make sure that - PATH includes /usr/local/cuda-8.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA. ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file: sudo <CudaInstaller>.run -silent -driver Logfile is /tmp/cuda_install_7699.log
UsuwanieEdytuj
sudo ./uninstall_cuda_8.0.pl
GPUEdytuj
Procesor GPU składa się z:
- multiprocesorów
- pamięci głównej karty graficznej
Multiprocesor składa się z:
- 8 lub 16 procesorów
- pamięci multiprocesora (bardzo szybka, wspólna dla procesorów)
Typy liczbEdytuj
- zmiennoprzecinkowe[19]
- podwójnej precyzji są dostępne dla GPU o potencjale obliczeniowym 1.3 i większym (ang. 1.3-capable card)
- double-double [20]
Można wybrać potencjał obliczeniowy za pomocą opcji kompilatora:
nvcc --gpu-architecture sm_13
lub
-arch=sm_13
lub [21]
--gpu-name sm_13
Lista dostępnych funkcji podwójnej precyzji w bibliotece CUDA[22]
Struktura obliczeńEdytuj
Obliczenie K dzieli się na:
- gridy g składające się z bloków,
- bloki b, które dzielą się na wątki w.[23]
Struktura typowego programu CUDAEdytuj
- skopiować dane z pamięci komputera do pamięci karty graficznej
- skopiować dane do pamięci multiprocesora
- wykonać obliczenia na multiprocesorach
- skopiować częściowe wyniki z multiprocesorów do pamięci głównej karty graficznej
- skopiować końcowy wynik do pamięci komputera
Jak zacząćEdytuj
Co potrzebujemy wg Nvidia[24]
Plik :[25]
- zapisujemy z rozszerzeniem cu
e.cu
- kompilujemy kompilatorem firmy NVIDIA:
nvcc e.cu
- uruchamiamy:
./a.out
ProgramowanieEdytuj
Pierwszy programEdytuj
Przykładowy program pokazujący ilość dostępnych kart cuda[26]
#include <stdio.h>
#include <cuda.h>
int main(void)
{
int nDevices;
cudaGetDeviceCount(&nDevices);
printf("Number of CUDA devices = %d\n", nDevices);
return 0;
}
Kompilacja:
gcc c.c -Wall
daje efekt:
c.c:2:22: fatal error: cuda.h: Nie ma takiego pliku ani katalogu
Szukamy cuda.h:
udpatedb locate cuda.h
otrzymujemy:
/usr/include/linux/cuda.h /usr/src/linux-headers-3.11.0-12/include/linux/cuda.h /usr/src/linux-headers-3.11.0-12/include/uapi/linux/cuda.h /usr/src/linux-headers-3.11.0-12-generic/include/linux/cuda.h /usr/src/linux-headers-3.11.0-13/include/linux/cuda.h /usr/src/linux-headers-3.11.0-13/include/uapi/linux/cuda.h /usr/src/linux-headers-3.11.0-13-generic/include/linux/cuda.h /usr/src/linux-headers-3.11.0-14/include/linux/cuda.h /usr/src/linux-headers-3.11.0-14/include/uapi/linux/cuda.h /usr/src/linux-headers-3.11.0-14-generic/include/linux/cuda.h /usr/src/linux-headers-3.11.0-15/include/linux/cuda.h /usr/src/linux-headers-3.11.0-15/include/uapi/linux/cuda.h /usr/src/linux-headers-3.11.0-15-generic/include/linux/cuda.h
ale tu chodzi o katalog:
/usr/local/cuda/include/
który jest pusty ...
hello.cuEdytuj
LinkiEdytuj
- cudabrot
- Wykłady Wojciecha Kwedlo[27]
- wykłady wydziału ETI Politechniki Gdańskiej [28]
- zbiór Mandelbrota[29]
- wady obliczeń za pomocą GPU [30]
- metoda Newtona dla zmiennej zespolonej [31]
- Parallel Computing Using GPUs Haizhen Wu
- GPU precision
- http://kmdouglass.github.io/stories/notes/cuda.html
- http://www.davidespataro.it/cuda-julia-set-fractals/
bibliotekiEdytuj
- precyzja
- gpurec - Supporting High Precision on Graphics Processors
- GQD: double-double (31 decimal digits) i quad-double (62 decimal digits) precyzja na GPU[32]
- GARPREC: dowolna precyzja
- campary/ Campary
- liczby zespolone[33]
- #include <cuComplex.h> , zwykle jest w /usr/local/cuda/include
SłownikEdytuj
- API [34]
- blok = suma wątków wykonywanych przez pojedynczy multiprocesor
- device = (pl. urządzenie) = karta graficzna
- grid = Wszystkie bloki pracujące nad jednym kernelem nazywamy gridem. Gridów może być maksymalnie tyle co multiprocesorów
- host = CPU
- GPU = procesor karty graficznej
- CPU = procesor płyty głównej
- kernel =
- nvcc - kompilator c firmy NVIDIA
- wątek = obliczenie wykonywane na pojedynczym procesorze GPU
PomocEdytuj
OdnośnikiEdytuj
- ↑ Wstęp do CUDA cz. I autor: Szymon Zimnowoda
- ↑ instalacji : ask ubuntu
- ↑ | Instalacja CUDA Thomas Krenn Wiki
- ↑ Cuda HELP UBUNTU
- ↑ tutorials.ubuntu : gpu-data-processing-inside-lxd
- ↑ cuda-getting-started-guide-for-linux
- ↑ linuxconfig: how-to-check-cuda-version-on-ubuntu-20-04-focal-fossa-linux
- ↑ Lista GPU odpowiednich dla CUDA
- ↑ CUDA Toolkit
- ↑ askubuntu question: how-can-i-install-cuda-on-ubuntu-16-04
- ↑ devtalk.nvidia : cuda-8-0-toolkit-install-nvcc-not-found-ubuntu-16-04
- ↑ downloads
- ↑ Installing and testing CUDA in Ubuntu 14.04
- ↑ Yputube : Ubuntu 12.04 - Installing Nvidia CUDA Developer Driver [OUTDATED]
- ↑ Accelerated Linux Driver Set README and Installation Guide
- ↑ nvidia cuda-installation-guide-linux - table
- ↑ stackoverflow question : cuda-incompatible-with-my-gcc-version
- ↑ nvidia cuda-toolkit
- ↑ Increasing the float/double precision, how is this done?
- ↑ Double double precision arithmetic library for Cuda now available
- ↑ CUDA Support/Enabling double-precision from Computer Science Support Wiki
- ↑ Double Precision Mathematical Functions from NVIDIA CUDA Library Documentation 4.2
- ↑ W Śmietanka : Programowanie na platformie CUDA. Delta 448 (9/2011)
- ↑ NVIDIA GPU Computing Documentation
- ↑ [http://www.eti.pg.gda.pl/katedry/kask/dydaktyka/Przetwarzanie_Rownolegle_CUDA/CELL/01-cuda.pdf CUDA Programming Paweł Czarnul]
- ↑ na forum ubuntu - program użytkownika jablondyn
- ↑ Wykłady Wojciecha Kwedlo
- ↑ wykłady wydziału ETI Politechniki Gdańskiej
- ↑ Generowanie i wizualizacja zbioru Mandelbrota na CUDA - Paweł Nowak
- ↑ Why aren't we programming on the GPU?
- ↑ [Julia Set for the Complex Function f(z) = z^3 – 1, in C and CUDA by Stephen on March 4th, 2012]
- ↑ github gpuprec
- ↑ stackoverflow question : cuda-how-to-work-with-complex-numbers?
- ↑ Mirek SOcha : CUDA
- ↑ Programowanie na platformie CUDA - Wojciech Śmietanka. Delta 448 (9/2011)
- ↑ Wstęp do CUDA Cz. II autor: ZimnowodaSzymon