Grundläggande idéer: hårdvaruarkitektur, minneshierarkier, kommunikation, strategier för parallellisering, mätande av effektivitet;
Enkla numeriska algoritmer, bl. a. matrisoperationer, Gausseliminering;
Algoritmer på grafer, exempelvis grafpartitioneringsproblem;
Parallell sortering;
Mer avancerade parallella problem, exempelvis n-kroppsproblemet;
Avancerade numeriska metoder, exempelvis multigrid och FFT-metoder;
Standardbibliotek.
Det övergripande målet med kursen består i att förmedla en grundläggande förståelse av hur man utvecklar numeriska algoritmer och hur man implementerar dessa på datorer med fördelat minne genom att använda "message-passing" metoder.
Efter genomförd kurs ska du ha lärt dig att:
- förklara strategier för parallellisering
- välja ut och/eller utveckla en algoritm för att lösa ett givet problem som är anpassad till parallelliseringen
- välja ut och/eller utveckla datatstrukturer för att implementera parallella algoritmer
- teoretiskt analysera en given parallell algoritm med hänsyn till effektiviteten
- implementera en given algoritm på en dator med fördelat minne genom att använda MPI-biblioteket
- förstå flödet av informationen och undvika oönskade lägen (t ex deadlock, synkroniseringsfördröjning)
- modifiera och anpassa grundläggande rutiner till speciella situationer
- experimentellt uppskatta prestandan av parallella program
- förklara skillnader mellan den teoretiskt förväntade prestandan och den praktiskt uppmätta prestandan.