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
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ą
lspci | grep -i nvidia
lub za pomocą komendy
lspci | grep VGA
i czy jest ona na liście kompatybilnego sprzętu
https://developer.nvidia.com/cuda-gpus
Linia 23:
Sprawdzamy aktualną wersję i typ OS
uname -m && cat /etc/*release
otrzymujemy (
<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 (
==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 (
** 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
==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
*
./a.out
==Programowanie ==
===Pierwszy program===
<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
==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 = (
* 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
* nvcc - kompilator c firmy NVIDIA
* wątek = obliczenie wykonywane na pojedynczym procesorze GPU
|