Programowanie w systemie UNIX/CUDA: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m →‎OS: 14.10
Interpunkcja, literówki, poprawa wyświetlania podpisów ilustracji
Linia 1:
[[File:Cuda1.png|right|Porównanie wydajności CPU i GPU|ramka]]
Wstęp do CUDA cz. I autor: Szymon Zimnowoda<ref>[http://www.knsi.pwr.wroc.pl/cuda/?p=125 Wstęp do CUDA cz. I autor: Szymon Zimnowoda]</ref>
==Instalacja==
Linia 6:
<ref>[http://help.ubuntu.com/community/Cuda Cuda HELP UBUNTU]</ref>
===sprzęt===
Sprawdzamy jaką mamy kartę graficzną :<ref>[http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/ cuda-getting-started-guide-for-linux]</ref>
 
lspci | grep -i nvidia
 
lub za pomocą komendy :
 
lspci | grep VGA
 
 
i czy jest ona na liście kompatybilnego sprzętu : <ref>[https://developer.nvidia.com/cuda-gpus Lista GPU odpowiednich dla CUDA]</ref>
 
https://developer.nvidia.com/cuda-gpus
Linia 23:
 
 
Sprawdzamy aktualną wersję i typ OS :
 
uname -m && cat /etc/*release
 
otrzymujemy ( przykładowy wynik ) :
 
<pre>
Linia 47:
 
 
Informacje o instalacji dla wersji :
* Ubuntu 14.10<ref>[https://developer.nvidia.com/cuda-downloads|CUDA downloads]</ref>
* Ubuntu 14.04 <ref>[http://askubuntu.com/questions/451672/installing-and-testing-cuda-in-ubuntu-14-04 Installing and testing CUDA in Ubuntu 14.04]</ref>
Linia 58:
sudo software-properties-gtk
 
lub :
 
nvidia-settings
Linia 64:
===gcc===
 
Czy mamy gcc ?
 
gcc --version
Linia 72:
==GPU==
 
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 liczb ==
 
* zmiennoprzecinkowe<ref>[http://forums.create.msdn.com/forums/p/43601/259010.aspx Increasing the float/double precision, how is this done? ]</ref>
** podwójnej precyzji są dostępne dla GPU o potencjale obliczeniowym 1.3 i większym ( ang. 1.3-capable card )
** double-double <ref>[http://forums.nvidia.com/index.php?showtopic=218452 Double double precision arithmetic library for Cuda now available]</ref>
 
Można wybrać potencjał obliczeniowy za pomocą opcji kompilatora :
 
nvcc --gpu-architecture sm_13
Linia 101:
 
==Struktura obliczeń==
Obliczenie K dzieli się na :
* gridy g składające się z bloków,
* bloki b, które dzielą się na wątki w.<ref>W Śmietanka : Programowanie na platformie CUDA. Delta 448 (9/2011)</ref>
Linia 118:
* skopiować końcowy wynik do pamięci komputera
 
[[File:CUDA processing flow (En).PNG|right|width600|Struktura programu CUDA|ramka]]
 
==Jak zacząć==
Linia 127:
Plik :<ref>[http://www.eti.pg.gda.pl/katedry/kask/dydaktyka/Przetwarzanie_Rownolegle_CUDA/CELL/01-cuda.pdf CUDA Programming
Paweł Czarnul]</ref>
* zapisujemy z rozszerzeniem ''cu''
e.cu
* kompilujemy kompilatorem firmy NVIDIA:
nvcc e.cu
* uruchomiamy uruchamiamy:
./a.out
 
==Programowanie ==
===Pierwszy program===
PrzykladowyPrzykładowy program pokazujacypokazujący iloscilość dostepnychdostępnych kart cuda<ref>[http://ubuntu.pl/forum/viewtopic.php?f=170&t=171080|Dyskusja na forum ubuntu - program użytkownika jablondyn]</ref>
<source lang=c>
#include <stdio.h>
Linia 154:
</source>
 
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 :
<pre>
 
 
/usr/include/linux/cuda.h
/usr/src/linux-headers-3.11.0-12/include/linux/cuda.h
Linia 187 ⟶ 185:
</pre>
 
ale tu chodzi o katalog :
 
/usr/local/cuda/include/
Linia 211 ⟶ 209:
* [http://code.google.com/p/gpuprec/ gpurec - Supporting High Precision on Graphics Processors]
** GQD: double-double (31 decimal digits) i quad-double (62 decimal digits) precyzja na GPU
** GARPREC : dowolna precyzja
 
==Słownik==
Linia 217 ⟶ 215:
* API <ref>[http://home.agh.edu.pl/~socha/pmwiki/pmwiki.php/CUDA/CUDA Mirek SOcha : CUDA]</ref>
* 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
Linia 225 ⟶ 223:
** jądro kodu obliczeniowego
** kod pojedynczego wątku CUDA<ref>Programowanie na platformie CUDA - Wojciech Śmietanka. Delta 448 (9/2011)</ref>
** "funkcja wykonywana na karcie graficznej równolegle przez CUDA-wątki " <ref>[http://www.knsi.pwr.wroc.pl/cuda/?p=163 Wstęp do CUDA Cz. II autor: ZimnowodaSzymon]</ref>
* nvcc - kompilator c firmy NVIDIA
* wątek = obliczenie wykonywane na pojedynczym procesorze GPU