<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TecnoSapiens &#187; mpi</title>
	<atom:link href="http://www.tecnosapiens.com.br/tag/mpi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tecnosapiens.com.br</link>
	<description>De pedras lascadas a mentes afiadas</description>
	<lastBuildDate>Thu, 08 Sep 2011 17:00:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Usando Open MPI Em Programação Paralela</title>
		<link>http://www.tecnosapiens.com.br/2009/01/usando-open-mpi-em-programacao-paralela/</link>
		<comments>http://www.tecnosapiens.com.br/2009/01/usando-open-mpi-em-programacao-paralela/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 17:12:31 +0000</pubDate>
		<dc:creator>Claudinei</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[História]]></category>
		<category><![CDATA[Homo sapiens]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MPI]]></category>
		<category><![CDATA[Software livre]]></category>
		<category><![CDATA[Adicionar nova tag]]></category>
		<category><![CDATA[mpi]]></category>
		<category><![CDATA[openmpi]]></category>
		<category><![CDATA[programação para cluster]]></category>
		<category><![CDATA[programação paralela]]></category>
		<category><![CDATA[vários processadores]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=1083</guid>
		<description><![CDATA[Olá caro leitor, depois de algum tempo de descanso volto novamente a tratar de um assunto que tem tido bastante interesse da comunidade que trabalha com computação de alto desempenho. Pois uma forma de conseguir o tão desejado alto desempenho em um programa é fazendo com que este utilize vários processadores durante sua execução, mas [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=4df351c0f287e656665bf61bddf04d42&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p><span style="font-size: medium;"><span style="font-size: small;">Olá caro leitor, depois de algum tempo de descanso volto novamente a tratar de um assunto que tem tido bastante interesse da comunidade que trabalha com computação de alto desempenho. Pois uma forma de conseguir o tão desejado alto desempenho em um programa é fazendo com que este utilize vários processadores durante sua execução, mas como foi dito no último artigo que escrevi ( </span></span><a rel="bookmark" href="../../2008/11/implementando-programas-que-usam-varios-processadores/">Implementando Programas que Usam Vários Processadores</a><span style="font-size: medium;"><span style="font-size: small;"> ), essa não é uma tarefa tão simples! O escopo desse artigo traz algumas dicas de ferramentas necessárias para criar um programa que ao ser executado use vários processos e que esses processos comuniquem entre si.</span></span></p>
<p><span style="font-size: medium;"><span style="font-size: small;"><span id="more-1083"></span></span><span style="font-size: small;">Como foi discutido no artigo citado acima, uma forma de implementar a programação paralela é usando as bibliotecas de passagem de mensagens (MPI). Portanto, se o leitor quiser testar os programas exemplos que darei durante os próximos artigos será necessário instalar o MPI, como sou adepto da filosofia Open Source, aconselho que instale o <a id="qzyz" title="Open MPI" href="http://www.open-mpi.org/">Open MPI</a>,( <span style="text-decoration: line-through;">mas se estiver usando o Windows, instale o <a href="ftp://ftp.mcs.anl.gov/pub/mpi/nt/mpich.nt.1.2.5.exe">MPICH</a>, </span><span style="text-decoration: line-through;">Por sua conta e risco</span>). Como de praxe, a instalação do Open MPI é simples, basta baixar o código fonte (<a href="http://www.open-mpi.org/software/ompi/v1.3/downloads/openmpi-1.3.tar.gz">código fonte</a>)</span></span>, <span style="font-size: small;">descompactar o arquivo, entrar na pasta criada pela descompactação usando o console ou um aplicativo similar e em seguida dar os comandos usais para compilação e instalação de pacotes (<strong><em>./configure</em></strong> em seguida<em> <strong>make</strong></em>, e como superusuário dar o último comando, <strong><em>make install</em></strong>). O Open MPI necessita de que alguns pacotes estejam instalados; por exemplo, se você quiser escrever seus programas em Fortran, será necessário que tenha o fortran previamente instalado em sua máquina, essa mesma regra é válida para as outras linguagens que você queira escrever seus códigos, tais como<em> C </em>e <em>C++</em>. Outro pacote que o MPI usa e, portanto, deve estar instalado é o <em>ssh</em>, pois é a partir do ssh que é feita a comunicação entre os vários processos do programa em execução.</span></p>
<p><span style="font-size: small;">Vamos criar um programa simples para verificar se sua instalação foi bem sucedida, porém primeiramente vou falar de uma premissa básica sobre o MPI que é a Inicialização e a Finalização. Para se fazer referências ou chamadas à qualquer rotinas MPI, é necessário que o MPI seja inicializado e antes do término do programa principal o MPI deve ser finalizado. Para isso são definidas rotinas nas linguagens de programação, aqui vou usar o<em> C</em> como exemplo, porém o procedimento é o mesmo para outras linguagens (o que muda é sintaxe da chamada da rotina).<br />
</span></p>
<blockquote><p>int MPI_Init( int *argc,  char ***argv); // inicialização do  MPI</p>
<p><em>//Blocos de códigos  MPI</em></p>
<p>int MPI_Finalize( ); // finalização do MPI</p></blockquote>
<p>Esses parâmetros definidos na inicialização do MPI (argc e argv), são aqueles parâmetros recebidos tradicionalmente pela interface da linguagem <em>C</em>, portanto tais parâmetros devem ser passados para inicializar o MPI antes de sua utilização. O valor de retorno dessa chamada é um código de erro, sendo assim, ele indica possíveis erros durante a inicialização do MPI. Se não houve nenhum erro durante a inicialização, o valor de retorno será MPI_SUCCESS; caso haja algum tipo de erro os valores serão diferentes, porém não são especificados pelo MPI.  E assim como a inicialização, a finalização é feita pela rotina MPI_Finalize( ).</p>
<p>Para compreender o processo de  inicialização e finalização das rotinas MPI bem como testar se a sua instalação foi bem sucedida, copie o trecho do código seguinte em um arquivo sem formatação e salve-o com o nome <em>NumProcesso.c</em> em seguida compili-o. Obs. Ao copiar e colar tome cuidado com as aspas!</p>
<blockquote><p>#include &lt;stdio.h&gt;<br />
#include &lt;mpi.h&gt;</p>
<p>int main(int argc, char **argv){<br />
int quantos, rank;<br />
MPI_Init(&amp;argc, &amp;argv);<br />
MPI_Comm_size(MPI_COMM_WORLD, &amp;quantos);<br />
MPI_Comm_rank(MPI_COMM_WORLD, &amp;rank);<br />
printf(&#8220;Processo %d de %d rodando \n&#8221;, rank, quantos);</p>
<p>MPI_Finalize();</p>
<p>return 0;</p>
<p>}</p></blockquote>
<p>Para compilar um arquivo usando MPI basta seguir o seguinte procedimento: usando o console, entre na pasta que se encontra o arquivo e em seguida dê o comando<em> mpicc NumProcesso.c -o processos.exe</em> (obs. a extensão *.exe é opcional, na verdade nem é necessário usar nenhum tipo de extensão). Se a compilação ocorreu tudo certo, execute o programa recém compilado assim: <em>mpirun -np 4 processos.exe</em>, aqui &#8220;-np 4&#8243; é o numero de processos que será aberto durante a execução do programa, neste caso são quatro processos. Para evitar que a cada processo aberto ele peça a senha, configure o servidor ssh para autenticação sem senha.</p>
<p>P.S. O Próximo artigo será: <strong>Os conceitos em que as rotinas MPI são construídas</strong>. Nesse artigo será abordado processos,  mensagens,  comunicadores e tipos de dad<strong>os.</strong></p>
<p><strong><br />
</strong></p>
<p><strong>ERRATA:</strong></p>
<p>Olá leitores do TecnoSapiens, em algum ponto do artigo foi afirmado que a comunicação entre os processos era feita pelo ssh, porém o ssh é utilizado para disparar os daemons responsáveis por executar os processos MPI. Normalmente a comunicação propriamente dita das primitivas MPI_ &#8230;  é feita sem segurança.</p>
<p>Claudinei Caetano de Souza.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.tecnosapiens.com.br%2F2009%2F01%2Fusando-open-mpi-em-programacao-paralela%2F&amp;title=Usando%20Open%20MPI%20Em%20Programa%C3%A7%C3%A3o%20Paralela" id="wpa2a_2"><img src="http://www.tecnosapiens.com.br/home/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.tecnosapiens.com.br/2009/01/usando-open-mpi-em-programacao-paralela/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Implementando Programas que Usam Vários Processadores</title>
		<link>http://www.tecnosapiens.com.br/2008/11/implementando-programas-que-usam-varios-processadores/</link>
		<comments>http://www.tecnosapiens.com.br/2008/11/implementando-programas-que-usam-varios-processadores/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 16:46:27 +0000</pubDate>
		<dc:creator>Claudinei</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Software livre]]></category>
		<category><![CDATA[Tecnologia de ponta]]></category>
		<category><![CDATA[mpi]]></category>
		<category><![CDATA[mpich]]></category>
		<category><![CDATA[multiprocessadores]]></category>
		<category><![CDATA[openmpi]]></category>
		<category><![CDATA[programação paralela]]></category>
		<category><![CDATA[simulação computacional]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=811</guid>
		<description><![CDATA[Nos últimos anos houve um grande avanço na tecnologia de fabricação de dispositivos semicondutores, isso possibilitou a redução no tamanho físico e na melhoria da performance dos computadores. Atualmente essa diminuição não está ocorrendo na mesma taxa dos últimos dez anos, e, conseqüentemente, a performance computacional estaria chegando a um ponto de estagnação, pois como [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=4df351c0f287e656665bf61bddf04d42&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p>Nos últimos anos houve um grande avanço na tecnologia de fabricação de dispositivos semicondutores, isso possibilitou a redução no tamanho físico e na melhoria da performance dos computadores. Atualmente essa diminuição não está ocorrendo na mesma taxa dos últimos dez anos, e, conseqüentemente, a performance computacional estaria chegando a um ponto de estagnação, pois como é sabido o desempenho dos processadores crescem com o aumento da densidade de transistores, ou seja, ele aumenta com a redução no tamanho dos dispositivos. Uma possibilidade para continuar o aumento na performance dos microcomputadores foi o inicio da implementação de computadores com vários núcleos, os chamados “multicore”. Hoje se encontra à disposição dos consumidores microcomputadores de vários processadores a um preço acessível.</p>
<p>Diante desse panorama é natural que tenhamos interesse em máquinas que tenham o máximo de “core” possível, porém existe um “gargalo” nessa questão, porque a maioria dos aplicativos são feitos para rodarem em apenas um processo, ou seja, os aplicativos usam apenas um processador enquanto os outros processadores ficam ociosos, ou rodam processos de outros aplicativos. Essa questão é muito mais evidente quando o programa que está sendo executado foi implementado pelo próprio usuário. É nesse instante que se vê a necessidade de construir programas que “rodem” em vários processadores, mas isso implica uma série de questões complicadas que serão abordadas a seguir.<span id="more-811"></span></p>
<p>Aquele leitor que desenvolve software para rodar em “<a href="http://pt.wikipedia.org/wiki/Cluster">cluster de pc&#8217;s</a>” ou qualquer outro sistema paralelo, conhece bem as dificuldades que existem em programar um aplicativo que use vários processadores ou vários computadores. Um dos principais problemas é quando pretendemos rodar um programa em várias máquinas e estas máquinas por sua vez tem arquiteturas diferentes, e aí o que fazer? Outro problema é quanto ao número de máquinas que se pretende usar para executar um desses programas. Se mudarmos a quantidade de processadores, seria necessário reescrever todo o programa? Para resolver essas questões foi criado uma biblioteca (<a href="http://pt.wikipedia.org/wiki/Mpi">MPI-Message Passing Interface</a>) que faz todo esse trabalho para o programador, assim ele não precisa ter esse tipo de preocupação. Mas isso não é assim “tão de graça”, pois para usar essa biblioteca é necessário que o programador escreva seu código de acordo com o padrão MPI.</p>
<p>O MPI é um padrão de biblioteca de passagem de mensagem para sistemas paralelos, ou seja, quando temos um aplicativo rodando em vários processos, em algum instante eles precisam se comunicar entre si e quem faz essa interface de comunicação é exatamente essa biblioteca (MPI).  Esse padrão foi desenvolvido procurando fornecer uma base comum de desenvolvimento de programas paralelos em plataformas distintas. Assim, usando essa biblioteca você consegue escrever um programa que rode em várias máquinas e essas não precisam ter necessariamente a mesma arquitetura. De acordo com a intenção do comitê de padronização (<a href="http://www.mpi-forum.org/">MPI -Forum</a>), o padrão especifica apenas uma interface de programação e sua concretização em algumas linguagens de programação, C, C++, Fortran 77 e Fortran 90. Detalhes de implementação são deixados totalmente por conta do implementador, de forma a flexibilizar o sistema e possibilitar implementações eficientes.</p>
<p>Essa biblioteca padrão pode ser encontrada gratuitamente para Windows, Unix e Linux. Para Windows e Unix existe o MPICH que não darei muitos detalhes aqui, porém para o linux existe um projeto chamado <a href="http://www.open-mpi.org/">OPEN MPI</a> que será o nosso foco aqui. Nos próximos artigos mostrarei em detalhes como instalar e escrever um programa que rode em vários processos. Desde já adianto, para escrever e testar um programa implementado com MPI, não é necessário que você tenha um computador com vários processadores, a diferença é que irá rodar um processo de cada vez.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.tecnosapiens.com.br%2F2008%2F11%2Fimplementando-programas-que-usam-varios-processadores%2F&amp;title=Implementando%20Programas%20que%20Usam%20V%C3%A1rios%20Processadores" id="wpa2a_4"><img src="http://www.tecnosapiens.com.br/home/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.tecnosapiens.com.br/2008/11/implementando-programas-que-usam-varios-processadores/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

