Differences

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

Link to this comparison view

asc:laboratoare:04 [2026/03/24 03:25]
tudor.calafeteanu [Exercitii]
asc:laboratoare:04 [2026/03/26 14:24] (current)
emil.slusanschi [Reference]
Line 104: Line 104:
 Pentru acest laborator se pot utiliza sistemele din cluster prin intermediul fep.grid.pub.ro:​ Pentru acest laborator se pot utiliza sistemele din cluster prin intermediul fep.grid.pub.ro:​
   - Vă conectați pe ''​fep'',​ conform [[https://​ocw.cs.pub.ro/​courses/​asc/​laboratoare/​01|Laboratorului 1]] (Vezi ''​Ce este FEP-ul?​)''​.   - Vă conectați pe ''​fep'',​ conform [[https://​ocw.cs.pub.ro/​courses/​asc/​laboratoare/​01|Laboratorului 1]] (Vezi ''​Ce este FEP-ul?​)''​.
-  - ''​wget https://​ocw.cs.pub.ro/​courses/​_media/​asc/​laboratoare/​lab4_skl.tar.gz -O lab4_skl.tar.gz'' ​- Downloadați arhiva laboratorului ​+  - Downloadați arhiva laboratorului: ​''​wget https://​ocw.cs.pub.ro/​courses/​_media/​asc/​laboratoare/​lab4_skl.tar.gz -O lab4_skl.tar.gz''​. 
-  - ''​tar -xzvf lab6_skl.tar.gz'' ​- Dezarhivați arhiva downloadată mai sus+  - Dezarhivați arhiva downloadată mai sus: ''​tar -xzvf lab4_skl.tar.gz''​. 
-  - ''​%%srun --pty bash%%'' ​- intrați în mod interactiv pe Haswell+  - Intrați în mod interactiv pe Haswell: ​''​%%srun --pty bash%%''​. 
-  - ''​%%apptainer run docker://​gitlab.cs.pub.ro:​5050/​asc/​asc-public/​c-labs:​1.3.1 /​bin/​bash%%'' ​- Accesați imaginea de docker în cadrul căreia avem permisiunile necesare realizării laboratorului.+  - Accesați imaginea de docker în cadrul căreia veți face laboratorul:​''​%%apptainer run docker://​gitlab.cs.pub.ro:​5050/​asc/​asc-public/​c-labs:​1.3.1 /​bin/​bash%%''​
  
 **Task 0**  - Folositi Callgrind pentru ''​task0.c'',​ urmărind TODO-urile din cod. **Task 0**  - Folositi Callgrind pentru ''​task0.c'',​ urmărind TODO-urile din cod.
-    * ''​make task0''​ pentru versiunea serială. 
-    * ''​make openmp_task0''​ pentru versiunea paralelizată. 
- 
 <code sh> <code sh>
 # Versiunea serială # Versiunea serială
Line 136: Line 133:
 Apptainer>​ ./task1.sh Apptainer>​ ./task1.sh
  
-# Versiunea serială ​(atenție: durează ~5-10 minute sub Valgrind)+# Versiunea serială
 Apptainer>​ valgrind --tool=callgrind --collect-jumps=yes --dump-instr=yes --collect-systime=yes -- ./​tachyon_find_hotspots dat/​balls.dat Apptainer>​ valgrind --tool=callgrind --collect-jumps=yes --dump-instr=yes --collect-systime=yes -- ./​tachyon_find_hotspots dat/​balls.dat
 Apptainer>​ callgrind_annotate callgrind.out.<​pid>​ Apptainer>​ callgrind_annotate callgrind.out.<​pid>​
  
-# Versiunea paralelizată ​(atenție: durează ~3-5 minute sub Valgrind)+# Versiunea paralelizată
 Apptainer>​ valgrind --tool=callgrind --collect-jumps=yes --dump-instr=yes --collect-systime=yes -- ./​tachyon_analyze_locks dat/​balls.dat Apptainer>​ valgrind --tool=callgrind --collect-jumps=yes --dump-instr=yes --collect-systime=yes -- ./​tachyon_analyze_locks dat/​balls.dat
 Apptainer>​ callgrind_annotate callgrind.out.<​pid>​ Apptainer>​ callgrind_annotate callgrind.out.<​pid>​
Line 149: Line 146:
 </​code>​ </​code>​
  
-**Task 2**  Folositi tool-ul cachegrind din valgrind pentru a analiza codul care realizeaza inmultirea ​de matrice ​folosind ​diferite ​reordonari ​ale buclelor.+Notați și explicați următoarele observații:​ 
 +  * Care sunt funcțiile cu cel mai mare număr de instrucțiuni în versiunea serială? 
 +  * Ce funcție consumă cel mai mult din versiunea serială și de ce? (hint: ''​initialize_2D_buffer''​) 
 +  * Cum diferă profiling-ul serial de cel paralel? Ce funcții noi apar? 
 +  * Unde este plasat mutex-ul în ''​analyze_locks''?​ Este necesar acolo? 
 + 
 +**Task 2** - Analizați înmulțirea ​de matrice ​cu diferite ​ordonări ​ale buclelor ​folosind Cachegrind.
     * Compilati si rulati ''​task2.c''​     * Compilati si rulati ''​task2.c''​
     * Notati observatiile voastre legate de numarul de I refs, D refs, D1 misses, branches si mispredicts.     * Notati observatiile voastre legate de numarul de I refs, D refs, D1 misses, branches si mispredicts.
-    * <code sh> + 
-[@fep ]$ srun --time 00:05:00 --x11 -p haswell --pty /bin/bash +<code sh>
-[@haswell-wn01 ~]$ apptainer run docker://​gitlab.cs.pub.ro:​5050/​asc/​asc-public/​c-labs:​1.3.1 /bin/bash+
 Apptainer>​ make task2 Apptainer>​ make task2
-Apptainer>​ valgrind --tool=cachegrind --branch-sim=yes ./task2 1 +Apptainer>​ valgrind --tool=cachegrind --cache-sim=yes ./task2 1 
-Apptainer>​ valgrind --tool=cachegrind --branch-sim=yes ./task2 2 +Apptainer>​ valgrind --tool=cachegrind --cache-sim=yes ./task2 2 
-Apptainer>​ valgrind --tool=cachegrind --branch-sim=yes ./task2 3+Apptainer>​ valgrind --tool=cachegrind --cache-sim=yes ./task2 3
 </​code>​ </​code>​
  
 +Completați tabelul cu rezultatele obținute:
  
-<note important>​ +^ Metric ​       ^ Mode 1 (ijk) ^ Mode 2 (ikj) ^ Mode 3 (jki) ^ 
-Recomandăm sa va delogati mereu de pe serverele din cluster dupa terminarea sesiunii, utilizand comanda ''​exit''​+| I refs        |              |              |              | 
 +| D refs        |              |              |              | 
 +| D1 miss rate  |              |              |              | 
 +| LLd miss rate |              |              |              |
  
-Alternativ, daca ati uitat sesiuni deschise, puteti verifica acest lucru de pe fep.grid.pub.ro,​ utilizand comanda ​''​squeue''​. In cazul in care identificati astfel de sesiuni "​agatate",​ le puteti sterge (si va rugam sa faceti asta), utilizand comanda ​''​scancel ​ ID'' ​unde ID-ul il identificati din comanda anterioara ​''​squeue''​. ​Puteți folosi mai precis ​''​squeue -u username'' ​(username de pe fep.grid.pub.ro) pentru a vedea doar sesiunile care vă interesează.+Notați și explicați următoarele observații:​ 
 +  * Comparați valorile ​''​I refs'' ​și ''​D refs'' ​între cele 3 ordonări. Ce observați?​ 
 +  * Comparați valorile ​''​D1 miss rate'' ​între cele 3 ordonăriCare mod este mai eficient din punct de vedere al cache-ului și de ce? 
 +  * Comparați valorile ​''​LLd miss rate'' ​între cele 3 ordonăriCe observați?​ 
 +  * Cum influențează ordinea buclelor accesul la memorie în C?
  
-Daca nu veti face aceasta delogare, veti putea ajunge in situatia in care sa nu va mai puteti loga pe nodurile din cluster. 
-</​note> ​ 
  
  
Line 181: Line 189:
   * http://​www.brendangregg.com/​perf.html ​   * http://​www.brendangregg.com/​perf.html ​
   * https://​www.oracle.com/​tools/​developerstudio/​downloads/​developer-studio-jsp.html   * https://​www.oracle.com/​tools/​developerstudio/​downloads/​developer-studio-jsp.html
 +  * https://​guides.upb.ro/​docs/​grid/​apptainer-usage
  
 ==== Resources ==== ==== Resources ====
asc/laboratoare/04.1774315523.txt.gz · Last modified: 2026/03/24 03:25 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