Dissertação para obtenção do Grau de Mestre em
Engenharia InformáticaA boa relação custo/performance dos aglomerados (clusters) de processadores multicore popularizou este tipo de plataforma no âmbito da High Performance Computing (HPC)- Computação de Alta Performance.
No entanto, a programação de clusters é complexa, requerendo a consciência da sua
arquitetura, o que prejudica o desenvolvimento, portabilidade e manutenção das aplicações.
No caso particular dos clusters de multi-cores, esta complexidade aumenta quando
os nós que compõem o cluster não são uniformes, quer no número de cores, quer na hierarquia de memórias cache. Este tipo de arquitetura já foi apelidada de Non-Uniform
Cluster Computing (NUCC) [CGS+05], pois conjuga os conceitos de clustering e acesso
não uniforme à memória.
Neste contexto, é essencial o desenvolvimento de ferramentas que proporcionem níveis de abstração mais elevados, escondendo os detalhes subjacentes à arquitetura e às tecnologias necessárias à comunicação, escalonamento de tarefas, consistência de memória,entre outros. O trabalho desenvolvido pretende contribuir para o avanço do estado da arte nessa área. Propõe-se um middleware para programação paralela especialmente vocacionado para clusters de multi-cores, cujo desenho é inspirado no de Sistemas de Operação,
no sentido de que, além de definir uma interface para as aplicações, define outra
para o desenvolvimento de novos módulos (drivers) que permitem a especialização das
suas funcionalidades para uma dada arquitetura alvo. O trabalho partiu de uma base já existente para memória partilhada, tendo sido estendido para arquiteturas de memória distribuída. Para tal, foram especializadas as camadas de interface, de suporte base e drivers para suportar estas arquiteturas, nomeadamente clusters de multi-cores