Differences

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

Link to this comparison view

asc:laboratoare:04 [2026/03/24 02:02]
tudor.calafeteanu [Laboratorul 4 - Analiza Performantei Programelor]
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:​
-  - ''​ssh -Y username@fep.grid.pub.ro'' ​(natural puneti utilizatorul vostru in loc de username+  - 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'' ​- Downloadati 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'' ​- dezarhivati arhiva downloadata mai sus +  - Dezarhivați arhiva downloadată mai sus: ''​tar -xzvf lab4_skl.tar.gz''​. 
-  - ''​%%srun ​--time 00:05:00 --x11 -p haswell ​--pty /bin/bash%%'' ​- conectati-va pe coada Haswell cu 14 servere +  - 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%%'' ​- accesati imaginea de docker in 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**  - Folosit valgrind ​pentru ''​task0.c'' ​urmarind ​TODO-uri pentru teste+**Task 0**  - Folositi Callgrind ​pentru ''​task0.c''​, urmărind ​TODO-urile din cod
-    * ''​make task0''​ pentru versiunea seriala +<code sh> 
-    * ''​make openmp_task0''​ pentru versiunea paralelizata +# Versiunea serială
-    * <code sh> +
-[@fep ]$ srun --time 00:05:00 --x11 -p haswell --pty /bin/bash +
-[@haswell-wnxx ~]$ apptainer run docker://​gitlab.cs.pub.ro:​5050/​asc/​asc-public/​c-labs:​1.3.1 /bin/bash+
 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> ​kcachegrind ​+Apptainer> ​callgrind_annotate callgrind.out.<​pid>​ 
 + 
 +# Versiunea paralelizată
 Apptainer>​ make clean Apptainer>​ make clean
 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> ​kcachegrind ​+Apptainer> ​callgrind_annotate callgrind.out.<​pid>​
 </​code>​ </​code>​
  
-**Task 1**  - Analizati aplicatia Tachyon. +Notați și explicați următoarele observații:​ 
-    * 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. +  * Care este funcția cu cel mai mare număr de instrucțiuni (coloana ''​Ir''​)?​ 
-    * Varianta seriala ''​tachyon_find_hotspots''​ +  * Cum diferă profiling-ul serial de cel paralel? Ce funcții noi apar în versiunea paralelizată?​ 
-    * Varianta paralelizata ''​tachyon_analyze_locks''​ +  * De ce ordinea primelor 100 de prime diferă între versiunea serială și cea paralelă?​ 
-    * <code sh> + 
-[@fep ~]$ ./task1.sh  +**Task 1**  - Analizati aplicatia Tachyon ​(ray tracer)
-[@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 +<code sh> 
-Apptainer>​ cd tachyon+Apptainer> ​./​task1.sh 
 + 
 +# 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>​
 +
 +# 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 171: 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.1774310552.txt.gz · Last modified: 2026/03/24 02:02 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