This shows you the differences between two versions of the page.
|
asc:laboratoare:05 [2026/04/01 03:44] alexandru.bala [De ce CUDA?] |
asc:laboratoare:05 [2026/04/01 04:23] (current) alexandru.bala [Warp-uri și modelul SIMT] |
||
|---|---|---|---|
| Line 99: | Line 99: | ||
| Un standard alternativ la CUDA este **OpenCL**, suportat de Khronos și implementat de majoritatea producătorilor de GPU (inclusiv Nvidia ca o extensie la CUDA). OpenCL suferă de următoarele lipsuri: | Un standard alternativ la CUDA este **OpenCL**, suportat de Khronos și implementat de majoritatea producătorilor de GPU (inclusiv Nvidia ca o extensie la CUDA). OpenCL suferă de următoarele lipsuri: | ||
| - | - suportul este fragmentat | + | * suportul este fragmentat |
| - | - standardul este mult mai restrictiv (decât CUDA) | + | * standardul este mult mai restrictiv (decât CUDA) |
| - | - mai complicat de scris programe (decât CUDA) | + | * mai complicat de scris programe (decât CUDA) |
| ===== Arhitectura Nvidia CUDA ===== | ===== Arhitectura Nvidia CUDA ===== | ||
| - | CUDA (**C**ompute **U**nified **D**evice **A**rchitecture) permite utilizarea limbajului C pentru programarea pe GPU-urile Nvidia cât și extensii pentru alte limbaje (exp. Python). Deoarece una din zonele țintă pentru CUDA este HPC (**H**igh **P**erformance **C**omputing), în care limbajul Fortran este foarte popular, PGI ofera un compilator de Fortran ce permite generarea de cod și pentru GPU-urile Nvidia. Există binding-uri pentru Java (jCuda), Python (PyCUDA) și .NET (CUDA.NET). | + | CUDA (**C**ompute **U**nified **D**evice **A**rchitecture) permite utilizarea limbajului C pentru programarea pe GPU-urile Nvidia cât și extensii pentru alte limbaje (ex. Python). Deoarece una din zonele țintă pentru CUDA este HPC (**H**igh **P**erformance **C**omputing), în care limbajul Fortran este foarte popular, PGI ofera un compilator de Fortran ce permite generarea de cod și pentru GPU-urile Nvidia. Există binding-uri pentru Java (jCuda), Python (PyCUDA) și .NET (CUDA.NET). |
| {{:asc:lab7:cuda-software.png?800|}} | {{:asc:lab7:cuda-software.png?800|}} | ||
| Line 358: | Line 358: | ||
| }} | }} | ||
| - | Deși SIMT este adesea comparat cu SIMD (Single Instruction Multiple Data), există o diferență esențială: în SIMD există un singur control flow path, pe când în SIMT fiecare fir poate urma propriul control flow path. Tocmai de asta SIMT nu are un data-width fix, precum la SIMD. Este esential să ținem cont de warp-uri atunci când scriem cod CUDA, deoarece înțelegerea acestui model ajută la optimizarea accesului la memoria globală, partajată și a altor tehnici avansate. De asemenea, programele care încalcă modelul de programare SIMT pot genera comportament nedefinit, care poate varia în funcție de hardware-ul GPU utilizat. | + | Deși SIMT este adesea comparat cu SIMD (Single Instruction Multiple Data), există o diferență esențială: în SIMD există un singur control flow path, pe când în SIMT fiecare fir poate urma propriul control flow path. Tocmai de asta SIMT nu are un data-width fix, precum la SIMD. Este esențial să ținem cont de warp-uri atunci când scriem cod CUDA, deoarece înțelegerea acestui model ajută la optimizarea accesului la memoria globală, partajată și a altor tehnici avansate. De asemenea, programele care încalcă modelul de programare SIMT pot genera comportament nedefinit, care poate varia în funcție de hardware-ul GPU utilizat. |
| ===== Aplicații ===== | ===== Aplicații ===== | ||