Resumen: | Normalmente, utiliza-se o paradigma de troca de mensagens quando se está programando uma arquitetura do tipo cluster. Porém, quando se deseja programar uma máquina multiprocessada, é requirido o paradigma de memória compartilhada. Recentemente, o surgimento de novas tecnologias possibilitou a criação de clusters com nós multiprocessados. Nestas arquiteturas os nós são compostos por mais de um processador ou core, e compartilham a mesma memória. Este cenário, cria a possibilidade de usar novos modelos de programação híbrida. No amplo espectro de soluções possíveis para o desenvolvimento de código híbrido para clusters de máquinas multiprocessadas, a utilização da dupla MPI e OpenMP está emergindo como um padrão de fato. A maioria dos códigos híbridos MPI e OpenMP são baseados em um modelo de estrutura hierárquica, que torna possível a exploração de grãos grandes e médios de paralelismo no nível de MPI, e grão fino no paralelismo no nível do OpenMP. O objetivo é claramente tirar vantagens das melhores características de ambos os paradigmas de programação. Os nós desses clusters podem ainda ser máquinas NUMA (Non- Uniform Memory Access). Estas máquinas com acesso não uniforme à memória possibilitam que o desenvolvedor explore afinidade de memória, melhorando o desempenho da aplicação. O objetivo principal deste trabalho é investigar o uso de programação híbrida com MPI e OpenMP em clusters de máquinas NUMA, explorando afinidade de memória, visando identificar um conjunto de boas práticas de programação híbrida a serem utilizadas neste contexto. Typically, the message passing paradigm is the programming model used for cluster architectures. On the other hand, programming for multiprocessor architectures requires the shared memory paradigm. Recently, the emergence of new technologies enabled the creation of clusters with multiprocessor nodes. In these architectures, computing nodes are composed by more than one processor or core sharing the same memory. This scenario creates the possibility of using new hybrid programming models. In the spectrum of possible alternatives for hybrid programming for clusters of multiprocessors, the use of MPI along with OpenMP is emerging as a de-facto standard. Most hybrid MPI and OpenMP codes are based on hierarchical structure model, which allows exploring coarse and medium grain parallelism with MPI and fine grain parallelism with OpenMP. Clearly, the main idea is to take advantage of the best features of both programming paradigms. Additionally, the nodes of these clusters can be NUMA (Non-Uniform Memory Access) machines. These machines enable the developer to explore memory affinity, improving application performance. The main objective of this work is to investigate the use of hybrid programming with MPI and OpenMP in clusters of NUMA machines, exploiting memory affinity aiming at the identification of a set of good programming practices to be used in this context. |