Advanced
Computer
Architecture
Practicum
this
is old stuff - will be updated soon
Documentatie
- PAPI:
- homepage (download
is
onder Software sectie)
- Documentatie
- User guide
- Op ons linux systeem:
- PAPI is momenteel geinstalleerd op:
- parallel1
(AMD Athlon XP, 1.8GHz
biprocessor,
L1 I cache 64K, L1 D cache 64K, L2 cache 256k
(64bytes/line), 515M RAM,
1460 M Swap Memory)
- parallel7
(AMD Athlon XP, 1664.179MHz,
L1 I cache 64K, L1 D cache 64K, L2 cache 256k
(64bytes/line), 515M RAM,
988 M Swap Memory)
- parallel5
(Intel Pentium II,
233.303MHz, L1
I cache 16K, L1 D cache 16K, L2 cache 512k (32bytes/line), 191M RAM, 385M Swap Memory )
- node2, node3, node4, node5, node7, node8,
node9 (Intel Pentium II, 348.016MHz,
L1 I cache
16K, L1 D cache 16K, L2 cache 512k, 256M RAM)
- Note: the
nodes
are only accessible via parallel1
(so first ssh
to parallel1
and then to nodex)
- de header files & libraries staan lokaal onder /usr/local/papi
- zet PAPIDIR
variabele goed in je .cshrc
file (van je home directory) die in je project file
gebruikt wordt
- voorbeeld gebruik PAPI
- Opgelet: zet geen papi code in een
directory met spaties, dit geeft glibc errors...
- Om nog onbekende
redenen
wordt bovenstaande file geconverteerd als je ze downloadt,
copieer
daarom de file als je ingelogd bent op ons systeem:
cp
/home/jan/parcode/examples/papi/papiExample.tgz .
(vergeet
het laatste puntje niet, zorgt ervoor dat de file in de
current directory gecopieerd wordt)
Opgelet: zet geen papi code in een
directory met spaties, dit geeft glibc errors...
Om
nog onbekende redenen wordt bovenstaande file geconverteerd als
je ze
downloadt, copieer daarom de file als je ingelogd bent op ons
systeem:
cp
/home/jan/parcode/parlib/examples/PAPIProfiler/papiprofExample.tgz
.
(vergeet het laatste puntje niet, zorgt ervoor dat de file in de
current directory gecopieerd wordt)
- dit
voorbeeldje laat ook zien hoe je je datatypes 'template'
- je
kan multiplexing opzetten (voor het simultaan meten
van alle papi counters )
- gebruik het scriptje multipleExperimentcs.csh
om een serie experimenten uit te voeren met een
parameter-'sweep'.
Opdracht
Kies een algoritme dat je gaat onderzoekend door alle mogelijke
parameters van het algoritme en het systeem (software &
hardware)
te varieren. Gebruik EPDA voor het registreren van de gegevens en
het
analyseren van de data.
Beantwoord volgende
vragen:
Wat zijn de factoren die de
performantie van een algoritme beinvloeden? Wat is die invloed?
Quantificatie en wat wordt er beinvloed (=begrijpen)? Bepaal de
invloed
experimenteel, maar tracht deze ook te voorspellen door een model
op te
stellen. In hoeverre is die invloed te voorspellen, bvb voor een
ander
algoritme?
Factoren (onvolledig!!):
- Operating system
- Klokfrekwentie CPU, processor type
- Memory hierarchy (RAM, cache, cache line,...)
- Compilatie optimalisatie levels (-g -O -O2 -O3)
- compiler (gnu's gcc, intels icc)
- datastructuur: arrays, vectoren, objecten, orde van data, ...
- datatype: maak je programma parametriseerbaar op het datatype
(te gebruiken: integer, float, short, double, long long, long
double en
evt. char): gebruik hier
voor templates
- dit is verplicht voor
iedereen
- C of C++
- functies, inline functies, klasses (methods)
Tracht te doorgronden hoe deze factoren de performantie beinvloeden,
via de bewerkingssnelheid van de processor, de geheugen toegangs
delays, enzovoorts...
Indien je op andere computers dan onze linuxen wilt experimenteren
is
dit mogelijk, maar dan moeten we de experiment recorder installeren
(en
eventueel porten naar windows).
EPDA is wel enkel toegankelijk van op ons systeem. Maar je kan vanop
de
PC-lokalen van het 3e inloggen op ons systeem.
Belangrijk:
- belangrijkste PAPI counters: aantal instructies, aantal
cycles, ,
cache
misses (L1 & L2)
- bereken # basis operaties die je doet => alle andere
waarden
per
operatie bekijken
- de cache misses analyseren is veel interessanter als je ze
bekijkt per basisberekening, om te zien of ze afwijkt van
lineair
gedrag bvb
- welke factoren karakteriseren het gedrag van een algoritme?
- hints: #cycles/instructie, #cache accesses/instructie,
#instructies/basisoperatie
- de rekentijd (processor cycles) kan worden onderverdeeld in de
tijd
voor het uitvoeren van de instructies en de cycles die men
verliest
voor geheugen toegang (cache misses => penalties),
probeer uit te vissen hoeveel % aan het ene wordt besteed en
hoeveel %
aan het andere. Dit kan echter niet rechtsstreeks gemeten
worden, je
moet dus een methode bedenken.
Bespreek je plan van aanpak met je
assistent!
Topics: Algoritmes
- Een eigen voorstel, wel is het de bedoeling het algoritme
nadien
te parallelliseren
- Matrix Multiplicatie
- Sorteren (Radix Sort, Merge sort, ...)
- Gauss eliminatie
- LU factorization algorithm (cf SPLASH-2 benchmark)
- Graph algoritmes, zoals Dijkstra (daar heb ik software over
liggen): om invloed van ondermeer de graph datastructuur te
onderzoeken
- DFT
Eindresultaat
- Je code, in electronische vorm, als ze op ons systeem staat
geef
je het pad naar je laatste
versie
- Verslag:
- bondige uitleg van het algoritme
- parameters
- meetresultaten
- vermeld duidelijk de waarden van alle parameters, zodat we
de
experimenten kunnen herhalen
- conclusies ivm de invloed van de parameters op de
performantie
- Mondelinge verdediging
- Back to
the top
-