Differences

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

Link to this comparison view

asc:laboratoare:04 [2026/03/24 03:31]
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 148: Line 145:
 Apptainer>​ perf stat ./​tachyon_analyze_locks dat/​balls.dat Apptainer>​ perf stat ./​tachyon_analyze_locks dat/​balls.dat
 </​code>​ </​code>​
 +
 +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. **Task 2** - Analizați înmulțirea de matrice cu diferite ordonări ale buclelor folosind Cachegrind.
Line 155: Line 158:
 <code sh> <code sh>
 Apptainer>​ make task2 Apptainer>​ make task2
-# Fiecare comandă durează ~2-3 minute +Apptainer>​ valgrind --tool=cachegrind --cache-sim=yes ./task2 1 
-Apptainer>​ valgrind --tool=cachegrind ​--branch-sim=yes ​--cache-sim=yes ./task2 1 +Apptainer>​ valgrind --tool=cachegrind --cache-sim=yes ./task2 2 
-Apptainer>​ valgrind --tool=cachegrind ​--branch-sim=yes ​--cache-sim=yes ./task2 2 +Apptainer>​ valgrind --tool=cachegrind --cache-sim=yes ./task2 3
-Apptainer>​ valgrind --tool=cachegrind ​--branch-sim=yes ​--cache-sim=yes ./task2 3+
 </​code>​ </​code>​
  
 Completați tabelul cu rezultatele obținute: Completați tabelul cu rezultatele obținute:
  
-^ Metric ​      ​^ Mode 1 (ijk) ^ Mode 2 (ikj) ^ Mode 3 (jki) ^ +^ Metric ​       ^ Mode 1 (ijk) ^ Mode 2 (ikj) ^ Mode 3 (jki) ^ 
-| I refs       ​|              |              |              | +| I refs        |              |              |              | 
-| D refs       ​|              |              |              | +| D refs        |              |              |              | 
-| D1 misses ​   ​|              |              |              | +| D1 miss rate  ​|              |              |              | 
-| LLd misses ​  ​| ​             |              |              | +| LLd miss rate |              |              |              |
-| D1 miss rate |              |              |              | +
-| Branches ​    ​| ​             |              |              | +
-| Mispredicts  ​|              |              |              |+
  
 Notați și explicați următoarele observații:​ 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 ''​I refs''​ și ''​D refs''​ între cele 3 ordonări. Ce observați?
-  * Comparați valorile ''​D1 ​misses''​ între cele 3 ordonări. Care mod este mai eficient din punct de vedere al cache-ului și de ce? +  * Comparați valorile ''​D1 ​miss rate''​ între cele 3 ordonări. Care mod este mai eficient din punct de vedere al cache-ului și de ce? 
-  * Comparați valorile ''​LLd ​misses''​ între cele 3 ordonări. Ce observați?+  * Comparați valorile ''​LLd ​miss rate''​ între cele 3 ordonări. Ce observați?
   * Cum influențează ordinea buclelor accesul la memorie în C?   * Cum influențează ordinea buclelor accesul la memorie în C?
-  * Ce concluzie generală trageți despre performanța înmulțirii de matrice?+
  
  
Line 190: 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.1774315896.txt.gz · Last modified: 2026/03/24 03:31 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