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]] | ||