@PHDTHESIS{ 2014:678542104, title = {Um processo de geração automática de código paralelo para arquiteturas híbridas com afinidade de memória}, year = {2014}, url = "http://tede2.pucrs.br/tede2/handle/tede/7390", abstract = "Nos últimos anos, avanços tecnológicos têm disponibilizado máquinas com diferentes níveis de paralelismo, produzindo um grande impacto na área de processamento de alto desempenho. Estes avanços permitiram aos desenvolvedores melhorar ainda mais o desempenho de aplicações de grande porte. Neste contexto, a criação de clusters de máquinas multiprocessadas com acesso não uniforme à memória (NUMA - Non-Uniform Memory Access), surge como uma tendência. Em uma arquitetura NUMA, o tempo de acesso a um dado depende de sua localização na memória. Por este motivo, gerenciar a localização dos dados é essencial em máquinas deste tipo. Neste cenário, o desenvolvimento de software para um cluster de máquinas NUMA deve explorar tanto a parte internodo (multicomputador, com memória distribuída) quanto a parte intranodo (multiprocessador, memória compartilhada) desta arquitetura. Este tipo de programação híbrida faz melhor uso dos recursos disponibilizados por arquiteturas NUMA. Entretanto, reescrever uma aplicação sequencial de modo que explore o paralelismo do ambiente de forma correta não é uma tarefa trivial, mas que pode ser facilitada através de um processo automatizado. Neste sentido, o presente trabalho apresenta um processo de geração automática e transparente de aplicações paralelas híbridas, sem que o usuário precise conhecer as rotinas de baixo nível das bibliotecas de programação paralela. Foi desenvolvida então, uma ferramenta gráfica para que o usuário crie seu modelo paralelo de forma dinâmica e intuitiva. Assim, é possível criar programas paralelos de tal forma que não é necessário ser familiarizado com bibliotecas comumente utilizadas por profissionais da área de alto desempenho (como o MPI, por exemplo). Através da ferramenta desenvolvida, o usuário desenha um grafo dirigido para indicar a quantidade de processos (nodos do grafo) e as formas de comunicação entre eles (arestas). A partir desse desenho, o usuário insere o código sequencial de cada processo definido na interface gráfica, e a ferramenta gera o código paralelo correspondente. Além disto, mapeamentos de processos pesados e de memória foram definidos e testados em um cluster de máquinas NUMA, bem como um mapeamento híbrido. A ferramenta foi desenvolvida em Java e gera código paralelo com MPI em C++, além de aplicar políticas de afinidade de memória para máquinas NUMA através da biblioteca MAI (Memory Affinity Interface). Algumas aplicações foram desenvolvidas com e sem a utilização do modelo. Os resultados demonstram que o mapeamento proposto é válido, já que houve ganho de desempenho em relação às versões sequenciais, além de um comportamento similar a implementações paralelas tradicionais.", publisher = {Pontifícia Universidade Católica do Rio Grande do Sul}, scholl = {Programa de Pós-Graduação em Ciência da Computação}, note = {Faculdade de Informática} }