Differences

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

Link to this comparison view

asc:laboratoare:01 [2026/03/11 22:32]
tudor.calafeteanu [Arhitectura nodurilor de calcul (cluster UPB) — CPU și memorie]
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
  
-===== Arhitectura nodurilor de calcul ​(cluster UPB— GPU ===== +<spoiler Alte informații utile (click pentru detalii)
-^ Partiție ^ GPU ^ Arhitectură ^ GPUs/nod ^ Topologie GPU¹ ^ Compute Capability ^ Memorie GPU² ^ +<note tip> 
-| dgxh100 | NVIDIA H100 80GB HBM3 | Hopper | 8 | 132 SM 128 CUDA cores/SM = 16896 CUDA cores; 528 Tensor Cores (Gen 4| sm_90 | 80 GB HBM3; 5120-bit bus; ~3350 GB/s +Bandwidth-ul teoretic per socket se calculează astfel: \\ 
-| dgxa100 | NVIDIA A100-SXM4-80GB | Ampere | | 108 SM x 64 CUDA cores/SM 6912 CUDA cores; 432 Tensor Cores (Gen 3) | sm_80 | 80 GB HBM2e; 5120-bit bus; ~2039 GB/s | +''​lățime_bandă (GB/s) = nr._canale ​rată_transfer (MT/s) x lățime_magistrală_date ​(B/T)''​ \\ 
-| ucsx | NVIDIA A100-PCIE-40GB | Ampere | 3 | 108 SM x 64 CUDA cores/SM = 6912 CUDA cores; 432 Tensor Cores (Gen 3) | sm_80 | 40 GB HBM2; 5120-bit bus; ~1555 GB/s | +De exemplu, pentru ''​dgxh100'':​ 8 × 4800 MT/s × B/= ~307 GB/s. 
-| xl | Tesla P100-PCIE-16GB | Pascal | 2 | 56 SM x 64 CUDA cores/​SM ​3584 CUDA cores; fără Tensor Cores | sm_60 | 16 GB HBM2; 4096-bit bus; ~732 GB/s |+</note> 
 +</spoiler> 
 +\\ 
 +==== GPU ====
  
-¹ Streaming Multiprocessors ​(SMs) x CUDA cores/SM = Total CUDA coresTensor Cores \\ +^ Partiție ^ GPU ^ Arhitectură ^ GPUs/nod ^ Topologie GPU¹ ^ Tensor Cores ^ Compute Capability ^ Memorie GPU² ^ 
-² capacitatetip; bus; bandwidth teoretic+| dgxh100 | NVIDIA H100 80GB HBM3 | Hopper | 8 | 132 SM/GPU x 128 C/SM = 16896 C/GPU | 528 (Gen 4| sm_90 | 80 GB HBM3; 5120-bit bus; ~3350 GB/s | 
 +| dgxa100 | NVIDIA A100-SXM4-80GB | Ampere | 8 | 108 SM/​GPU ​64 C/SM = 6912 C/GPU | 432 (Gen 3) | sm_80 | 80 GB HBM2e5120-bit bus; ~2039 GB/s | 
 +| ucsx | NVIDIA A100-PCIE-40GB | Ampere | 3 | 108 SM/GPU x 64 C/SM = 6912 C/GPU | 432 (Gen 3) | sm_80 | 40 GB HBM25120-bit bus; ~1555 GB/s | 
 +| xl | Tesla P100-PCIE-16GB | Pascal | 2 | 56 SM/GPU x 64 C/SM = 3584 C/GPU | 0 | sm_60 | 16 GB HBM24096-bit ​bus; ~732 GB/s |
  
 +¹ Streaming Multiprocessors (SMs)/GPU x CUDA cores/SM = CUDA cores/GPU \\
 +² 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 387: 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 418: 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.
 ===== Resurse utile ===== ===== Resurse utile =====
 +  * Responsabilul acestui laborator: [[tudor.calafeteanu@upb.ro | Tudor-Alexandru CALAFETEANU]]
   * [[https://​slurm.schedmd.com/​pdfs/​summary.pdf | SLURM Cheat sheet (2 pages)]]   * [[https://​slurm.schedmd.com/​pdfs/​summary.pdf | SLURM Cheat sheet (2 pages)]]
   * [[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.1773261162.txt.gz · Last modified: 2026/03/11 22:32 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