Aftales med underviser, Aftales med underviser,
Eksamen afholdes i 2 ugers perioden,
Evalueringsform:
Bedømmelsesform:
Anbefalede forudsætninger:
Overordnede kursusmål:
Alle moderne computer-systemer er i større eller mindre grad
parallelle systemer. For det første har de fleste computere to
eller flere kerner (CPU'er) som gør det muligt at afvikle flere
tråde samtidigt, og det forventes at computere i de nærmeste år vil
få væsentligt flere kerner.
For det andet er alle computere forbundet til netværk med deraf
følgende muligheder for samarbejde, som det f.eks. kendes fra
client-server systemer eller fra cluster-systemer, hvor flere
computere samarbejder om at løse opgaver, som kræver stor
regnekraft eller håndtering af store datamængder.
For at udnytte sådanne parallelle systemarkitekturer skal
programkoden kunne skaleres enten som tråde fordelt på flere
processorer med fælles lager eller som et eller flere programmer
fordelt på flere netværksopkoblede computere.
Formålet med dette kursus at give begrebsmæssig og praktisk
forståelse af parallelle systemer og de problemstillinger, som er
forbundet med udvikling af programmer til sådanne systemer; så som
at identificere parallelliseringsmuligheder i software-designet,
opdeling i parallelle aktiviteter og parallelle aktiviteters deling
af data.
Læringsmål:
En studerende, der fuldt ud har opfyldt kursets mål, vil kunne:
redegøre for forskellige systemarkitekturer og dertil
relaterede programmeringsmodeller som de defineres i Flynns
taksonomi.
redegøre for Amdahls og Gustafsons love for opnåelig gevinst
('speed-up') ved parallellisering.
identificere og forklare væsentlige 'concurrency
problems' i parallelle programmer og redegøre for klassiske
synkroniserings- og kommunikationsmekanismer
kende principper for design og realisering af programmer til
SIMD og MIMD arkitekturer.
redegøre for begreberne 'fine grain', 'medium
grain' og 'coarse grain' parallellitet og relatere dem
til programmeringsmodellerne og programudformning.
analysere programmeringsopgaver med henblik på parallellisering
ved 'functional decomposition' eller 'data
decomposition'.
redegøre for kendte parallelle algoritmeskabeloner
('algorithm patterns').
realisere parallelle aktiviteter ved brug af tråde og
processer.
redegøre for formelle metoder til verifikation af parallel
programmer.
anvende formelle metoder til verifikation af parallelle
programmer
Kursusindhold:
Parallelle arkitekturer - Flynns taksonomi.
Parallelprogrammering: procesmodel, synkronisering, gensidig
udelukkelse, kommunikation
Parallelle programmeringsmodeller (fælles lager, tråde, message
passing, SPMD, MPMD).
Design af parallelle algoritmer.
Partitionering og dekomposition.
Parallelle algoritmeskabeloner.
Design og implementering af parallelle algoritmer til SIMD
computere.
MIMD Programmering - UMA modellen
MIMD programmering - NUMA modellen: message passing, asynkron og
synkron kommunikation
Verifikation af parallelle programmer.
Litteraturhenvisninger:
Diverse noter om parallelprogrammering, Pthreads, OpenMP og
OpenMPI.
Multithreaded Programming Guide, Sun Microsystems. (pdf document)
Lærebog: Meddeles ved kursusstart.
Bemærkninger:
Den studerende skal i løbet af kurset løse et antal obligatoriske
opgaver. Til hver opgave skal udarbejdes en øvelsesrapport som
opsummerer teorien og beskriver den udarbejdede løsning og
eventuelle måleresultater.