Crèdits
6
Tipus
Obligatòria
Requisits
Aquesta assignatura no té requisits
, però té capacitats prèvies
Departament
DAC;UAB
Entre altres objectius, aquesta assignatura pretén:
1. Introduir l'estudiant al món dels sistemes de computació d'alt rendiment, per tal d'entendre l'evolució de les arquitectures informàtiques modernes i el seu ús per resoldre problemes exigents.
2. Ajudar els estudiants a analitzar un problema donat per tal de determinar les possibilitats d'optimitzar el rendiment del codi mitjançant l'ús eficient de paradigmes de programació paral·lela adequats.
3. Ensenyar a l'estudiant a seleccionar algoritmes i maquinari per a la solució de projectes d'alt rendiment, i les habilitats necessàries per escriure, executar i avaluar el rendiment de programes paral·lels en diferents arquitectures de maquinari i entorns de programari.
Professorat
Responsable
- Josep Ramon Herrero Zaragoza ( josepr@ac.upc.edu )
Altres
- Christian Guzman Ruiz ( christian.guzman@uab.cat )
- Miquel Angel Senar Rosell ( miquelangel.senar@uab.cat )
- Sandra Adriana Mendez Valerio ( sandra.adriana.mendez@upc.edu )
Hores setmanals
Teoria
2
Problemes
2
Laboratori
0
Aprenentatge dirigit
0
Aprenentatge autònom
6
Competències
Coneixements
Habilitats
Competències
Objectius
-
Capacitat per formular models simples de rendiment atesa una estratègia de paral·lelització d'una aplicació, que permeti estimar la influència d'aspectes arquitectònics principals: el nombre d'elements de processament, el cost d'accés a dades i el cost d'interacció entre elements de processament, entre d'altres.
Competències relacionades: K3, S8, -
Capacitat per identificar els diferents tipus de paral·lelisme que es poden explotar en una arquitectura de computadors (ILP, TLP i DLP dins un processador, multiprocessador i multicomputador) i descriure'n els principis de funcionament.
Competències relacionades: K4, -
Capacitat per compilar i executar un programa paral·lel, utilitzant les eines essencials de línia d'ordres per mesurar el temps d'execució.
Competències relacionades: K4, -
Capacitat per triar l'estratègia de descomposició més adequada per expressar paral·lelisme en una aplicació (tasques, dades).
Competències relacionades: K4, S7, S8, -
Capacitat per aplicar les tècniques bàsiques per sincronitzar l'execució paral·lela, evitant condicions de carrera i bloquejos i possibilitant el solapament entre computació i interacció, entre d'altres.
Competències relacionades: K4, C6, -
Capacitat de programar amb MPI la versió paral·lela d'una aplicació seqüencial.
Competències relacionades: K4, S7, -
Capacitat de programar amb OpenMP la versió paral·lela d'una aplicació seqüencial.
Competències relacionades: K4, S7, -
Capacitat de programar amb OpenACC la versió paral·lela d'una aplicació seqüencial.
Competències relacionades: K4, S7, -
Capacitat per mesurar, mitjançant eines d'instrumentació, visualització i anàlisi, el rendiment aconseguit amb la implementació d'una aplicació paral·lela i detectar factors que limiten aquest rendiment: granularitat de tasques, càrrega equitativa i interacció entre tasques, entre d'altres.
Competències relacionades: K4, S7, S8, C6,
Continguts
-
Introducció a la computació d'alt rendiment i la computació paral·lela
Introducció a la computació d'alt rendiment, les arquitectures i la computació paral·lela -
Entenent el paral·lelisme
Conceptes teòrics. Mètriques de rendiment. -
Programació de memòria distribuïda amb MPI
Arquitectures de memòria distribuïda: programació amb Message Passing Interface (MPI) -
Modelat de rendiment
Capacitat per formular models simples de rendiment atesa una estratègia de paral·lelització d'una aplicació, que permeti estimar la influència d'aspectes arquitectònics principals: el nombre d'elements de processament, el cost d'accés a dades i el cost d'interacció entre elements de processament, entre d'altres. -
Programació de memòria compartida amb OpenMP
Arquitectures de memòria compartida: programació amb OpenMP -
Computació a un clúster i sistemes de cues per lots: SLURM
Computació a un clúster i sistemes de cues per lots -
Python per a computació d'alt rendiment
Python per a computació d'alt rendiment -
Computació amb targetes gràfiques (GPU) mitjançant OpenACC
Computació amb targetes gràfiques (GPU) mitjançant OpenACC
Activitats
Activitat Acte avaluatiu
Teoria
Assumir la responsabilitat del procés d'aprenentatge. Això implica assistir puntualment a classes, laboratoris i tutories, i participar activament a les discussions. Els estudiants són responsables d'administrar el temps eficaçment per completar totes les tasques, lectures i projectes requerits dins dels terminis establerts. També s'han d'adherir a les polítiques d'honestedat acadèmica de la universitat, sol·licitar aclariments quan el material no els quedi clar i respectar l'ambient d'aprenentatge interactuant amb els companys i el professor de manera professional.- Teoria: Classes de teoria i ressolució de problemes
- Aprenentatge autònom: Treball personal sobre la teoria i resolució de problemes
Continguts:
- 1 . Introducció a la computació d'alt rendiment i la computació paral·lela
- 2 . Entenent el paral·lelisme
- 3 . Programació de memòria distribuïda amb MPI
- 4 . Modelat de rendiment
- 5 . Programació de memòria compartida amb OpenMP
- 6 . Computació a un clúster i sistemes de cues per lots: SLURM
- 7 . Python per a computació d'alt rendiment
- 8 . Computació amb targetes gràfiques (GPU) mitjançant OpenACC
Teoria
27h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
45h
Sessions pràctiques
Tasques pràctiques de laboratori utilitzant un cluster paral·lel. L'estudiant ha de desenvolupar tasques pràctiques fent servir un clúster paral·lel. En aquest entorn, les seves responsabilitats inclouen l'execució activa, la resolució de problemes i la gestió de recursos. Ha de: - Preparar-se amb antelació revisant els conceptes teòrics i les lectures prèvies al laboratori o les instruccions de configuració inicial abans de la sessió de laboratori. - Executar les tasques de forma independent, documentant acuradament els procediments, les entrades i les sortides, incloent-hi qualsevol error trobat i la seva resolució. - Desenvolupar habilitats pràctiques de depuració i utilitzar els recursos tècnics disponibles (documentació, eines de programari específiques) per resoldre els desafiaments tècnics abans de cercar lajuda de lnstructor. - Presentar codi/informes funcionals i ben documentats que compleixin el format, el control de versions i les convencions de nomenclatura especificats.- Problemes: Sessions pràctiques
- Aprenentatge autònom: Completar les tasques de les pràctiques de laboratori i preparar-ne els lliurables.
Continguts:
Teoria
0h
Problemes
28h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
45h
Metodologia docent
Cada setmana l'estudiant tindrà dues hores de sessió teòrica i dues de sessió pràctica. Les classes teòriques introdueixen tots els coneixements, tècniques, conceptes necessaris per resoldre problemes i treballs de laboratori. Alguns problemes poden resoldre's durant les sessions teòriques. S'espera de l'estudiant la realització de treball personal addicional resolent la resta de problemes de la col·lecció de problemes. Addicionalment, dues hores de sessions laboratori són també realitzades setmanalment; es valorarà la participació activa i rendiment durant les sessions de laboratori (treballar durant la sessió, avançant el treball per assolir els objectius de la sessió).Els estudiants han de treballar autonòmament abans de les sessions per preparar-se per a les classes i treure'n partit. Després, han de treballar autònomament per practicar i consolidar els conceptes i habilitats desenvolupades al llarg del curs.
Per a les pràctiques i problemes d'aquest curs s'emprarà majoritàriament el llenguatge de programació C i els models de programació paral·lela MPI, OpenMP i OpenACC. Les sessions pràctiques de laboratori es realitzen en una màquina paral·lela de tipus clúster amb el sistema operatiu Linux. L'accés al clúster s'haurà de fer utilitzant l'ordinador portàtil de l'estudiant. Per tant, els estudiants han de garantir que poden connectar-se al clúster de Linux des del seu ordinador portàtil.
Mètode d'avaluació
La nota del curs es calcularà com la mitjana ponderada de 6 notes (3 notes per a cadascuna de les parts del curs):N = 0.05 * SL1 + 0.15 * EL1 + 0.3 * ET1 + 0.05 * SL2 + 0.15 * EL2 + 0.3 * ET2
On:
- SL_i està relacionat amb lliuraments de pràctiques de la part i-èssima
- EL_i examen de laboratori de la part i-èssima
- ET_i examen de teoria de la part i-èssima
IMPORTANT: La realització i presentació de tots els informes de seguiment del laboratori (SL_i ) és condició necessària per superar l'assignatura. Només es considera informe elaborat i presentat aquell informe amb un mínim de contingut. Informes buits o amb només les preguntes, per exemple, no es consideren realitzats ni presentats.
Els estudiants aprovaran el curs si han completat tots els exàmens i han obtingut una nota del curs (N) igual o superior a 5 sobre 10.
Els estudiants que suspenguin el curs amb una nota mitjana final superior a 3 sobre 10, podran fer un examen de recuperació de la part teòrica. L'examen de recuperació constarà de dues parts: hi haurà un examen de recuperació per a cadascuna de les 2 parts (ER1 i/o ER2) per als estudiants que hagin suspès aquesta part específica. A l'examen de reavaluació només es podrà recuperar la part teòrica del curs. La nota ER_i substituirà la nota obtinguda en el curs regular per a l'examen de teoria corresponent, ET_i.
Bibliografia
Bàsic
-
Introduction to parallel computing
- Grama, Ananth,
Pearson Addison Wesley,
2003.
ISBN: 9780201648652
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003524559706711&context=L&vid=34CSUC_UPC:VU1 -
Introduction to high performance computing for scientists and engineers
- Hager, Georg; Wellein, Gerhard,
CRC Press,
cop. 2011.
ISBN: 9781439811924
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005256675306711&context=L&vid=34CSUC_UPC:VU1 -
Using MPI : portable parallel programming with the Message-Passing-Interface
- Gropp, William; Lusk, Ewing; Skjellum, Anthony,
MIT Press,
[2014].
ISBN: 9780262326605
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005260863706711&context=L&vid=34CSUC_UPC:VU1 -
Using OpenMP : portable shared memory parallel programming
- Chapman, Barbara; Jost, Gabriele; Pas, Ruud van der,
MIT Press,
cop. 2008.
ISBN: 9780262533027
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003339779706711&context=L&vid=34CSUC_UPC:VU1
Complementari
-
Structured parallel programming : patterns for efficient computation
- McCool, Michael; Robison, Arch D; Reinders, James,
Elsevier/Morgan Kaufmann,
[2012].
ISBN: 9786613689603
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005250023506711&context=L&vid=34CSUC_UPC:VU1 -
Using MPI : portable parallel programming with the Message-Passing-Interface
- Gropp, William; Lusk, Ewing; Skjellum, Anthony,
MIT Press,
[2014].
ISBN: 9780262326605
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005260863706711&context=L&vid=34CSUC_UPC:VU1 -
The Science of Computing (formerly: Introduction to High-Performance Scientific Computing)
- Eijkhout, Victor ,
2022.
https://github.com/VictorEijkhout/TheArtofHPC_pdfs/blob/main/vol1/EijkhoutIntroToHPC.pdf -
Parallel Programming in MPI and OpenMP The Art of HPC, volume 2
- Eijkhout, Victor,
2022.
https://github.com/VictorEijkhout/TheArtofHPC_pdfs/blob/main/vol2/EijkhoutParallelProgramming.pdf
Web links
- Message Passing Interface (MPI): Tutorial https://computing.llnl.gov/tutorials/mpi/
- OpenMP Tutorial https://hpc-tutorials.llnl.gov/openmp/
- Introduction to Parallel Computing Tutorial https://hpc.llnl.gov/documentation/tutorials/introduction-parallel-computing-tutorial
- Slurm cluster management and job scheduling system for large and small Linux clusters https://slurm.schedmd.com/
- MPI Documents https://www.mpi-forum.org/docs/
- OpenACC high-level directives-based programming model for high performance computing for CPUs, GPUs and a variety of accelerators https://www.openacc.org/
- OpenMP API specification and Resources https://www.openmp.org/resources/