This shows you the differences between two versions of the page.
|
asc:laboratoare:04 [2026/03/24 03:38] 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 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 | ||
| - | Apptainer> valgrind --tool=cachegrind --branch-sim=yes --cache-sim=yes ./task2 1 | + | Apptainer> valgrind --tool=cachegrind --cache-sim=yes ./task2 1 |
| - | Apptainer> valgrind --tool=cachegrind --branch-sim=yes --cache-sim=yes ./task2 2 | + | Apptainer> valgrind --tool=cachegrind --cache-sim=yes ./task2 2 |
| - | Apptainer> valgrind --tool=cachegrind --branch-sim=yes --cache-sim=yes ./task2 3 | + | Apptainer> valgrind --tool=cachegrind --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 189: | 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 ==== | ||