Differences

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

Link to this comparison view

asc:laboratoare:04 [2026/03/24 02:21]
tudor.calafeteanu [Exercitii]
asc:laboratoare:04 [2026/03/26 14:24] (current)
emil.slusanschi [Reference]
Line 103: Line 103:
  
 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|Lab 1]]. +  - 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/​lab6/lab6_skl.tar.gz -O lab6_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ă
 Apptainer>​ make task0 Apptainer>​ make task0
 Apptainer>​ valgrind --tool=callgrind -v --dump-every-bb=10000000 ./task0 Apptainer>​ valgrind --tool=callgrind -v --dump-every-bb=10000000 ./task0
-Apptainer>​ callgrind_annotate callgrind.out.<​pid> ​| less+Apptainer>​ callgrind_annotate callgrind.out.<​pid>​
  
 # Versiunea paralelizată # Versiunea paralelizată
Line 123: Line 120:
 Apptainer>​ make openmp_task0 Apptainer>​ make openmp_task0
 Apptainer>​ valgrind --tool=callgrind -v --dump-every-bb=10000000 ./task0 Apptainer>​ valgrind --tool=callgrind -v --dump-every-bb=10000000 ./task0
-Apptainer>​ callgrind_annotate callgrind.out.<​pid> ​| less+Apptainer>​ callgrind_annotate callgrind.out.<​pid>​
 </​code>​ </​code>​
  
Line 131: Line 128:
   * De ce ordinea primelor 100 de prime diferă între versiunea serială și cea paralelă?   * De ce ordinea primelor 100 de prime diferă între versiunea serială și cea paralelă?
  
-**Task 1**  - Analizati aplicatia Tachyon. +**Task 1**  - Analizati aplicatia Tachyon ​(ray tracer)
-    * Rulati scriptul ''​task1.sh''​ pentru a descarca si compila Tachyon. Atentie, trebuie sa rulati pe fep scriptul task1.sh pentru ca doar aici aveti disponibil libX11.so de care aveti nevoie pentru compilare. Pe masinile proprii aveti de asemenea nevoie de libX11.so asa incat e bine sa il intalati inainte de rularea acestui task. + 
-    * Varianta seriala ''​tachyon_find_hotspots''​ +<code sh> 
-    * Varianta paralelizata ''​tachyon_analyze_locks''​ +Apptainer> ​./​task1.sh 
-    ​* ​<code sh> + 
-[@fep ~]$ ./task1.sh  +# Versiunea serială
-[@fep ]$ srun --time 00:05:00 --x11 -p haswell --pty /bin/bash +
-[@haswell-wn01 ~]$ apptainer run docker://​gitlab.cs.pub.ro:​5050/​asc/​asc-public/​c-labs:​1.3.1 /bin/bash +
-Apptainer>​ cd tachyon+
 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>​
 +
 +# 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>​
 +
 +# Perf (doar software counters în container)
 +Apptainer>​ perf stat ./​tachyon_find_hotspots dat/​balls.dat
 +Apptainer>​ perf stat ./​tachyon_analyze_locks dat/​balls.dat
 </​code>​ </​code>​
-    * Analizati cu perf 
  
 +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**  Folositi tool-ul cachegrind din valgrind pentru a analiza codul care realizeaza inmultirea ​de matrice ​folosind ​diferite ​reordonari ​ale buclelor.+**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 178: 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.1774311703.txt.gz · Last modified: 2026/03/24 02:21 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