This shows you the differences between two versions of the page.
asc:laboratoare:04 [2024/03/28 14:19] matei.barbu1905 |
asc:laboratoare:04 [2025/03/26 11:44] (current) alexandru.bala [Aplicatie compute CUDA] |
||
---|---|---|---|
Line 7: | Line 7: | ||
Succesorul chipurilor de prelucrare grafică din jocurile aracade, procesoarul grafic, acronim **GPU** (**G**raphics **P**rocessing **U**nit), este un circuit electronic, specializat, în crearea și manipularea imaginilor trimise către un afișaj electronic (e.g. monitor). | Succesorul chipurilor de prelucrare grafică din jocurile aracade, procesoarul grafic, acronim **GPU** (**G**raphics **P**rocessing **U**nit), este un circuit electronic, specializat, în crearea și manipularea imaginilor trimise către un afișaj electronic (e.g. monitor). | ||
- | Utilitatea lui s-a extins ulterior către probleme "embarrassingly parallel", iar în astăzi sunt folosite la antrenarea antrenarea rețelelor neurale și minarea de criptomonede. Vorbim aici despre întrebuințarea unui **GPGPU** (**G**eneral **P**urpose GPU), un procesor grafic cu o flexibilitate ridicată de programare, capabil de a rezolva și probleme generale. | + | Utilitatea lui s-a extins ulterior către probleme "embarrassingly parallel", iar astăzi sunt folosite la antrenarea rețelelor neurale și minarea de criptomonede. Vorbim aici despre întrebuințarea unui **GPGPU** (**G**eneral **P**urpose GPU), un procesor grafic cu o flexibilitate ridicată de programare, capabil de a rezolva și probleme generale. |
==== Teorie ==== | ==== Teorie ==== | ||
Line 40: | Line 40: | ||
* Vivante http://en.wikipedia.org/wiki/Vivante_Corporation | * Vivante http://en.wikipedia.org/wiki/Vivante_Corporation | ||
- | Dacă un IP de GPU este integrat pe aceeași //pastilă de siliciu// a unui SoC (**S**ystem-**o**n-a-**C**hip), spunem că este un GPU integrat. Exemple de SoC-uri cu IP de GPU integrat includ procesoarele x86 Intel/AMD, cât și majoritatea SoC-urilor pentru dispozitive mobile bazate pe arhitectura ARM (ex. Qualcomm Snapdragon). Un GPU integrat împarte ierarhia de memorie cu alte IP-uri (exp. controllere PCIe/USB/SATA/ETH). | + | Dacă un IP de GPU este integrat pe aceeași //pastilă de siliciu// a unui SoC (**S**ystem-**o**n-a-**C**hip), spunem că este un GPU integrat. Exemple de SoC-uri cu IP de GPU integrat includ procesoarele x86 Intel/AMD, cât și majoritatea SoC-urilor pentru dispozitive mobile bazate pe arhitectura ARM (ex. Qualcomm Snapdragon). Un GPU integrat împarte ierarhia de memorie cu alte IP-uri (ex. controllere PCIe/USB/SATA/ETH). |
- | De altfel, un GPU dedicat (discrete GPU) presupune valorificarea unei unui spațiu de memorie, mapat peste **VRAM** (**V**ideo **R**andom-**A**ccess **M**emory), cât și o magistrală PCIe/AGP8x/USB pentru comunicare cu sistemul. Exemple de GPU-uri dedicate sunt seriile de plăci grafice Geforce (Nvidia) și Radeon (AMD). | + | De altfel, un GPU dedicat (discrete GPU) presupune valorificarea unei unui spațiu de memorie, mapat peste **VRAM** (**V**ideo **R**andom-**A**ccess **M**emory), cât și o magistrală PCIe/AGP8x/USB pentru comunicarea cu sistemul. Exemple de GPU-uri dedicate sunt seriile de plăci grafice Geforce (Nvidia) și Radeon (AMD). |
{{:asc:lab10:dgpu_igpu.png?direct&750|}} | {{:asc:lab10:dgpu_igpu.png?direct&750|}} | ||
Line 115: | Line 115: | ||
Știind versiunea majoră și cea minoră cunoaștem facilitățile hardware oferite de către arhitectură. | Știind versiunea majoră și cea minoră cunoaștem facilitățile hardware oferite de către arhitectură. | ||
- | O listă a GPU-urile NVIDIA și versiunile lor majore/minore se regăsește [[https://developer.nvidia.com/cuda-gpus|aici]]. | + | O listă a GPU-urilor NVIDIA și versiunile lor majore/minore se regăsește [[https://developer.nvidia.com/cuda-gpus|aici]]. |
===== Programarea in CUDA ===== | ===== Programarea in CUDA ===== | ||
Line 201: | Line 201: | ||
O aplicatie CUDA are ca scop executia de cod pe GPU-uri NVIDIA CUDA. | O aplicatie CUDA are ca scop executia de cod pe GPU-uri NVIDIA CUDA. | ||
In cadrul laboratoarelor partea de CPU (host) va fi folosita exclusiv pentru managementul executiei partii de GPU (device). | In cadrul laboratoarelor partea de CPU (host) va fi folosita exclusiv pentru managementul executiei partii de GPU (device). | ||
- | Aplicatiilor vor viza executia folosind un singur GPU NVIDIA CUDA. | + | Aplicatiile vor viza executia folosind un singur GPU NVIDIA CUDA. |
==== 0. Definire functie kernel ==== | ==== 0. Definire functie kernel ==== | ||
Line 345: | Line 345: | ||
{{:asc:lab7:cuda-nvcc.png?480|}} | {{:asc:lab7:cuda-nvcc.png?480|}} | ||
+ | |||
+ | <note important> | ||
+ | Pentru editarea fișierelor pe cluster, recomandam sa va montați sistemul de pe fep8 pe mașină locală. Pașii sunt detaliați mai jos - multumiri lui Radu Millo pentru redactare. | ||
+ | |||
+ | Tutorial chei ssh: https://www.ssh.com/academy/ssh/keygen | ||
+ | |||
+ | Pe fep8, din directorul vostru home (''%%~%%''), dați comanda: | ||
+ | <code sh> | ||
+ | mkdir asc | ||
+ | cd asc | ||
+ | pwd # acesta va returna <cale_absolută_director_asc_fep8> | ||
+ | </code> | ||
+ | |||
+ | Tutorial montare filesystem din fep pe local - comenzi date pe local: | ||
+ | <code sh> | ||
+ | mkdir asc # puteți da comanda din directorul vostru home | ||
+ | cd asc | ||
+ | pwd # acesta va returna <cale_absolută_director_asc_local> | ||
+ | sudo chown -R <user> asc # numele user-ului vostru de pe local | ||
+ | decomentăm linia 'user_allow_other' din /etc/fuse.conf | ||
+ | sshfs -o allow_other <user.moodle>@fep8.grid.pub.ro:<cale_absolută_director_asc_fep8> <cale_absolută_director_asc_local> | ||
+ | </code> | ||
+ | </note> | ||
Urmăriți instrucțiunile de pe GitLab [[https://gitlab.cs.pub.ro/asc/asc-public/-/tree/master/labs/cuda/intro|GitLab]]. | Urmăriți instrucțiunile de pe GitLab [[https://gitlab.cs.pub.ro/asc/asc-public/-/tree/master/labs/cuda/intro|GitLab]]. | ||
Line 370: | Line 393: | ||
* Advanced CUDA | * Advanced CUDA | ||
* [[https://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf|CUDA Streams]] | * [[https://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf|CUDA Streams]] | ||
- | |||
- | * Extra | ||
* [[http://www-personal.umich.edu/~smeyer/cuda/grid.pdf | CUDA Thread Basics]] | * [[http://www-personal.umich.edu/~smeyer/cuda/grid.pdf | CUDA Thread Basics]] | ||
* [[https://devblogs.nvidia.com/even-easier-introduction-cuda/ | An Even Easier Introduction to CUDA]] | * [[https://devblogs.nvidia.com/even-easier-introduction-cuda/ | An Even Easier Introduction to CUDA]] | ||