utförligt förklara uppbyggnad och funktion hos olika typer av multiprocessorer och parallella datorsystem
utförligt förklara olika typer av programmeringsmodeller för multiprocessorer och parallella datorsystem
utförligt förklara olika principer för att designa parallella program för att få hög prestanda samt den underliggande arkitekturens inverkan på prestandan
2. Färdighet och förmåga
tillämpa olika principer och tekniker för att utveckla och implementera parallella program
analysera dataflödet i problem för att kunna partitionera det i parallella delar
utföra enklare prestandamätningar och prestandaanalys av parallella program
utföra lämpliga optimeringar i parallella program, t ex genom att minska kommunikations- och synkroniseringsbehov, i syfte att uppnå hög prestanda
3. Värderingsförmåga och förhållningssätt
skriftligt och muntligt redogöra för och motivera sina lösningar
självständigt och kritiskt utvärdera och analysera sina lösningar
Kursinnehåll
Parallellism har under många år varit ett sätt att uppnå hög prestanda i datorsystem. Datorsystem består idag av parallellism på flera olika nivåer: regelbundna arrayer (matriser) av SIMD processorkärnor som i GPU:er, ett mindre antal generella processorkärnor som i multicore-processorer, eller sammankopplade noder som i ett distribuerat system. För att kunna utnyttja hårdvaran till fullo, behöver man skriva effektiva parallella program. Mao, parallella datorsystem och parallell programmering är fundamentala grundstenar för dagens och framtidens datorer. Denna kurs syftar till att studenterna ska lära sig att programmera datorsystem som innehåller många processorer eller processorkärnor så att man uppnår hög prestanda. Vi kommer att gå igenom programmering för delat minne, både MIMD och SIMD, samt programmering av distribuerade system. Fokus i kursen kommer att ligga på programmering av multiprocessorer med delat minne. Kursen omfattar följande moment: Introduktion till multiprocessorer och parallell programmering. Konstruktionsprinciper for parallella datorarkitekturer och datorsystem. Programmeringsmodeller och konstruktionsprinciper för parallella program för att uppnå hög prestanda, t ex uppdelning av arbetet för att passa underliggande arkitekturer, kommunikation och synkronisering. Bibliotek för parallell programmering, såsom t ex pthreads och CUDA. Exempelalgoritmer för ett antal intressanta applikationsområden. Praktisk övning i utveckling av parallella program.