Differences

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

Link to this comparison view

asc:laboratoare:01 [2026/03/12 02:00]
tudor.calafeteanu [CPU]
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 165: Line 163:
 </​note>​ </​note>​
 </​spoiler>​ </​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 414: 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 445: 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 452: 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
asc/laboratoare/01.1773273632.txt.gz · Last modified: 2026/03/12 02:00 by tudor.calafeteanu
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