This shows you the differences between two versions of the page.
|
asc:laboratoare:01 [2026/03/11 22:48] tudor.calafeteanu [Resurse utile] |
asc:laboratoare:01 [2026/03/26 14:25] (current) emil.slusanschi [Resurse utile] |
||
|---|---|---|---|
| Line 108: | Line 108: | ||
| ==== CPU ==== | ==== CPU ==== | ||
| - | ^ Partiție ^ CPU ^ Arhitectură ^ Topologie CPU¹ ^ NUMA nodes ^ Frecvență core (bază; boost) ^ | + | ^ Partiție ^ CPU ^ Arhitectură ^ Topologie CPU¹ ^ NUMA nodes ^ Frecvență core [[https://www.intel.com/content/www/us/en/gaming/resources/cpu-clock-speed.html | (bază; boost)]] ^ |
| | dgxh100 | Intel Xeon Platinum 8480C | Sapphire Rapids | 2 S/N x 56 C/S x 2 T/C = 224 T/N | 2 NUMA (1 per socket) | 2.0 GHz; 3.8 GHz | | | dgxh100 | Intel Xeon Platinum 8480C | Sapphire Rapids | 2 S/N x 56 C/S x 2 T/C = 224 T/N | 2 NUMA (1 per socket) | 2.0 GHz; 3.8 GHz | | ||
| - | | dgxa100 | AMD EPYC 7742 | Zen 2 (Rome) | 2 S/N x 64 C/S x 2 T/C = 256 T/N | 8 NUMA (4 per socket) | 2.25 GHz; 3.4 GHz | | + | | dgxa100 | AMD EPYC 7742 | Zen 2 (Rome) | 2 S/N x 64 C/S x 2 T/C = 256 T/N | 8 NUMA (4 per socket²) | 2.25 GHz; 3.4 GHz | |
| | ucsx | Intel Xeon Gold 6326 | Ice Lake | 2 S/N x 16 C/S x 2 T/C = 64 T/N | 2 NUMA (1 per socket) | 2.9 GHz; 3.5 GHz | | | ucsx | Intel Xeon Gold 6326 | Ice Lake | 2 S/N x 16 C/S x 2 T/C = 64 T/N | 2 NUMA (1 per socket) | 2.9 GHz; 3.5 GHz | | ||
| | xl | Intel Xeon E5-2680 v4 | Broadwell | 2 S/N x 14 C/S x 2 T/C = 56 T/N | 2 NUMA (1 per socket) | 2.4 GHz; 3.3 GHz | | | xl | Intel Xeon E5-2680 v4 | Broadwell | 2 S/N x 14 C/S x 2 T/C = 56 T/N | 2 NUMA (1 per socket) | 2.4 GHz; 3.3 GHz | | ||
| | haswell | Intel Xeon E5-2640 v3 | Haswell | 2 S/N x 8 C/S x 2 T/C = 32 T/N | 2 NUMA (1 per socket) | 2.6 GHz; 3.4 GHz | | | haswell | Intel Xeon E5-2640 v3 | Haswell | 2 S/N x 8 C/S x 2 T/C = 32 T/N | 2 NUMA (1 per socket) | 2.6 GHz; 3.4 GHz | | ||
| - | ¹ Sockets/Node x Cores/Socket x Threads/Core = Threads/Node | + | ¹ Sockets/Node x Cores/Socket x Threads/Core = Threads/Node \\ |
| + | ² Pe AMD EPYC, fiecare socket expune 4 NUMA nodes datorită arhitecturii chiplet (CCD/CCX). Fiecare NUMA node conține 16 core-uri și o porțiune de memorie locală. Pe Intel, de regulă 1 socket = 1 NUMA node. | ||
| - | ==== Ierarhie de memorie ==== | + | <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. | ||
| + | </note> | ||
| + | </spoiler> | ||
| + | \\ | ||
| + | ==== Ierarhia de memorie ==== | ||
| ^ 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 128: | 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> | ||
| + | Bandwidth-ul teoretic per socket se calculează astfel: \\ | ||
| + | ''lățime_bandă (GB/s) = nr._canale x rată_transfer (MT/s) x lățime_magistrală_date (B/T)'' \\ | ||
| + | De exemplu, pentru ''dgxh100'': 8 × 4800 MT/s × 8 B/T = ~307 GB/s. | ||
| + | </note> | ||
| + | </spoiler> | ||
| + | \\ | ||
| ==== GPU ==== | ==== GPU ==== | ||
| Line 139: | Line 154: | ||
| ² capacitate tip; bus; bandwidth teoretic | ² capacitate tip; bus; bandwidth teoretic | ||
| + | <spoiler Alte informații utile (click pentru detalii)> | ||
| + | <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. | ||
| + | </note> | ||
| + | |||
| + | <note tip> | ||
| + | Compute Capability (sm_XX) determină ce instrucțiuni și funcționalități hardware sunt disponibile. Este esențial la compilarea CUDA: ''nvcc -arch=sm_90'' pentru H100, ''sm_80'' pentru A100. Un binar compilat pentru un anumit compute capability nu rulează pe GPU-uri cu o versiune mai veche. | ||
| + | </note> | ||
| + | </spoiler> | ||
| + | \\ | ||
| ===== Ce este FEP-ul? ===== | ===== Ce este FEP-ul? ===== | ||
| FEP-ul reprezintă nodul de acces către clusterul HPC al universității. Pe scurt, este serverul prin intermediul căruia utilizatorii se conectează la infrastructură pentru a pregăti și lansa job-urile pe resursele de calcul ale clusterului. | FEP-ul reprezintă nodul de acces către clusterul HPC al universității. Pe scurt, este serverul prin intermediul căruia utilizatorii se conectează la infrastructură pentru a pregăti și lansa job-urile pe resursele de calcul ale clusterului. | ||
| Line 388: | 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 419: | 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 426: | 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 | ||