Titulo Estágio
Computação de Alto Desempenho para os Clusters do Futuro
Áreas de especialidade
Engenharia de Software
Local do Estágio
DEI
Enquadramento
O número de núcleos em clusters de alto desempenho continuará a crescer muito rapidamente nos próximos tempos. Isto vai exigir novos modelos de programação, porque a complexidade dos programas e das arquiteturas vai crescer muito e mais núcleos implicam mais falhas. No entanto, nem o Message Passing Interface pode ser dimensionado para as novas arquiteturas, nem qualquer solução atualmente existente tolera falhas de uma forma adequada.
Para lidarmos com arquiteturas desta dimensão, propomos um paradigma de programação para Computação de Alto Desempenho (CAD) com base em estruturas de dados distribuídas, como dicionários, árvores, skip-lists, etc. Estas estruturas de dados são tão importantes em programas sequenciais modernas, que a sua adoção se expandiu para sistemas multi-núcleos de pequena escala. Java e Python, por exemplo, incluem estruturas de dados simultaneamente eficientes e elegantes, como dicionários não bloqueantes ou listas e filas bloqueantes.
Objetivo
O objetivo deste Estágio é o de criar estruturas de dados distribuídas para Computação de Alto Desempenho. Estas estruturas deverão alcançar duas vantagens sobre a gestão manual da comunicação: 1) uma interface de programação (API) mais simples, elegante e independente da localização e 2) tolerância a falhas. Estas estruturas devem ser flexíveis, para permitirem ao programador configurar comportamentos como localização, consistência, ou o nível de replicação.
Além disso, estas estruturas poderão ser cuidadosamente otimizadas, de acordo com critérios como localização e replicação, para acessos rápidos e tolerantes a falhas. Na realidade, a tolerância a falhas é uma das características mais favoráveis das estruturas de dados distribuíds, como sabemos a partir de trabalhos anteriores em sistemas peer-to-peer, onde tabelas de dispersão (hash) distribuídas resistem a altos níveis de churn, causados por utilizadores que entram e saem da rede com muita frequência.
O desafio, neste trabalho, será conjugar esta capacidade com a complexidade e adaptabilidade da estrutura de dados. Será ainda necessário tomar particular atenção aos requisitos de desempenho, que são muito mais rigorosos, especialmente no que diz respeito à latência.
As estruturas de dados distribuídas podem também suportar facilmente muitos padrões de decomposição de aplicações, como task-farming, divide-and-conquer, computação síncrona entre outros, que o estagiário deverá desenvolver no âmbito do seu trabalho.
Plano de Trabalhos - Semestre 1
- Estudo do estado da arte
- Análise dos problemas que mais poderiam beneficiar de uma destas estruturas de dados (exemplos prováveis: multiplicação de matrizes e ordenação)
- Implementação de uma estrutura de dados piloto para um destes problemas
- Escrita do Relatório Intermédio com uma listagem das estruturas de dados a considerar
Plano de Trabalhos - Semestre 2
- Implementação das estruturas de dados consideradas no Relatório Intermédio
- Aplicação das estruturas aos problemas considerados no início do trabalho (multiplicação de matrizes, p.ex.) e utilização em novos problemas (p.ex., task-farming)
- Escrita de um artigo científico.
Condições
Estágio não remunerado.
Orientador
Filipe Araújo, Patrício Domingues (CISUC, IPLeiria)
filipius@uc.pt 📩