Computação Paralela

Ano
1
Ano lectivo
2025-2026
Código
02003476
Área Científica
Física
Língua de Ensino
Português
Modo de Ensino
Presencial
Duração
Semestral
Créditos ECTS
6.0
Tipo
Opcional
Nível
2º Ciclo - Mestrado

Conhecimentos de Base Recomendados

Experiência em programação numa linguagem de alto nível (Python ou C ou Fortran).

Métodos de Ensino

Ensino eminentemente prático, com recurso extensivo a apresentações de slides com matéria teórica e prática, acesso à internet.

Faz-se uso de um terminal de linha de comando usando a linguagem Python e o módulo mpi4py (Windows/Linux/MacOS) para os exercícios práticos, que consistem em elaboração de programas paralelos. Disponibiliza-se a um computador indiviual  na sala de aula, mas o trabalho também pode ser feito no laptop pessoal do aluno.

Resultados de Aprendizagem

Objetivos:

Conhecer a arquitetura de máquinas paralelas; saber distribuir, em problemas selecionados, uma tarefa computacional por um conjunto de processos independentes; saber utilizar os paradigmas da programação paralela.

Competências:

Competência em análise e síntese;

Competência em resolução de problemas;

Uso da internet como meio de comunicação e fonte de informação;

Capacidade de decisão;

Competência em raciocínio crítico;

Competência em aprendizagem autónoma;

Adaptabilidade a novas situações.

Competência em investigar.

Estágio(s)

Não

Programa

Noções Básicas: Computação paralela e sua importância. Principais domínios de aplicação. Paradigmas de computação paralela: memória distribuída e partilhada. Algumas noções de supercomputador, principais arquiteturas e middleware associado. Tendências da sua evolução em hardware  e software.

Paralelismo ao nível de software: OpenMP, MPI. A medição da eficiência de um algoritmo paralelo: speedup e eficiência de paralelização (Lei de Amdhal).

Programação em OpenMP. Modelo "fork and join". Loops paralelos, operações coletivas e barreiras. Variáveis privadas e partilhadas. Problemas de competição por dados partilhados ("data race").

MPI. Técnicas de Paralelização de Algoritmos: decomposição de dados e decomposição de domínio. Modelo master-slave para distribuição de dados. Tipos de comunicações em MPI. Operações coletivas - dados e cálculo. Comunicadores e topologias de comunicação. Definição de novas estruturas de dados.

Aplicações a álgebra linear e resolução da equação de Poisson.

Docente(s) responsável(eis)

Helmut Wolters

Métodos de Avaliação

Avaliação
Resolução de problemas: 100.0%

Bibliografia

  Documenta¸ c˜ao online do Python: http://www.python.org

Python 3 Tutorial: https://docs.python.org/3/tutorial/index.html

Anaconda: https://www.anaconda.com/download

Microsoft Windows 10/11 Subsystem for Linux: https://learn.microsoft.com/en-us/windows/wsl/install A Whirlwind Tour of Python Jake VanderPlas, O’Reilly, August 2016. https://www.oreilly.com/library/view/a-whirlwind-tour/9781492037859

Learning Scientific Programming with Python Christian Hill, Cambridge University Press (2016) https://doi.org/10.1017/CBO9781139871754

Stackoverflow: https://stackoverflow.com/questions/tagged/python.