Documente Academic
Documente Profesional
Documente Cultură
2
Introduo a Computao Paralela com o Open
MPI
Abstract
This paper introduces an overview about Distributed Parallel Computing and related
technologies using Message Passing Interface approach (MPI). MPI is a standard
specification to message-passing systems sponsored by MPI-Forum.
Resumo
Este minicurso introduz uma viso geral sobre programao paralela distribuda
atravs da abordagem de message passing. O MPI (Message Passing Interface) uma
especificao mantida pelo MPI-Forum e se tornou um padro para comunicao de
dados em Computao Paralela e de Alto Desempenho.
2.1. Introduo
Um dos grandes desafios da Cincia da Computao atualmente viabilizar solues
computacionais que reduzam o tempo de processamento e forneam respostas ainda
mais precisas. Frequentemente surgem propostas com as mais diversas abordagens que
exploram novas formas de resolver tais problemas ou tentam ainda melhorar as solues
existentes.
Uma das grandes reas que se dedica a propor tais melhorias a computao
paralela e de alto desempenho HPC (High Performance Computing) do ingls que
tem como base vrias subreas da Cincia da Computao, como por exemplo,
arquitetura de computadores, linguagens de programao, compiladores, teoria da
computao e computabilidade, recebendo ainda , influncias de varias outras reas, tais
como computao grfica.
Este minicurso introduzir o padro MPI (Message Passing Interface). O MPI
um conjunto de especificaes de protocolos de comunicao utilizados em HPC,
desenvolvido pelo consrcio MPI Forum, composto por pesquisadores e pela indstria.
24
A linguagem de programao utilizada durante o minicurso ser o C e o
conjunto de bibliotecas do Open MPI. Esta implementao fornece ainda compiladores
para as linguagens de programao Fortran e C++ que no sero abordadas no
minicurso, porm, aps o entendimento dos exemplos podem ser facilmente adaptados.
O minicurso est organizado da seguinte maneira. A seo 2.2 apresenta
motivaes para aprender computao paralela e suas aplicaes. A seo 2.3 introduz
aspectos de arquitetura de computadores. J a seo 2.4 mostra a classificao de Flynn.
Na seo 2.5 introduzido os dispositivos de interconexo voltados para computao
paralela. Na seo 2.6 h uma explicao sobre Clusters e Grids. Na seo 2.7
mostrado algumas mtricas para computao paralela. Na seo 2.8 apresentado o
padro MPI e sua API, enquanto a seo 2.9 apresenta uma concluso sobre o tema.
25
processamento -Wall Clock Time. Para estes aspectos, devem ser avaliadas a
utilizao de tecnologias que suportem tais requisitos e ainda promovam escalabilidade.
Este ltimo ponto muito importante pois afeta diretamente a continua evoluo e
aprimoramento da abordagem numrica proposta.
Fora do contexto cientfico, vivenciamos tambm uma exploso no volume de
dados. As corporaes, por exemplo, buscam cada vez mais ferramentas que
transformem estes dados em informaes valiosas, com o objetivo de fornecer respostas
as necessidades de seus negcios e os ajudem a otimizar seus processos.
Em geral, tais tecnologias tem como base a trade Recognition Minning
Synthesis [Chen 2008], que utilizam gigantescos datasets e lanam mo do uso de
solues massivamente paralelas para processar e obter suas respostas.
reas emergentes como a Web semntica, por exemplo, buscam algoritmos e
formas de resolver a escalabilidade com nfase na capacidade de processamento de
tarefas mais complexas e na habilidade de processar grandes datasets [Peiqiang et al.
2009].
H fascinantes aplicaes e excelentes oportunidades onde a computao
paralela pode representar ganhos de desempenho significativos. Poderamos relacionar
inmeros outros casos, porm acredito que os exemplos acima so suficientes e nos
motivam a investir tempo para conhecimento e aprimoramento do assunto.
26
Os modelos que exploram ambientes computacionais de memria distribuda so
os que adotam o paradigma de message passing (troca de mensagens). Tais modelos so
formados por rotinas de comunicao e sincronizao de tarefas - sendo o MPI um
exemplo - que podem ser ativadas a partir de trs modos:
disponibilidade: o processo somente poder enviar uma mensagem se o receptor
estiver disponvel;
standard: uma mensagem pode ser enviada mesmo se no houver um receptor
para ele;
sncrono: similar ao modo padro, porm o processo de envio s considerado
como concludo quando o receptor inicia a operao de recebimento.
Estes modelos so altamente portveis e habilitam a execuo de programas nos
mais diferentes tipos de mquinas paralelas.
27
vrios ncleos em um mesmo chip, conhecidos atualmente como cores, reduziu
significativamente os preos desta tecnologia.
Os modelos de programao projetados para este tipo de arquitetura geralmente
usam processos com baixo custo computacional. Estes por sua vez so conhecidos como
Threads. As abordagens mais conhecidas so as disponveis nos sistemas operacionais,
como o Pthreads em sistemas Unix Like e WinThreads no Windows .
H ainda modelos de alto nvel como o OpenMP, que fornece uma API de alto
nvel, portvel, composta de diretivas de compilao, bibliotecas de execuo e
variveis de ambientes. O OpenMP baseado no modelo fork-join (Figura 2.3).
Figura 2.4. OpenMP: a diretiva #pragma omp parallel for informa ao compilador
que a regio deve ser paralelizada.
28
2.3.4. NUMA (Non-Uniform Memory Access)
Quando o tempo de acesso de memria est intrinsecamente relacionado a localizao
do processador, este grupo denominado como NUMA. Esta arquitetura desenhada
para prover o compartilhamento total de recursos, executando um mesmo sistema
operacional. Como a memria de todas as mquinas participantes so mapeadas em um
mesmo espao de endereamento, a comunicao se d por uma rede de interconexo.
29
Figura 2.5. Classificao de Flynn.
30
Memory Channel: segundo Dantas (2005), a abordagem conhecida como
Memory Channel fornece at 100Mb/s de velocidade de transferncia e a
distncia fsica pode ser de at 10 (dez) metros. Esta tecnologia usa um switch
externo e placas especficas para realizar a sincronizao dos dados.
Quadrics ou QsNET: a topologia desta rede do tipo Fat-Tree, sendo possvel
expandir a rede a milhares de dispositivos de comutao. A taxa de transferncia
pode atingir a centenas de Mb/s e fornece baixa latncia. Utiliza uma interface
de rede programada chamada Elan [Dantas 2005].
Infiniband: uma especificao para protocolos de comunicao gerida pelo
grupo Infiniband Trade Association (http://www.infinibandta.org). Este grupo
composto por fornecedores lderes de mercado tais como HP, IBM, Intel,
Lellanox, Oracle, Qlogic e System Fabric Works. Este protocolo fornece uma
interface de comunicao com elevadas taxas de transferncia e suporte a
endereamento para at 64.000 dispositivos, suportando failover e QoS (Quality
of Service).
31
Os Grids utilizam middlewares que dividem uma grande tarefa em pequenas partes
distribuindo entre os ns participantes e consolidando os resultados.
Um dos mais bem-sucedidos middlewares para computao em Grid o projeto
open source encabeado pela Universidade da Califrnia, nos EUA. O Berkeley Open
Infrastructure for Network Computing, mais conhecido pelo seu acrnimo BOINC. O
BOINC um software para computao voluntria utilizado em importantes projetos
como o SETI@home, que analisa ondas de rdio provenientes do espao sideral em
busca de vidas extraterrestres. O CERN (European Organization for Nuclear Research)
tambm utiliza este software para analisar os dados gerados pelo Grande Colisor de
Hdrons , o LHC. H ainda projetos especficos como o World Community Grid e o
Folding@Home, este ltimo da universidade de Standford, que se dedicam a buscar
cura para doenas.
32
Speedup=Nm.processadoresFrao sequncial do programa( Nm.processadores1)
Esta lei conhecida como lei de Gustafon-Barsis.
2.8. O MPI
Durante a dcada de 90, foram produzidas duas especificaes que unificaram os
trabalhos dos participantes do MPI Forum (http://www.mpi-forum.org) na rea de
processamento paralelo e distribudo. Este trabalho foi encabeado por um grupo
formado por cerca de 60 pessoas provenientes de mais de 40 organizaes dos Estados
Unidos e Europa, sendo fortemente influenciado pelos resultados at ento alcanados
nos grupos do IBM T.J. Watson Research Center, Intel's NX/2 , Express, nCUBE's
Vertex, p4 e o PARMACS. Outras importantes contribuies vieram tambm do
Zipcode, Chimp, PVM, Chameleon e PICL.
A primeira verso MPI-1 - foi publicada no ano de 1994 contando com os
requisitos base necessrios para o padro de troca de mensagens. Os pontos mais
complexos foram deixados para a verso MPI-2, lanada posteriormente em 1997
[Mattson et al. 2010] .
Os trabalhos mais recentes do MPI Forum remontam aos anos de 2008 e 2009,
tendo como diretrizes a correo de bugs, a compilao das duas especificaes MPI-1
e MPI-2 - em um nico documento e a publicao de revises minor: MPI-2.1 e MPI-
2.2. A ltima atualizao aconteceu em setembro de 2012, quando o grupo publicou o
maior grupo de atualizaes no padro, incluindo novas extenses, a remoo de
bindings obsoletos para o C++ e o suporte ao FORTRAN 2008. Este ltimo release foi
nomeado como MPI-3.0.
Apesar de no ser uma norma homologada por institutos como IEEE, IETF, o
MPI De facto um padro para arquiteturas de memria distribuda, escrito e
ratificado pelo MPI Forum. A idia central do MPI consiste em prover rotinas de
sincronizao e controle processos, alm da distribuio e consolidao dos dados entre
os computadores interconectados, utilizando para isto o paradigma de troca de
mensagens.
O modelo da API do MPI, entrega ao programador uma camada de abstrao,
altamente portvel, entre o sistema operacional/tecnologias de comunicao e a
aplicao, permitindo escalar a execuo do programa entre os computadores da rede,
com o uso de suas memrias e poder de processamento, baseado no padro de diviso e
conquista. Por ser uma camada de alto nvel, possvel utilizar o mesmo programa em
uma grande variedade de computadores que estejam interconectados. A API muito
adequada a programas de propsito geral desenhados para sistemas SIMD e MIMD.
O padro tem como foco auxiliar a todos que precisem ou desejem criar
aplicativos portveis e paralelos em Fortran e C, fornecendo uma interface simples que
atenda desde solues menos sofisticadas at as mais avanadas, voltadas para o alto
desempenho, como as disponveis em computadores massivamente paralelos.
Cabe enfatizar que o MPI uma especificao. No entanto, h disponveis no
mercado implementaes livres e pagas. Podemos relacionar no modelo pago o Intel
MPI, HP MPI e o MATLab MPI. J as implementaes open source mais utilizadas so
33
o Open MPI e o MPICH. Fabricantes de supercomputadores costumam incluir features e
ferramentas especficas que visam maximizar o desempenho em suas mquinas.
Apesar de todas as facilidades do padro, a identificao das zonas paralelas
(reas do cdigo que podem ser executadas simultaneamente a outras tarefas) e o
dimensionamento de carga entre os computadores participantes, ficam a cargo do
desenvolvedor e devem ser explicitadas no programa. Uma anlise prvia do problema a
ser tratado, ir auxili-lo nesta tarefa.
Como o objetivo o aumento de desempenho, deve-se ter em mente o projeto de
um programa que realiza a menor troca de mensagens possvel, visando anular e/ou
reduzir o impacto do tempo despendido na distribuio e consolidao dos dados, no
tempo total de execuo. Podemos relacionar como exemplos os Hipercubos e Meshes,
que so formas de interconexo que visam reduzir e otimizar o processamento. No
iremos abordar este tema aqui por ser tratar de um tpico complexo para quem est
comeando a explorar computao paralela.
Para finalizar a apresentao do padro, vamos conhecer alguns conceitos
importantes inerentes a API, os quais nos ajudaro a compreender as funes
disponveis e como funciona o MPI. Estes so:
Processo: o mdulo executvel, ou seja, seu programa, que pode ser dividido
em N partes, e executado em uma ou mais mquinas;
Grupo: o conjunto de processos. No MPI a constante MPI_COMM_WORLD
armazena o comunicador de todos os processos definidos na aplicao MPI;
Rank: o controle de execuo do programa em MPI depende diretamente da
correta identificao do processador no grupo de trabalho. Esta identificao
um nmero inteiro que varia de 0 a N-1 processos. A funo MPI_Comm_rank
determina qual o identificador de cada processo dentro do comunicador;
Comunicador: o componente que representa o domnio de uma comunicao
em uma aplicao MPI;
Buffer de Aplicao: o espao reservado em memria para armazenar os dados
das mensagens que um processo necessita enviar ou receber, gerenciado pela
aplicao;
Buffer de Sistema: o espao reservado em memria pelo sistema para o
gerenciamento de mensagens.
34
Figura 2.6. Estrutura de um cdigo em C/MPI.
35
MPI_FLOAT float
MPI_DOUBLE double
MPI_PACKED
MPI_BYTE
2.8.2 MPI_Init
Este mtodo inicializa o ambiente de execuo do MPI, sincronizando os processos
entre os computadores participantes e deve ser invocado uma nica vez durante toda a
execuo do seu aplicativo. Caso contrrio, o MPI ir sinalizar com o erro
MPI_ERR_OTHER. A assinatura do mtodo encontra-se a seguir:
Devemos assegurar que a chamada seja realizada por apenas uma Thread e que
esta mesma Thread invoque, ao final do processamento, o mtodo MPI_Finalize.
2.8.3 MPI_Finalize
Finaliza o ambiente de execuo do MPI, liberando os recursos utilizados durante o
processamento. Deve ser invocado sob a mesma Thread que executou o MPI_Init. Este
mtodo no possui argumentos.
36
datatype
Tipo do dado.
dest
Rank do destinatrio.
tag
Identificador para a mensagem (nmero inteiro).
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
funo MPI_Comm_create)
37
request
Solicitao de envio. Utilizado pelas funes de bloqueio como MPI_Wait para assegurar a
concluso do processamento.
2.8.6 MPI_Wait
Ao realizar operaes assncronas, podemos nos deparar com situaes de dependncia (
dados, instrues, entre outros) onde necessrio assegurar a concluso dos mesmos
antes de executar a prxima instruo. Para solucionar tais questes o MPI fornece
funes como o MPI_Wait.
request
Identificador da requisio a ser bloqueada.
status
Retorna a informao sobre a situao da operao. Para testar o status utilize a funo
MPI_Test
38
dois processos de um grupo de trabalho, especificados atravs do contexto - para
arquiteturas SIMD (MPI_COMM_WORLD), j em MIMD (o comunicador criado pela
funo MPI_Comm_create).
As operaes mais comuns nas comunicaes coletivas so as que realizam
sincronizao, distribuio de dados (Broadcast) e finalmente, as redues (Reduction)
para operaes de consolidao de dados, como operaes de soma por exemplo.
2.8.8 MPI_Barrier
O MPI_Barrier define um ponto de sincronizao entre todos os processos participantes
da comunicao coletiva, isto , o cdigo no pode prosseguir enquanto todos no
estiverem no sincronizados no mesmo ponto.
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
funo MPI_Comm_create)
2.8.9 MPI_Bcast
A distribuio de uma mensagem para todos os processos do grupo realizado pela
funo MPI_Bcast.
2.8.10 MPI_Reduce
Para a consolidao dos resultados do processamento em comunicaes coletivas, a
funo MPI_Reduce fornece vrios tipos de operaes (Tabela 2.2).
Tabela 2.2. Operaes do MPI_Reduce no MPI
ID Operao
39
MPI_MIN Menor nmero
MPI_SUM Soma
MPI_PROD Produto
sendbuf
Endereo do buffer de envio.
recvbuf
Endereo do buffer de recebimento.
count
Nmero de elementos a ser enviado (nmero inteiro e no negativo).
datatype
Tipo do dado.
op
Identificador da operao de reduo.
root
Rank do processo que realizar a operao de reduo.
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
funo MPI_Comm_create)
40
sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype, int
root,MPI_Comm comm)
sendbuf
Endereo do buffer para envio dos dados.
sendcount
Nmero de elementos a ser enviado (nmero inteiro e no negativo).
sendtype
Tipo do dado.
recvcount
Nmero de elementos no buffer de recebimento (nmero inteiro e no negativo).
recvtype
Tipo do dado.
root
Rank do processo de envio.
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
funo MPI_Comm_create)
2.8.12 MPI_Allgather
Quando todos os processos precisam receber os dados coletados dos demais processos
do grupo, o MPI_Allgather deve ser utilizado. Novamente aqui os dados precisam ser
do mesmo tamanho.
41
sendcount
Nmero de elementos a ser enviado (nmero inteiro e no negativo).
sendtype
Tipo do dado.
recvbuf
Endereo do buffer para recebimento dos dados.
recvcount
Nmero de elementos no buffer de recebimento (nmero inteiro e no negativo).
recvtype
Tipo do dado.
comm
Comunicador. Em SIMD ( MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
funo MPI_Comm_create) .
42
2.9. Concluses
Neste minicurso buscamos explorar uma viso geral sobre arquiteturas paralelas e o
modelo de programao baseado no paradigma de message passing. A partir das
funes e ideias apresentadas, possvel construir cdigos explorando paralelismo com
o MPI. As features mais complexas do MPI no abordadas retratam questes de
refinamento de desempenho e manipulao de arquivos de forma paralela. Estas
caractersticas podem ser conhecidas atravs do site do MPI-Forum( http://www.mpi-
forum.org) ou por intermdio das bibliografias listadas nas referncias.
Em Computao Paralela, h ainda outras tecnologias que podem ser utilizadas
em conjunto ao MPI. Em Memria Compartilhada (Shared Memory), por exemplo, o
modelo do OpenMP fornece os mesmos benefcios de portabilidade do OpenMPI para
este tipo de arquitetura. H ainda abordagens que exploram paralelismo em placas de
vdeo , como o modelo livre chamado OpenCL, definido pelo consrcio de empresas
chamado Khronos Group, alm dos modelo proprietrios propostos pela NVIDIA
(CUDA) e o OpenACC(http://www.openacc-standard.org/), encabeado atualmente pela
PGI, Nvidia, Caps e Cray.
Referncias
Chen, Yen-Kuang. (2008), Convergence of Recognition, Mining, and Synthesis
Workloads and Its Implications, http://ieeexplore.ieee.org/xpl/login.jsp?
tp=&arnumber=4479863&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls
%2Fabs_all.jsp%3Farnumber%3D4479863, Maio.
Dantas, Mario. (2005), Computao Distribuda de Alto Desempenho, Axcel, 1 edio.
De Rose, Csar A. F. Navaux, Phillippe O. A. (2005), Arquiteturas Paralelas, Bookman,
1 edio.
Gebali, Fayez. (2011), Algorithms and Parallel Computing, Wiley, 1 edio.
Hennesy. John L. Patterson, David A. (2012), Computer Architecture, Morgan
Kaufamann, 5 edio.
Kirk, David B. Hwu, Wen-mei W. (2010), Programming Massively Parallel Processors,
Morgan Kaufmann, 1 edio.
Martin, Milo M. K. Hill,Mark D. Sorin,Daniel J. (2012), Why on-chip cache coherence
is here to stay, http://doi.acm.org/10.1145/2209249.2209269, Julho
Mattson, T.G, Sanders. B.A., Massingill, B.L. (2010), Patterns for Parallel
Programming. Addison-Wesley, 1 edio.
Mishra, Bhabani Shankar. and Dehuri, Satchidananda (2011). Parallel Computing
Environments: A Review., http://tr.ietejournals.org/article.asp?issn=0256-
4602;year=2011;volume=28;issue=3;spage=240;epage=247;aulast=Mishra;t=6, Maio
MPI Forum. (2012), MPI-3.0 Standard Specification, http://www.mpi-
forum.org/docs/mpi-3.0/mpi30-report.pdf, Setembro.
43
Peiqiang, L. Zeng, Y. Kotoulas, S. Urbani, J. and Zhong, N. (2009) The Quest for
Parallel Reasoning on the Semantic Web, http://dx.doi.org/10.1007/978-3-642-
04875-3_45, Novembro.
Pitt-Francis, J. and Whiteley, J. (2012), An Introduction to Parallel Programming Using
MPI - Guide to Scientific Computing in C++ ,Springer, 1 edio
Quammen, Cory. (2005). Introduction to programming shared-memory and distributed-
memory parallel computers, http://doi.acm.org/10.1145/1144382.1144384 , Outubro
Quinn, Michael J. (2003), Parallel Programming in C with MPI and OpenMP, Mc Graw
Hill, 1 edio.
Watanabe, K. Otsuka, T. Tsuchiya, J. Nishi, H. Yamamoto, J. Tanabe, N. Kudoh, T. and
Amano, H. (2007), A Network Interface Controller Chip for High Performance
Computing with Distributed PCs, Parallel and Distributed Systems,
http://ieeexplore.ieee.org/stamp/stamp.jsp?
tp=&arnumber=4288127&isnumber=4288116, Setembro.
44