<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mariano Guerra's Log (Publicaciones sobre hpc)</title><link>http://marianoguerra.org/</link><description></description><atom:link href="http://marianoguerra.org/es/categories/hpc.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Mon, 18 Nov 2024 17:56:43 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Resolviendo ejercicios de MPI(y tambien en erlang)</title><link>http://marianoguerra.org/es/posts/200907resolviendo-ejercicios-de-mpiy-tambien/</link><dc:creator>Mariano Guerra</dc:creator><description>&lt;p&gt;Como tarea en un grupo de la facultad del que formo parte tenemos que resolver ejercicios de MPI, como yo algo de idea de MPI tengo decidí también resolverlos en erlang para seguir aprendiendo mas de este lenguaje, acá van los enunciados del primer ejercicio y las resoluciones de ambos.&lt;br&gt;&lt;br&gt;&lt;span style="font-style: italic;"&gt;Write a program that uses &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www-unix.mcs.anl.gov/mpi/www/www1/MPI.html#MPI"&gt;MPI&lt;/a&gt;&lt;span style="font-style: italic;"&gt; and has each &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www-unix.mcs.anl.gov/mpi/www/www1/MPI.html#MPI"&gt;MPI&lt;/a&gt;&lt;span style="font-style: italic;"&gt; process print &lt;/span&gt;&lt;/p&gt;&lt;pre style="font-style: italic;"&gt;Hello world from process i of n&lt;br&gt;&lt;/pre&gt;&lt;span style="font-style: italic;"&gt; using the rank in MPI_COMM_WORLD for i and the size of MPI_COMM_WORLD for n. You can assume that all processes support output for this example.&lt;/span&gt;&lt;br&gt;&lt;br&gt;el ejercicio en C lo pueden ver en el post anterior así que acá pego el de erlang nomas&lt;br&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;module&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ej1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;br&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="ni"&gt;export&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nb"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fun&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;salute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;br&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="nf"&gt;salute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="nn"&gt;io&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello world from &lt;/span&gt;&lt;span class="si"&gt;~p&lt;/span&gt;&lt;span class="s"&gt; of &lt;/span&gt;&lt;span class="si"&gt;~p~n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nv"&gt;Total&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;como en erlang no hay una forma de saber cuantos procesos totales hay dando vueltas (o al menos no es tan estatico como MPI) decidi pasarle el total y imprimir el PID.&lt;br&gt;&lt;br&gt;para correrlo y ver la salida la forma facil es:&lt;br&gt;&lt;br&gt;$ erl ej1.erl&lt;br&gt;Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [kernel-poll:false]&lt;br&gt;&lt;br&gt;Eshell V5.6.5  (abort with ^G)&lt;br&gt;1&amp;gt; c(ej1).&lt;br&gt;{ok,ej1}&lt;br&gt;2&amp;gt; ej1:run(4).&lt;br&gt;Hello world from  of 4&lt;br&gt;Hello world from  of 4&lt;br&gt;Hello world from  of 4&lt;br&gt;Hello world from  of 4&lt;br&gt;ok&lt;br&gt;3&amp;gt;&lt;br&gt;&lt;br&gt;todo en orden, vamos a por el segundo&lt;br&gt;&lt;br&gt;como nota al margen, donde hice el pattern matching de &lt;br&gt;&lt;br&gt;run(Total, Total) -&amp;gt; ok;&lt;br&gt;&lt;br&gt;podria haber hecho &lt;br&gt;&lt;br&gt;run(0, _Total) -&amp;gt; ok;&lt;br&gt;&lt;br&gt;y contar al reves en &lt;br&gt;&lt;br&gt;run(Count + 1, Total).&lt;br&gt;&lt;br&gt;por &lt;br&gt;&lt;br&gt;run(Count - 1, Total).&lt;br&gt;&lt;br&gt;pero me parecio mas simpatico contar para adelante :P</description><guid>http://marianoguerra.org/es/posts/200907resolviendo-ejercicios-de-mpiy-tambien/</guid><pubDate>Sun, 19 Jul 2009 21:56:00 GMT</pubDate></item></channel></rss>