<?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/category/informatica/mpi-informatica/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>Usar Fortran ? Por quê ?</title>
		<link>http://www.tecnosapiens.com.br/2009/02/usar-fortran-por-que/</link>
		<comments>http://www.tecnosapiens.com.br/2009/02/usar-fortran-por-que/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 04:19:34 +0000</pubDate>
		<dc:creator>Weslley</dc:creator>
				<category><![CDATA[Ciência]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[MPI]]></category>
		<category><![CDATA[Software livre]]></category>
		<category><![CDATA[Tecnologia de ponta]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=1233</guid>
		<description><![CDATA[O Fortran (FORmula TRANslator)  surgiu na década de 50, e veio evoluindo desde então. Nos primórdios de sua existência a programação era feita em cartões perfurados, e os programas eram executados em máquinas monoprogramadas executavam apenas um job por vez). Com o tempo, a linguagem evoluiu juntamente com os computadores que foram surgindo. Entretanto, nesse [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=4b903347bb118f717470fb592a2bdf0d&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p>O <a href="http://pt.wikipedia.org/wiki/Fortran" target="_blank">Fortran</a> (FORmula TRANslator)  surgiu na década de 50, e veio evoluindo desde então. Nos primórdios de sua existência a programação era feita em cartões perfurados, e os programas eram executados em máquinas monoprogramadas executavam apenas um <em>job</em> por vez). Com o tempo, a linguagem evoluiu juntamente com os computadores que foram surgindo.</p>
<p>Entretanto, nesse meio tempo, outras linguagens surgiram. Após o grande sucesso da linguagem <a href="http://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)" target="_blank">C</a> e derivadas, fica no ar a pergunta: é preciso usar o Fortran ?</p>
<p><span id="more-1233"></span><br />
Um dos fatores responsáveis por essa indagação é ausência de ponteiros em Fortran, assim como a diferente forma de alocação de dados na memória. Em C, uma matriz é alocada da seguinte forma: os elementos de uma mesma linha são alocados sequencialmente na memória. Já no Fortran, os elementos de uma mesma coluna são alocados consecutivamente. Entretanto, poucas pessoas sabem dos bons atributos do veterano Fortran. É uma das poucas linguagens que possuem paralelismo em sua definição. Em apenas uma linha é possível realizar o produto elemento a elemento de duas matrizes, assim como soma e outras operações, sem uso de bibliotecas auxiliares. Além disso, devido ao seu grande uso pela comunidade científica, o Fortran é bastante otimizado para a computação de alto-desempenho, como o <a href="http://www.netlib.org/hpf/" target="_blank">HPF (High Performance Fortran)</a>, uma extensão do Fortran otimizada para arquiteturas potentes e bibliotecas de otimização. Além disso, o Fortran é compatível com protocolos de comunicação para multiprocessamento (<a href="http://www-unix.mcs.anl.gov/mpi/" target="_blank">MPI</a>, <a href="http://openmp.org/wp/" target="_blank">OpenMP</a> e outros), permitindo obter desempenhos fantásticos em programas com grande volume de dados processados. Em programas que envolvem basicamente operações com matrizes, o Fortran é fenomenal!</p>
<p>Evidentemente, outras linguagens possuem grande desempenho, otimizações e bibliotecas auxiliares para resolver todo tipo de problema. Mas não podemos deixar o quase &#8220;sessentão&#8221; Fortran de lado devido a sua idade. Por mais que seja um &#8220;idoso&#8221;, está melhor que muita linguagem de 20 anos por aí.</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%2F02%2Fusar-fortran-por-que%2F&amp;title=Usar%20Fortran%20%3F%20Por%20qu%C3%AA%20%3F" 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/02/usar-fortran-por-que/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<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_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/2009/01/usando-open-mpi-em-programacao-paralela/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

