This shows you the differences between two versions of the page.
|
asc:laboratoare:01 [2026/03/12 02:00] tudor.calafeteanu [GPU] |
asc:laboratoare:01 [2026/03/26 14:25] (current) emil.slusanschi [Resurse utile] |
||
|---|---|---|---|
| Line 119: | Line 119: | ||
| <spoiler Alte informații utile (click pentru detalii)> | <spoiler Alte informații utile (click pentru detalii)> | ||
| + | <note tip> | ||
| Toate partițiile folosesc arhitectura x86_64 cu 16 registre generale de 64 biți (RAX, RBX, ..., R8–R15). Partițiile mai noi (Sapphire Rapids, Ice Lake) dispun și de 32 registre AVX-512 de 512 biți, iar Sapphire Rapids adaugă registre AMX (tile registers) pentru operații matriceale. | Toate partițiile folosesc arhitectura x86_64 cu 16 registre generale de 64 biți (RAX, RBX, ..., R8–R15). Partițiile mai noi (Sapphire Rapids, Ice Lake) dispun și de 32 registre AVX-512 de 512 biți, iar Sapphire Rapids adaugă registre AMX (tile registers) pentru operații matriceale. | ||
| + | </note> | ||
| </spoiler> | </spoiler> | ||
| \\ | \\ | ||
| Line 125: | Line 127: | ||
| ^ Partiție ^ Linie cache ^ L1d SRAM/core ^ L1i SRAM/core ^ L2 SRAM/core ^ L3 SRAM/socket ^ DRAM/nod¹ ^ | ^ Partiție ^ Linie cache ^ L1d SRAM/core ^ L1i SRAM/core ^ L2 SRAM/core ^ L3 SRAM/socket ^ DRAM/nod¹ ^ | ||
| - | | dgxh100 | 64B | 32 KB | 48 KB | 2 MB | 105 MB | ~2 TB DDR5-4800; 8 canale; ~307 GB/s | | + | | dgxh100 | 64B | 48 KB | 32 KB | 2 MB | 105 MB | ~2 TB DDR5-4800; 8 canale; ~307 GB/s | |
| | dgxa100 | 64B | 32 KB | 32 KB | 512 KB | 256 MB | ~2 TB DDR4-3200; 8 canale; ~204 GB/s | | | dgxa100 | 64B | 32 KB | 32 KB | 512 KB | 256 MB | ~2 TB DDR4-3200; 8 canale; ~204 GB/s | | ||
| | ucsx | 64B | 48 KB | 32 KB | 1.25 MB | 24 MB | ~512 GB DDR4-3200; 4 canale; ~102 GB/s | | | ucsx | 64B | 48 KB | 32 KB | 1.25 MB | 24 MB | ~512 GB DDR4-3200; 4 canale; ~102 GB/s | | ||
| Line 133: | Line 135: | ||
| ¹ capacitate tip; canale per socket; bandwidth teoretic per socket | ¹ capacitate tip; canale per socket; bandwidth teoretic per socket | ||
| + | <spoiler Alte informații utile (click pentru detalii)> | ||
| <note tip> | <note tip> | ||
| Bandwidth-ul teoretic per socket se calculează astfel: \\ | Bandwidth-ul teoretic per socket se calculează astfel: \\ | ||
| Line 138: | Line 141: | ||
| De exemplu, pentru ''dgxh100'': 8 × 4800 MT/s × 8 B/T = ~307 GB/s. | De exemplu, pentru ''dgxh100'': 8 × 4800 MT/s × 8 B/T = ~307 GB/s. | ||
| </note> | </note> | ||
| + | </spoiler> | ||
| + | \\ | ||
| ==== GPU ==== | ==== GPU ==== | ||
| Line 148: | Line 153: | ||
| ¹ Streaming Multiprocessors (SMs)/GPU x CUDA cores/SM = CUDA cores/GPU \\ | ¹ Streaming Multiprocessors (SMs)/GPU x CUDA cores/SM = CUDA cores/GPU \\ | ||
| ² capacitate tip; bus; bandwidth teoretic | ² capacitate tip; bus; bandwidth teoretic | ||
| - | |||
| - | <note tip> | ||
| - | Bandwidth-ul teoretic al GPU-ului se calculează astfel: \\ | ||
| - | ''lățime_bandă (GB/s) = rată_transfer (Gbps) x lățime_totală magistrală (biți) / 8 (transformare biți în bytes)'' \\ | ||
| - | De exemplu, pentru ''dgxh100'': 5.2 Gbps × 5120 biți / 8 = ~3350 GB/s. | ||
| - | </note> | ||
| <spoiler Alte informații utile (click pentru detalii)> | <spoiler Alte informații utile (click pentru detalii)> | ||
| - | |||
| <note tip> | <note tip> | ||
| Un Streaming Multiprocessor (SM) este unitatea fundamentală de execuție pe GPU, echivalentul unui core pe CPU. Fiecare SM conține multiple CUDA cores (pentru operații generale FP32/INT32) și Tensor Cores (pentru operații matriceale accelerate, folosite în deep learning). Toate CUDA cores dintr-un SM partajează aceleași resurse: registre, shared memory și cache L1. | Un Streaming Multiprocessor (SM) este unitatea fundamentală de execuție pe GPU, echivalentul unui core pe CPU. Fiecare SM conține multiple CUDA cores (pentru operații generale FP32/INT32) și Tensor Cores (pentru operații matriceale accelerate, folosite în deep learning). Toate CUDA cores dintr-un SM partajează aceleași resurse: registre, shared memory și cache L1. | ||
| Line 415: | Line 413: | ||
| srun --partition=ucsx --gres=gpu:1 ./hello_cuda # rulare interactivă simplă | srun --partition=ucsx --gres=gpu:1 ./hello_cuda # rulare interactivă simplă | ||
| srun --partition=ucsx --gres=gpu:1 --pty bash # sesiune interactivă pe nodul de calcul | srun --partition=ucsx --gres=gpu:1 --pty bash # sesiune interactivă pe nodul de calcul | ||
| + | srun --partition=haswell -w haswell-wnxx --pty bash # rulare interactivă simplă pe un anumit nod (xx se inlocuieste cu un numar anume de sistem) de pe partitia haswell | ||
| + | |||
| # === Informații despre cluster === | # === Informații despre cluster === | ||
| Line 446: | Line 446: | ||
| * Cât RAM e disponibil per nod vs. maximul permis per job? (hint: ''scontrol show partition <nume>'') | * Cât RAM e disponibil per nod vs. maximul permis per job? (hint: ''scontrol show partition <nume>'') | ||
| * Cum vedeți joburile care se execută în prezent pe cluster? Cum opriți un job specific? | * Cum vedeți joburile care se execută în prezent pe cluster? Cum opriți un job specific? | ||
| + | * Cum puteti rula un job (interactiv sau nu) pe un anumit nod din cluster (Hint, explorati optiunea -w de la srun) | ||
| * Rulați cel puțin un program C multi-threaded și un program CUDA, atât cu ''sbatch'', cât și cu ''srun''. Verificați rezultatele. Care este diferența dintre cele două comenzi? | * Rulați cel puțin un program C multi-threaded și un program CUDA, atât cu ''sbatch'', cât și cu ''srun''. Verificați rezultatele. Care este diferența dintre cele două comenzi? | ||
| * Scrieți un program C multi-threaded care face calcule intensive (de exemplu suma unei serii pe fiecare thread). Rulați-l o dată cu ''%%--cpus-per-task=N%%'' și o dată fără ''%%--cpus-per-task=N%%'', unde N este numărul de thread-uri din program. Comparați timpii de execuție (hint: ''time ./program'') și explicați diferența. | * Scrieți un program C multi-threaded care face calcule intensive (de exemplu suma unei serii pe fiecare thread). Rulați-l o dată cu ''%%--cpus-per-task=N%%'' și o dată fără ''%%--cpus-per-task=N%%'', unde N este numărul de thread-uri din program. Comparați timpii de execuție (hint: ''time ./program'') și explicați diferența. | ||
| Line 453: | Line 454: | ||
| * [[https://slurm.schedmd.com/mc_support.html | SLURM Support for Multi-core/Multi-thread Architectures]] | * [[https://slurm.schedmd.com/mc_support.html | SLURM Support for Multi-core/Multi-thread Architectures]] | ||
| * https://infrastructure.pages.upb.ro/wiki/docs/grid/ | * https://infrastructure.pages.upb.ro/wiki/docs/grid/ | ||
| + | * https://guides.upb.ro/docs/grid/apptainer-usage | ||