Differences

This shows you the differences between two versions of the page.

Link to this comparison view

asc:laboratoare:07 [2024/02/29 13:08]
giorgiana.vlasceanu created
asc:laboratoare:07 [2024/04/15 00:13] (current)
mihnea.mitroi
Line 1: Line 1:
-Laboratorul 07 - CUDA+====== ​Laboratorul 07 - CUDA ====== 
 + 
 +===== Teorie ===== 
 + 
 +Scopul acestui laborator este aprofundarea și îmbinarea noțiunilor pe care le-ați învățat deja la APD și în laburile trecute (poate și la IA). 
 + 
 +Vă încurajăm să profitați de acest laborator ca să vă clarificați posibile nelămuriri din laburile trecute. Sau, de ce nu, să vă șlefuiți abilitatea de a optimiza programe CUDA dacă terminați mai devreme. :P 
 + 
 +==== Odd-Even Transposition Sort ==== 
 + 
 +Bubble Sort este un algoritm secvențial în care se parcurge șirul de sortat element cu element, comparând elementul curent cu vecinul din dreapta. Dacă numărul din dreapta este mai mic, se realizează o interschimbare între elementul curent și cel din dreapta sa. 
 + 
 +Operațiile pe elemente adiacente nu se pot realiza simultan, pentru că se poate ajunge la un race condition. Din acest motiv, un mod de a paraleliza Bubble Sort este Odd-Even Transposition Sort, un algoritm in 2 două faze. În faza pară, elementele de pe poziții pare din șirul de sortat sunt comparate (și eventual interschimbate) cu vecinii din dreapta. După ce se termină faza pară (adică după ce toate elementele pare au fost procesate), urmează faza impară, în care elementele impare sunt analizate și comparate cu vecinii din dreapta. 
 + 
 +{{:​asc:​lab7:​oets.png?​200 | OETS}} 
 + 
 +==== Merge Sort ==== 
 + 
 +Merge sort (sau sortarea prin interclasare) este un algoritm de sortare de tip divide et impera care presupune următorii pași generali: 
 +  * se împarte șirul de N elemente de sortat în N șiruri de lungime 1 
 +  * se aplica operația de interclasare ("​merge"​) între câte două astfel de șiruri de lungime 1, rezultând N/2 șiruri sortate de lungime 2 
 +  * se repetă pașii de mai sus realizând interclasări între șiruri din ce în ce mai mari, până se ajunge la un șir sortat de N elemente. 
 + 
 +Pentru a paraleliza acest algoritm, putem observa că operațiile de interclasare de la fiecare pas se pot realiza în paralel. Totuși, operațiile de "​merge"​ de la fiecare pas trebuie terminate în totalitate înainte de a trece la următorul pas, deci avem nevoie de o barieră (sau un mecanism similar) după fiecare pas de interclasare. Se poate observa că gradul de paralelism de la un pas de interclasări este din ce în ce mai mic pe măsură ce avansăm în algoritm, pentru că numărul de operații de "​merge"​ de la fiecare pas scade. 
 + 
 +{{:​asc:​lab7:​mergesort.png?​300 | Mergesort}} 
 + 
 +==== Gaussian Blur ==== 
 + 
 +În prelucrarea imaginilor, blurarea gaussiană este rezultatul estomparii unei imagini printr-o funcție gaussiană. 
 + 
 +Este un efect larg utilizat în software-ul grafic, în mod tipic pentru a reduce zgomotul imaginii și pentru a reduce detaliile. Efectul vizual al acestei tehnici de estompare este un blur neted care seamănă cu cel obținut privind imaginea printr-un ecran translucid. Estomparea gaussiană este de asemenea folosită ca o etapă de prelucrare în algoritmi de viziune artificială pentru a îmbunătăți structurile imaginii la diferite scări. 
 + 
 +Aplicarea unei estompări gaussiene asupra unei imagini este echivalentă cu convoluția imaginii cu o funcție gaussiană. Transformarea (funcția) de aplicat fiecărui pixel din imagine este urmatoarea:​ 
 +\[ G(x) = \frac{1}{\sqrt{2\pi \sigma^2}} e^{-\frac{x^2}{2\sigma^2}} \] 
 + 
 +{{:​asc:​lab7:​gaussian-blur.png?​400 | Gaussian Blur}} 
 + 
 +===== Exercitii ===== 
 + 
 +Urmăriți instrucțiunile de pe [[https://​gitlab.cs.pub.ro/​asc/​asc-public/​-/​tree/​master/​labs/​cuda/​practice|GitLab]]. 
 + 
 +<note important>​ 
 +Puteți găsi materiale ajutătoare în cadrul [[https://​mobylab.docs.crescdi.pub.ro/​docs/​parallelAndDistributed/​laboratory3|laboratorului 3 de la APD]] și în videoclipul [[https://​www.youtube.com/​watch?​v=KuXjwB4LzSA&​t=512s|Gaussian Blur]]. 
 +</​note>​ 
 + 
 +<note important>​ 
 +Recomandăm sa va delogati mereu de pe serverele din cluster dupa terminarea sesiunii, utilizand comanda ''​exit''​ 
 + 
 +Alternativ, daca ati uitat sesiuni deschise, puteti verifica acest lucru de pe fep8.grid.pub.ro,​ utilizand comanda ''​squeue''​. In cazul in care identificati astfel de sesiuni "​agatate",​ le puteti sterge (si va rugam sa faceti asta), utilizand comanda ''​scancel ​ ID''​ unde ID-ul il identificati din comanda anterioara ''​squeue''​. Puteți folosi mai precis ''​squeue -u username''​ (username de pe fep8.grid.pub.ro) pentru a vedea doar sesiunile care vă interesează. (Sau ''​squeue --me''​). 
 + 
 +Daca nu veti face aceasta delogare, veti putea ajunge in situatia in care sa nu va mai puteti loga pe nodurile din cluster. 
 +</​note>​ 
 + 
 +* Responsabili laborator: Matei Barbu, Mihnea Mitroi 
 + 
 +==== Referinte ==== 
 +  * Bibliografie 
 +    * [[https://​booksite.elsevier.com/​9780124077263/​downloads/​advance_contents_and_appendices/​appendix_C.pdf|Graphics and Computing GPUs]] 
 +  * Documentatie CUDA: 
 +    * [[https://​docs.nvidia.com/​cuda/​cuda-c-programming-guide/​index.html|CUDA C Programming]] 
 +    * [[https://​docs.nvidia.com/​cuda/​pdf/​CUDA_Compiler_Driver_NVCC.pdf| CUDA NVCC compiler]] 
 +    * [[https://​docs.nvidia.com/​cuda/​profiler-users-guide/​index.html| CUDA Visual Profiler]] 
 +    * [[https://​docs.nvidia.com/​cuda/​cuda-toolkit-release-notes/​index.html|CUDA Dev Toolkit]] 
 +    * [[https://​developer.nvidia.com/​cuda-gpus|CUDA GPUs]] 
 +  * Acceleratoare xl (NVidia P100) 
 +    * [[https://​www.nvidia.com/​en-us/​data-center/​tesla-p100/​|NVIDIA Pascal P100]] 
 +  * Advanced CUDA 
 +    * [[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://​developer.download.nvidia.com/​CUDA/​training/​StreamsAndConcurrencyWebinar.pdf|CUDA Streams 1]] 
 +    * [[https://​devblogs.nvidia.com/​gpu-pro-tip-cuda-7-streams-simplify-concurrency/​|CUDA Streams 2]] 
 +    * [[https://​devblogs.nvidia.com/​introduction-cuda-dynamic-parallelism/​|CUDA Dynamic Parallelism]] 
 +    * [[https://​developer.nvidia.com/​blog/​how-overlap-data-transfers-cuda-cc/​|How to Overlap Data Transfers in CUDA C/C++]]
asc/laboratoare/07.1709204917.txt.gz · Last modified: 2024/02/29 13:08 by giorgiana.vlasceanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0