<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Angel "Java" Lopez : High Performance Computing</title><link>http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx</link><description>Tags: High Performance Computing</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Computer Go y Windows HPC Server</title><link>http://msmvps.com/blogs/lopez/archive/2009/02/18/computer-go-y-windows-hpc-server.aspx</link><pubDate>Wed, 18 Feb 2009 08:25:56 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1672802</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1672802</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2009/02/18/computer-go-y-windows-hpc-server.aspx#comments</comments><description>&lt;p&gt;El último año, en el&amp;nbsp;PDC 2008, el equipo de Windows HPC Server presentó un cluster de computadores jugando el juego del Go. Este video muestra la estupenda interfaz Surface que montaron:&lt;/p&gt; &lt;p&gt;(Please visit the site to view this media)&lt;/p&gt; &lt;p&gt;(Si no conocen el juego del Go, visiten:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.gobase.org"&gt;http://www.gobase.org&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hay mucha información sobre el juego y sus reglas. Hay una sección dedicada solamente a&amp;nbsp; Computer Go:&lt;/p&gt; &lt;p&gt;&lt;a title="http://gobase.org/information/computers/" href="http://gobase.org/information/computers/"&gt;http://gobase.org/information/computers/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.smart-games.com/david.html"&gt;David Fotland&lt;/a&gt; es el autor del programa original que se muestra en el video. David es un reconocido programador de computer go. Este es el email de David, explicando este programa y su trato con la gente de Windows HPC Server:&lt;/p&gt; &lt;p&gt;&lt;a title="http://computer-go.org/pipermail/computer-go/2008-November/017025.html" href="http://computer-go.org/pipermail/computer-go/2008-November/017025.html"&gt;http://computer-go.org/pipermail/computer-go/2008-November/017025.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(Esa es LA lista de correo a seguir, si queremos conocer más sobre el ploblema de Computer Go). David programó una solución tipo MonteCarlo, usando MPI y Windows HPC Cluster.&lt;/p&gt; &lt;p&gt;ManyFacesOfGo, el programa de Fotland, ganó el campeonato mundial de computer go, el año pasado, corriendo sobre un Windows HPC&amp;nbsp;Server cluster (&lt;a href="http://www.grappa.univ-lille3.fr/icga/tournament.php?id=181" target="_blank"&gt;ver los resultados&lt;/a&gt;). Nota: el programa que quedó segunda también se ejecutó sobre un cluster. Hay más información sobre el programa (comercial) ManyFacesOfGo en:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.smart-games.com/" href="http://www.smart-games.com/"&gt;http://www.smart-games.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;2008 fue un año lleno de sorpresas en el ámbito de computer go. Actualmente, los programas no pueden ganarle a un profesional o a un amateur fuerte humano, pero algo está cambiando. Pueden leer:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=104&amp;amp;STORY=/www/story/04-09-2008/0004789446&amp;amp;EDATE=" target="_blank"&gt;Latest Advance in Artificial Intelligence: Computer Wins a Game Against a Go Master&lt;/a&gt;&lt;/p&gt; &lt;p&gt;y los últimos avances en la página de Wikipedia sobre Computer Go:&lt;/p&gt; &lt;p&gt;&lt;a title="http://en.wikipedia.org/wiki/Computer_Go" href="http://en.wikipedia.org/wiki/Computer_Go"&gt;http://en.wikipedia.org/wiki/Computer_Go&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Después de décadas de pobres resultados, los programas de computación comienzan a ganar a jugadores humanos, pero hay mucho por mejorar. La complejidad del juego evita el uso puro de métodos de fuerza bruto: pienso que la solución vendrá de una mezcla de fuerza bruta, clustering, Monte Carlo, y métodos más clasicos de planeamiento.&lt;/p&gt; &lt;p&gt;I tengo mi propio programa, &lt;a href="http://www.codeplex.com/ajgo" target="_blank"&gt;AjGo&lt;/a&gt;&amp;nbsp;para explorar algoritmos que puedan usar este juego fascinante, el &amp;quot;hard problem&amp;quot; en Inteligencia Artificial de juegos de tablero. Un&amp;nbsp;ejemplo de formulario de ese programa:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.ajlopez.com/images/articles/ajgomatches.png" alt="" /&gt; &lt;br /&gt;&lt;/p&gt; &lt;p&gt;Posts explicando algo del programa:&lt;/p&gt; &lt;p&gt;&lt;a title="AjGo- hacia un programa que juegue al go" href="http://msmvps.com/blogs/lopez/archive/2008/03/31/ajgo-hacia-un-programa-que-juegue-al-go.aspx"&gt;AjGo- hacia un programa que juegue al go&lt;/a&gt;&lt;br /&gt;&lt;a title="Computer Go y el programa AjGo" href="http://ajlopez.zoomblog.com/archivo/2008/03/31/computer-Go-y-el-programa-Ajgo.html"&gt;Computer Go y el programa AjGo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mantengo una colección de enlaces sobre Computer Go en delicious y en mi sitio personal:&lt;/p&gt; &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/computergo"&gt;http://delicious.com/ajlopez/computergo&lt;/a&gt;&lt;br /&gt;&lt;a title="Computer Go links" href="http://www.ajlopez.net/Tema.php?Id=64"&gt;Computer Go links&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/en"&gt;http://www.ajlopez.com/en&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1672802" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Computer+Go/default.aspx">Computer Go</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Seminario gratuito: Programación Paralela, Programación Distribuida, High Performance Computing</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/29/seminario-gratuito-programaci-243-n-paralela-programaci-243-n-distribuida-high-performance-computing.aspx</link><pubDate>Mon, 29 Dec 2008 08:12:32 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1657959</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1657959</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/29/seminario-gratuito-programaci-243-n-paralela-programaci-243-n-distribuida-high-performance-computing.aspx#comments</comments><description>&lt;p&gt;Desde fines del 2006, estoy trabajando con programación distribuida, usando &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Concurrency+and+Coordination+Runtime/default.aspx" target="_blank"&gt;CCR&lt;/a&gt;/&lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Decentralized+Software+Services/default.aspx" target="_blank"&gt;DSS&lt;/a&gt;, &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Windows+Communication+Foundation/default.aspx" target="_blank"&gt;WCF&lt;/a&gt; y otras tecnologías, como Message Passing Interface. En estas últimas semanas, comencé a trabajar con &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx" target="_blank"&gt;High Performance Computing&lt;/a&gt; Windows HPC Server 2008.&lt;/p&gt; &lt;p&gt;Ahora, en Enero, daremos con &lt;a href="http://blogs.southworks.net/srenzi/"&gt;Sebastián Renzi&lt;/a&gt; &lt;img height="73" alt="" src="http://s3.amazonaws.com/twitter_production/profile_images/58756450/DSC05500xxxx_bigger.jpg" width="73" /&gt;&amp;nbsp;(&lt;a href="http://twitter.com/sebarenzi"&gt;@SebaRenzi&lt;/a&gt;) un seminario gratuito en el &lt;a href="http://www.mug.org.ar/"&gt;Microsoft User Group&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.mug.org.ar/Eventos/3193.aspx" target="_blank"&gt;SEMINARIO GRATUITO &amp;quot;Programación Paralela, Programación Distribuida, High Performance Computing&amp;quot;.&lt;/a&gt;&lt;br /&gt;Thursday, January 15, 2009&lt;br /&gt;Lugar: Auditorio del MUG, Rivadavia 1479 1º A, Ciudad de Buenos Aires.  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mughpc.png" alt="" /&gt;  &lt;p&gt;Ahí está el abstract:  &lt;blockquote&gt; &lt;p&gt;Hay aplicaciones que necesitan procesar gran cantidad de información, o que tienen requerimientos de velocidad exigente. &lt;br /&gt;Exploraremos en la charla algunas tecnologías y estrategías que tenemos disponibles como:&lt;br /&gt;- Programación Paralela: usando múltiples threads, TPL (Task Parallel Library).&lt;br /&gt;- Programación Distribuida: enviando el trabajo a realizar a distintas máquinas, usando WCF o DSS/CCR&lt;br /&gt;- High Performance Computing: ejecutando jobs, tasks, y programas  &lt;p&gt;HPC Server 2008 es el producto de Microsoft que permite armar un cluster de máquinas, pudiendo llegar a tener cientos de nodos. &lt;br /&gt;Es la tendencia actual en supercomputación.  &lt;p&gt;Mostraremos ejemplos de código de cada uno.  &lt;p&gt;Las vacantes son limitadas.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;La idea es explorar algunas ideas de &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/AjMessages/default.aspx" target="_blank"&gt;AjMessages&lt;/a&gt;, &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/Grid+Computing/default.aspx" target="_blank"&gt;grid computing&lt;/a&gt;, Task Parallel Library, MPI, MPI.NET y &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx" target="_blank"&gt;programación HPC&lt;/a&gt;. También mostrar código andando, esperamos poder llevar un cluster virtualizado andando, para mostrarlo en la charla.  &lt;p&gt;Nos leemos!  &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1657959" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/AjMessages/default.aspx">AjMessages</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Grid+Computing/default.aspx">Grid Computing</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Fractales usando MPI.NET y HPC</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/28/fractales-usando-mpi-net-y-hpc.aspx</link><pubDate>Sun, 28 Dec 2008 18:50:34 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1657908</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1657908</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/28/fractales-usando-mpi-net-y-hpc.aspx#comments</comments><description>&lt;p&gt;Actualicé&amp;nbsp;&lt;a href="http://msmvps.com/blogs/lopez/archive/2008/12/19/fractal-revisitado.aspx" target="_blank"&gt;mi ejemplo de fractal&lt;/a&gt; y ahora soporta&amp;nbsp;MPI.NET (Message Passing Interface with .NET) y tasks paramétricas en Windows HPC Server 2008. El ejemplo puede ser bajado desde mi proyecto Google code&amp;nbsp;&lt;a href="http://code.google.com/p/ajcodekatas"&gt;ajcodekatas&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/FractalExample"&gt;http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/FractalExample&lt;/a&gt;  &lt;p&gt;Hay dos soluciones. Esta es la &lt;strong&gt;Fractal.sln&lt;/strong&gt;:  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalsln2.png" alt="" /&gt;  &lt;p&gt;El proyecto &lt;strong&gt;Fractal.Console&lt;/strong&gt; es una aplicación de consola que toma parámetros de la línea de comando. Los usa para generar un sector del fractal, al que serializa binariamente en un archivo:  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:9f9a5df7-0ec4-4ce1-b593-b14e14d4066f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;4&lt;/span&gt;&lt;span style="color:#000000;"&gt;].Equals(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;))
                args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;4&lt;/span&gt;&lt;span style="color:#000000;"&gt;] &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;;

            SectorInfo sectorinfo &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SectorInfo()
            {
                RealMinimum &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToDouble(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                ImgMinimum &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToDouble(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                Delta &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToDouble(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;2&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                FromX &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToInt32(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;3&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                FromY &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToInt32(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;4&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                Width &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToInt32(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;5&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                Height &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToInt32(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;6&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                MaxIterations &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToInt32(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;7&lt;/span&gt;&lt;span style="color:#000000;"&gt;]),
                MaxValue &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Convert.ToInt32(args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;8&lt;/span&gt;&lt;span style="color:#000000;"&gt;])
            };

            Calculator calculator &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; Calculator();

            Sector sector &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; calculator.CalculateSector(sectorinfo);

            SectorSerializer serializer &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; SectorSerializer();

            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; filename &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Format(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;{0}-{1}-{2}-{3}-{4}.bin&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, args[&lt;/span&gt;&lt;span style="color:#000000;"&gt;9&lt;/span&gt;&lt;span style="color:#000000;"&gt;], sectorinfo.FromX, sectorinfo.FromY, sectorinfo.Width, sectorinfo.Height);

            serializer.Serialize(sector, filename);
        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pueden ejecutar el proyecto en modo DebugYou can run the project in Debug mode, con parámetros:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalpar.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Lancen el nuevo proyecto &lt;strong&gt;Fractal.GUIFiles&lt;/strong&gt;. Es una aplicación WinForm, como la que presenté en mi anterior posts, pero con un nuevo botón Read a la derecha:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalfiles.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Con ese botón, pueden seleccionar uno más archivos de sector, como el que generó &lt;strong&gt;Fractal.Console&lt;/strong&gt; en su directorio bin\debug:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalopen.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Este es el resultado:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalsector.png" alt="" /&gt; &lt;/p&gt;
&lt;h3&gt;Creando sectores con HPC&lt;/h3&gt;
&lt;p&gt;La aplicación de consola puede ser usada en un cluster. Supongamos que la aplicación está instalada en el directorio c:\FractalConsole en cada nodo del cluster. Supongamos que el nombre de la máquina head del cluster es HEAD-NODE, y que ahí hay un directorio compartido llamado \shared, que puede ser accedido desde cada nodo. Entones, podemos lanzar un job paramétrico:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;job submit /parametric:0-500:100 c:\FractalConsole\Fractal.Console.exe 0.3 0.3 0.01 0 * 1000 100 2000 4 \\HEAD-NODE\shared\sector&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Este comando envía un trabajo al cluster, pero con un parámetro variable. El asterisco en la lista de parámetros será reemplazado por los valores 0,100,200,300,400 y 500 (en este caso, es la coordinada Y de la esquina superior izquierda de un sector). Cada ejecución producirá un archivo con un sector serializado en el directorio compardio, que podremos leer&amp;nbsp;y mostrar usando la aplicación &lt;strong&gt;Fractal.GUIFiles&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Usando MPI.NET&lt;/h3&gt;
&lt;p&gt;Hay una segunda solución &lt;strong&gt;Fractal.MPI&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalsln3.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Este código usa&amp;nbsp;MPI&amp;nbsp;(Message Passing Interface).&amp;nbsp;El rank 0 recibe los datos de un sector, y&amp;nbsp;lo parte en subsectores, que son enviados a todos los ranks (instancias) de la aplicación. Cada instancia genera un archivo, con la serialización de&amp;nbsp;un subsector del sector original.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Para compilar y ejecutar este ejemplo hay que instalar el HPC Pack que se baja de: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=12887da1-9410-4a59-b903-693116bfd30e&amp;amp;displaylang=en"&gt;HPC Pack 2008 SDK download&lt;/a&gt; 
&lt;p&gt;e instalar el &lt;a href="http://www.osl.iu.edu/research/mpi.net/software/"&gt;MPI.NET Software&lt;/a&gt; 
&lt;p&gt;(Yo instalé&amp;nbsp;&lt;a href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET%20SDK.msi"&gt;MPI.NET SDK.msi&lt;/a&gt;&amp;nbsp;pero también bajé y expandí &lt;a href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET-1.0.0.zip"&gt;MPI.NET-1.0.0.zip&lt;/a&gt;: tiene mejores ejemplos, con soluciones completas para Visual Studio) 
&lt;p&gt;(Nota: si quieren ejecutar el ejemplo bajo XP Pro, deben bajarse NO el HPC Pack, sino la anterior versión:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d8462378-2f68-409d-9cb3-02312bc23bfd&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Compute Cluster Pack SDK&lt;/a&gt; 
&lt;p&gt;El nuevo SDK tiene un problema con XP. Más información en: 
&lt;p&gt;&lt;a title="http://social.microsoft.com/Forums/en-US/windowshpcdevs/thread/19deb181-15c2-40be-bb5e-2d4604b984a4" href="http://social.microsoft.com/Forums/en-US/windowshpcdevs/thread/19deb181-15c2-40be-bb5e-2d4604b984a4"&gt;http://social.microsoft.com/Forums/en-US/windowshpcdevs/thread/19deb181-15c2-40be-bb5e-2d4604b984a4&lt;/a&gt;&lt;br /&gt;&lt;a title="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/32-bit-sdk-for-hpc-server-2008-fails-quot-the-procedure-entry-point-getprocessidofthread-could-not-be-located-quot.aspx" href="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/32-bit-sdk-for-hpc-server-2008-fails-quot-the-procedure-entry-point-getprocessidofthread-could-not-be-located-quot.aspx"&gt;http://www.pluralsight.com/community/blogs/drjoe/archive/2008/10/10/32-bit-sdk-for-hpc-server-2008-fails-quot-the-procedure-entry-point-getprocessidofthread-could-not-be-located-quot.aspx&lt;/a&gt;&lt;br /&gt;) 
&lt;p&gt;Podemos ejecutar el programa usando el utilitario mpiexec, que lanza varias instancias de un mismo programa, conectados como ranks de MPI:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;mpiexec -n 10 Fractal.Mpi.Exe 0 0 0.01 0 0 500 1000 2000 4 sector&lt;/font&gt; 
&lt;p&gt;El sector será producido entonces por 10 instancias, en este caso: 
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/codekatafractalmpi.png" alt="" /&gt; 
&lt;p&gt;que podemos leer y mostrar usando &lt;strong&gt;Fractal.GUIFiles&lt;/strong&gt;. 
&lt;p&gt;Podemos ejecutar el anterior comando en un HPC cluster, usando: 
&lt;p&gt;&lt;font face="Consolas"&gt;job submit /numnodes=10 mpiexec&amp;nbsp;c:\FractalMpi\Fractal.Mpi.Exe 0 0 0.01 0 0 500 1000 2000 4 \\HEAD-NODE\shared\sector&lt;/font&gt; 
&lt;p&gt;(asumiendo que hemos copiado la aplicación en cada nodo, dentro del directorio c:\FractalMpi de cada nodo) 
&lt;p&gt;Para un más completo ejemplo, ver: 
&lt;p&gt;&lt;a href="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/08/18/learning-parallel-programming-from-shared-memory-multi-threading-to-distributed-memory-multi-processing.aspx"&gt;Learning Parallel Programming — from shared-memory multi-threading to distributed-memory multi-processing&lt;/a&gt; 
&lt;p&gt;Nos leemos!
&lt;p&gt;Angel “Java” Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter/ajlopez"&gt;http://twitter/ajlopez&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1657908" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/C+Sharp/default.aspx">C Sharp</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Webcast de desarrollo con Windows HPC Server 2008</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/18/webcast-de-desarrollo-con-windows-hpc-server-2008.aspx</link><pubDate>Thu, 18 Dec 2008 12:28:54 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1657108</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1657108</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/18/webcast-de-desarrollo-con-windows-hpc-server-2008.aspx#comments</comments><description>&lt;p&gt;Mañana viernes estaré dando con &lt;a href="http://blogs.southworks.net/srenzi/" target="_blank"&gt;Sebastián Renzi&lt;/a&gt; &lt;img height="73" alt="" src="http://s3.amazonaws.com/twitter_production/profile_images/58756450/DSC05500xxxx_bigger.jpg" width="73" /&gt;&amp;nbsp;(&lt;a href="http://twitter.com/sebarenzi"&gt;@SebaRenzi&lt;/a&gt;) un nuevo webcast de HPC, esta vez dedicado a la programación de aplicaciones para ese cluster. Pueden registrarse en:&lt;/p&gt; &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032390232&amp;amp;EventCategory=4&amp;amp;culture=es-AR&amp;amp;CountryCode=AR" target="_blank"&gt;Desarrollo de aplicaciones para Windows HPC Server 2008&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/hpcwebcast2.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;(Estaré participando en lugar de Jorge &amp;quot;Chorch&amp;quot; García). Habrá ejemplos de MPI.NET, con código. Estoy adaptando mi ejemplo de Fractal:&lt;/p&gt; &lt;p&gt;&lt;a title="Fractal application revisited" href="http://ajlopez.wordpress.com/2008/12/17/fractal-application-revisited/"&gt;Fractal application revisited&lt;/a&gt;&lt;/p&gt; &lt;p&gt;para que se pueda ejecutar por jobs parametrizados y por MPI.&lt;/p&gt; &lt;p&gt;Enlaces a anteriores webcasts en&lt;/p&gt; &lt;p&gt;&lt;a title="Webcasts de Introducci&amp;oacute;n a High Performance Computing (HPC)" href="http://msmvps.com/blogs/lopez/archive/2008/12/02/webcasts-de-introducci-243-n-a-high-performance-computing-hpc.aspx"&gt;Webcasts de Introducción a High Performance Computing (HPC)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Quedaron grabados, así que si se registran, pueden ver la grabación.&lt;/p&gt; &lt;p&gt;Post relacionados:&lt;/p&gt; &lt;p&gt;&lt;a title="Primeros pasos con MPI.NET" href="http://msmvps.com/blogs/lopez/archive/2008/12/10/primeros-pasos-con-mpi-net.aspx"&gt;Primeros pasos con MPI.NET&lt;/a&gt;&lt;br /&gt;&lt;a title="Realidad aumentada con Windows HPC" href="http://msmvps.com/blogs/lopez/archive/2008/12/02/realidad-aumentada-con-windows-hpc.aspx"&gt;Realidad aumentada con Windows HPC&lt;/a&gt;&lt;br /&gt;&lt;a title="Recursos de Windows High Performance Computing (HPC) y Programaci&amp;oacute;n" href="http://msmvps.com/blogs/lopez/archive/2008/11/08/recursos-de-windows-high-performance-computing-hpc-y-programaci-243-n.aspx"&gt;Recursos de Windows High Performance Computing (HPC) y Programación&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nos leemos!&lt;/p&gt; &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1657108" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Primeros pasos con MPI.NET</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/10/primeros-pasos-con-mpi-net.aspx</link><pubDate>Wed, 10 Dec 2008 09:47:56 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1656369</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1656369</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/10/primeros-pasos-con-mpi-net.aspx#comments</comments><description>&lt;p&gt;En estos días, estoy explorando la programación con MPI, usando la librería MPI.NET implementada sobre el MPI de Microsoft, que puede ser usada en Windows HPC Server 2008.&lt;/p&gt; &lt;p&gt;MPI es el acrónimo de Message Passing Interface, una API que soporta la programación de programas con paralelismo. Una apllicación MPI puede ejecutarse en varias instancias, llamadas &amp;quot;ranks&amp;quot;, y cada instancia puede recibir y enviar mensajes de y a las otras instancias. La API puede ser consumida desde lenguajes como C o Fortran. MPI.NET es un &amp;quot;wrapper&amp;quot; que facilita la escritura de programas MPI usando .NET.&lt;/p&gt; &lt;p&gt;No necesitamos un cluster para ejecutar un programa MPI. Cada programa puede ser probado localmente, lanzando varios ranks como procesos en nuestra máquina local.&lt;/p&gt; &lt;p&gt;Hace unos días, escribí algún código de ejemplo, para probar MPI.NET. Pueden bajarse el código desde mi Skydrive desde &lt;a href="http://cid-9f903f3d6db0c176.skydrive.live.com/self.aspx/Examples/MpiNetFirstExamples.zip" target="_blank"&gt;MpiNetFirstExamples.zip&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Si quieren probar otro camino, hace un tiempo escribí sobre otra implementación de MPI sobre .NET:  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2008/04/15/message-passing-interface-ccr-dss-and-pure-mpinet/"&gt;MPI Message Passing Interface in .NET&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;MPI&lt;/strong&gt;  &lt;p&gt;MPI (Message Passing Interface) está soportada por Windows HPC. Hay una implementación de Microsoft:  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb524831(VS.85).aspx"&gt;Microsoft MPI (Windows)&lt;/a&gt;  &lt;p&gt;que puede ser invocada desde C++.  &lt;p&gt;Hay una implementación .NET sobre Microsoft MPI en:  &lt;p&gt;&lt;a href="http://www.osl.iu.edu/research/mpi.net/"&gt;MPI.NET: High-Performance C# Library for Message Passing&lt;/a&gt;  &lt;p&gt;Contiene el código fuente y ejemplos.  &lt;p&gt;Para escribir y ejecutar los ejemplos de este post, instalé el HPC Pack que encontré en:  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=12887da1-9410-4a59-b903-693116bfd30e&amp;amp;displaylang=en"&gt;HPC Pack 2008 SDK download&lt;/a&gt;  &lt;p&gt;y luego instalé el&amp;nbsp;&lt;a href="http://www.osl.iu.edu/research/mpi.net/software/"&gt;MPI.NET Software&lt;/a&gt;  &lt;p&gt;(Instalé el &lt;a href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET%20SDK.msi"&gt;MPI.NET SDK.msi&lt;/a&gt;&amp;nbsp;pero también expandí el &lt;a href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET-1.0.0.zip"&gt;MPI.NET-1.0.0.zip&lt;/a&gt;: tiene mejores ejemplos, con soluciones VS)  &lt;p&gt;Cuando se instala el HPC Pack 2008 SDK, nos quedan nuevos programas:  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/hpcpackprgs.png" alt="" /&gt;  &lt;p&gt;Y con MPI.NET:  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mpinetprgs.png" alt="" /&gt;  &lt;p&gt;Si expandimos el archivo adicional &lt;a href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET-1.0.0.zip"&gt;MPI.NET-1.0.0.zip&lt;/a&gt;&amp;nbsp;obtenemos un directorio con más ejemplos y documentación:  &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mpinetzip.png" alt="" /&gt;  &lt;p&gt;Más sobre MPI en general:  &lt;p&gt;&lt;a href="http://www.mpi-forum.org/docs/mpi2-report.pdf"&gt;MPI 2.0 Report&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lam-mpi.org/tutorials/"&gt;MPI Tutorials&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Messaging_Passing_Interface"&gt;Microsoft Messaging Passing Interface - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.purempi.net/"&gt;Pure Mpi.NET&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;Hello World&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Como siempre, un &amp;quot;Hello, World&amp;quot; es la primera aplicación a intentar. La solución es:&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mpihellosln.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;El código de &lt;strong&gt;program.cs&lt;/strong&gt; es simple:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:e0ccf164-bde3-4467-958d-27fed6e5887c" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Collections.Generic;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Linq;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Text;

&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;namespace&lt;/span&gt;&lt;span style="color:#000000;"&gt; MpiNetHelloWorld
{
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Program
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; MPI.Environment(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;ref&lt;/span&gt;&lt;span style="color:#000000;"&gt; args))
            {
                Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;I&amp;#39;m {0} of {1}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
                    MPI.Communicator.world.Rank,
                    MPI.Communicator.world.Size);
            }
        }
    }
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Notemos el uso de ref args en la inicialización del MPI.Environment. Un programa MPI recibe argumentos especiales que deben ser procesados y removidos del resto de los argumentos.&lt;/p&gt;
&lt;p&gt;Si lo ejutamos en solitario, obtenemos:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mpihelloalone.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;No muy impresionante.... ;-)&lt;/p&gt;
&lt;p&gt;Podemos invocar un comando&amp;nbsp;mpiexec:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas"&gt;mpiexec -n 8 MpiNetHelloWorld.exe&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;y la salida es:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mpihellon8.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Hay 8 ranks (instancias) ejecutando en la misma máquina. Si tienen un cluster con soporte de MPI (como el&amp;nbsp; Windows HPC Server 2008) podría ejecutar el program en todos los nodos del cluster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ringing con los nodos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En el anterior ejemplo, no hay comunicaciones entre los nodos. Un clásico ejemplo es enviar mensajes en un anillo, desde el rank 0 al 1 al 2, y al final, volver al 0. Esta es la solución:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.todocontenidos.com/images/articles/mpiringsln.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;El código de &lt;strong&gt;program.cs&lt;/strong&gt; es:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:b4a3571e-d120-4e87-ba77-1ea21ea94bab" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Program
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; (MPI.Environment environment &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; MPI.Environment(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;ref&lt;/span&gt;&lt;span style="color:#000000;"&gt; args))
            {
                Intracommunicator comm &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; MPI.Communicator.world;

                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (comm.Size &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;2&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                {
                    Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;At least two processes are needed&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
                }

                Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;I&amp;#39;m {0} of {1}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;,
                    MPI.Communicator.world.Rank,
                    MPI.Communicator.world.Size);

                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;) &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; It&amp;#39;s the root&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;                {
                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; sendmessage &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Format(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Hello from {0} to {1}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, comm.Rank, comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;);

                    comm.Send(sendmessage, comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;);

                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; recmessage;

                    comm.Receive&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(comm.Size &lt;/span&gt;&lt;span style="color:#000000;"&gt;-&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;out&lt;/span&gt;&lt;span style="color:#000000;"&gt; recmessage);

                    Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Received: {0}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, recmessage);
                }
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt;
                {
                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; recmessage;

                    comm.Receive&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;-&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;out&lt;/span&gt;&lt;span style="color:#000000;"&gt; recmessage);

                    Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Received: {0}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, recmessage);

                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; sendmessage &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Format(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Hello from {0} to {1}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, comm.Rank, (comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;) &lt;/span&gt;&lt;span style="color:#000000;"&gt;%&lt;/span&gt;&lt;span style="color:#000000;"&gt; comm.Size);

                    comm.Send(sendmessage, (comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;) &lt;/span&gt;&lt;span style="color:#000000;"&gt;%&lt;/span&gt;&lt;span style="color:#000000;"&gt; comm.Size, &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                }
            }
        }
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dispersando mensajes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Este es otro ejemplo (la solución MpiNetScatter), donde un arreglo de enteros es enviado a todos los ranks, un entero a cada uno, desde el rank 0:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:0408a39d-f78e-4acf-80b1-78edf478444e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Program
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; (MPI.Environment environment &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; MPI.Environment(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;ref&lt;/span&gt;&lt;span style="color:#000000;"&gt; args))
            {
                Intracommunicator comm &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Communicator.world;

                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (comm.Rank &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                {
                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; [] numbers &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;[comm.Size];

                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; k &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;; k &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; numbers.Length; k&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                        numbers[k] &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; k &lt;/span&gt;&lt;span style="color:#000000;"&gt;*&lt;/span&gt;&lt;span style="color:#000000;"&gt; k;

                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; r &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; comm.Scatter(numbers);

                    Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Received {0} at {1}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, r, comm.Rank);
                }
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;else&lt;/span&gt;&lt;span style="color:#000000;"&gt;
                {
                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; r &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; comm.Scatter&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                    Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Received {0} at {1}&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, r, comm.Rank);
                }
            }
        }
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Threads y MPI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Podemos mejorar el ejemplo de anillo, usando una nueva característica de MPI2, soportada por la implementación de Microsoft: enviar y recibir mensajes usando múltiples threads. La solución es &lt;strong&gt;MpiNetMultiThreadRing&lt;/strong&gt;. El código:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d08b59a7-b181-4bb5-9f2e-320aedf27347" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Program
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] args)
        {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; (MPI.Environment environment &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; MPI.Environment(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;ref&lt;/span&gt;&lt;span style="color:#000000;"&gt; args)) 
            {
                Intracommunicator comm &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; MPI.Communicator.world;

                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (comm.Size &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;2&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                {
                    Console.WriteLine(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;At least two processes are needed&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
                }

                MultiComm multicomm &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; MultiComm(MPI.Communicator.world);

                Thread thread &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; Thread(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; ThreadStart(multicomm.Run));

                thread.Start();

                MultiComm multicomm2 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; MultiComm(MPI.Communicator.world);

                Thread thread2 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; Thread(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; ThreadStart(multicomm2.Run));

                thread2.Start();

                thread.Join();
                thread2.Join();
            }
        }
    }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Escribí una clase ayudante, MultiComm, que tiene métodos para enviar y recibir mensajes. Usa un lock: la implementación MPI no soporta el uso de comandos MPI, desde más de un thread en simultáneo. Entonces, tuve que sincronizar los métodos de acceso a MPI desde diferentes threads. Es un incordio, pero es lo que está soportado (no sé si hay una implementación de MPI2CH que soporte un nivel de multithreads libres).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusiones&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MPI implica una nueva manera de pensar aplicaciones. No hay un camino fácil para convertir a MPI un algoritmos o aplicación. Podría jugar un poco más con el pasaje de mensajes de forma asincrónica. En los ejemplos de este post, cuando una instancia envia un mensaje, las otras partes deben estar escuchando para recibir el mensaje. Dejando sus idiosincracias, MPI es un interesante campo para explorar, con una amplia comunidad que hay producido interesantes aplicaciones.&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1656369" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/HPC/default.aspx">HPC</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Webcasts de Introducción a High Performance Computing (HPC)</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/02/webcasts-de-introducci-243-n-a-high-performance-computing-hpc.aspx</link><pubDate>Tue, 02 Dec 2008 13:03:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655552</guid><dc:creator>lopez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1655552</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/02/webcasts-de-introducci-243-n-a-high-performance-computing-hpc.aspx#comments</comments><description>&lt;p&gt;Me confirmaron el webcast que junto con &lt;a href="http://blogs.southworks.net/srenzi/"&gt;Sebasti&amp;aacute;n Renzi&lt;/a&gt; &lt;img width="73" src="http://s3.amazonaws.com/twitter_production/profile_images/58756450/DSC05500xxxx_bigger.jpg" height="73" alt="" /&gt;&amp;nbsp;(&lt;a href="http://twitter.com/sebarenzi"&gt;@SebaRenzi&lt;/a&gt;) vamos a dar hoy sobre el tema de HPC y Windows HPC Server 2008&lt;/p&gt;
&lt;p&gt;&lt;span id="lblEventTitle"&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032390223&amp;amp;EventCategory=4&amp;amp;culture=es-AR&amp;amp;CountryCode=AR"&gt;HPC 2008: Introducci&amp;oacute;n&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img width="622" src="http://blogs.southworks.net/srenzi/files/2008/12/image-thumb1.png" height="313" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Resumen del tema:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;El termino HPC (High Performance Computing) se refiere a la necesidad de contar con gran potencia de computo para la resoluci&amp;oacute;n de problemas. Con el avance de la tecnolog&amp;iacute;a y el abaratamiento de los costos en hardware, hoy en d&amp;iacute;a no es necesario contar con una supercomputadora e invertir grandes cantidades de dinero para obtener gran poder de computo. A partir de la aparici&amp;oacute;n de &amp;quot;clusters&amp;quot;, conformados por m&amp;aacute;quinas convencionales, podemos explotar al m&amp;aacute;ximo la capacidad de c&amp;aacute;lculo de cada una de ellas mediante la utilizaci&amp;oacute;n de Windows HPC Server 2008. En esta oportunidad veremos una introducci&amp;oacute;n al tema de HPC, conjuntamente con las principales caracter&amp;iacute;sticas de Windows HPC Server 2008.&lt;/p&gt;
&lt;p&gt;&lt;img width="244" src="http://blogs.southworks.net/srenzi/files/2008/12/image-thumb.png" height="52" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Otros webcast que se vienen sobre el tema, preparados por el equipo en el que estoy trabajando sobre el tema:&lt;/p&gt;
&lt;p&gt;
&lt;table cellpadding="0" cellspacing="0" style="padding-right:4px;padding-left:0px;padding-bottom:0px;padding-top:4px;" id="eventsTable" class="normal"&gt;

&lt;tr id="1032390230"&gt;
&lt;td style="margin-top:5px;vertical-align:middle;"&gt;
&lt;table cellpadding="0" cellspacing="0" style="font-size:100%;height:25px;"&gt;

&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032390230&amp;amp;culture=es-AR"&gt;&lt;span style="background-color:yellow;"&gt;&lt;/span&gt;HPC 2008: Instalaci&amp;oacute;n y Despliegue (Antes: Revisi&amp;oacute;n Avanzada: Windows HPC Server 2008 (anteriomente Windows Compute Cluster Server 2003))&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style="padding-right:25px;padding-left:25px;padding-bottom:0px;padding-top:4px;"&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;div style="padding-top:5px;" id="descr1"&gt;&lt;span style="background-color:yellow;"&gt;&lt;/span&gt;Con Windows HPC Server 2008, tenemos a nuestra disposici&amp;oacute;n el poder de una supercomputadora: podemos armar un &amp;quot;cluster&amp;quot; de m&amp;aacute;quinas para ejecutar trabajos en paralelo, de forma de poder aumentar el poder de c&amp;aacute;lculo con solo agregar m&amp;aacute;s m&amp;aacute;quinas en e&lt;span style="display:none;"&gt;&lt;span style="background-color:yellow;"&gt;&lt;/span&gt;l sistema.&lt;/span&gt; &amp;nbsp;&lt;a title="Haga clic aqu&amp;iacute; para ver m&amp;aacute;s"&gt;...&lt;/a&gt;&lt;/div&gt;
&lt;div style="color:gray;padding-top:5px;" id="date1"&gt;03/12/2008 10:00 a.m. Bogot&amp;aacute;- 03/12/2008 11:00 a.m. | Duraci&amp;oacute;n:60 Minutos&lt;/div&gt;
&lt;div style="padding-top:4px;" id="lang1"&gt;&lt;strong&gt;Idioma principal: &amp;nbsp; &lt;/strong&gt;Espa&amp;ntilde;ol&lt;/div&gt;
&lt;div style="padding-top:4px;" id="aud1"&gt;&lt;strong&gt;Audiencia objetivo: &amp;nbsp; &lt;/strong&gt;Profesional de IT&lt;/div&gt;
&lt;div style="padding-top:4px;" id="presenter1"&gt;&lt;strong&gt;Nombre del moderador: &amp;nbsp; &lt;/strong&gt;Ezequiel Bella,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Maximiliano D&amp;eacute;boli&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table cellpadding="0" cellspacing="0" style="font-size:100%;height:25px;"&gt;

&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032390234&amp;amp;culture=es-AR"&gt;&lt;span style="background-color:yellow;"&gt;&lt;/span&gt;HPC 2008: Ejecuci&amp;oacute;n y Administraci&amp;oacute;n (Antes: Sea cintur&amp;oacute;n negro en optimizaci&amp;oacute;n de Aplicaciones de Alto Rendimiento para Windows HPC Server 2008)&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td style="padding-right:25px;padding-left:25px;padding-bottom:0px;padding-top:4px;"&gt;&lt;span style="margin:0px 0px 0px 5px;" id="bkmkspan1032390234"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;/p&gt;
&lt;div style="padding-top:5px;" id="descr10"&gt;&lt;span style="background-color:yellow;"&gt;&lt;/span&gt;Con Windows HPC Server 2008, tenemos a nuestra disposici&amp;oacute;n el poder de una supercomputadora: podemos armar un &amp;quot;cluster&amp;quot; de m&amp;aacute;quinas para ejecutar trabajos en paralelo, de forma de poder aumentar el poder de c&amp;aacute;lculo con solo agregar m&amp;aacute;s m&amp;aacute;quinas &lt;span style="display:none;"&gt;&lt;span style="background-color:yellow;"&gt;&lt;/span&gt;en el sistema.&lt;/span&gt; &amp;nbsp;&lt;a title="Haga clic aqu&amp;iacute; para ver m&amp;aacute;s"&gt;...&lt;/a&gt;&lt;/div&gt;
&lt;div style="color:gray;padding-top:5px;" id="date10"&gt;04/12/2008 03:30 p.m. Bogot&amp;aacute;- 04/12/2008 04:30 p.m. | Duraci&amp;oacute;n:60 Minutos&lt;/div&gt;
&lt;div style="padding-top:4px;" id="lang10"&gt;&lt;strong&gt;Idioma principal: &amp;nbsp; &lt;/strong&gt;Espa&amp;ntilde;ol&lt;/div&gt;
&lt;div style="padding-top:4px;" id="aud10"&gt;&lt;strong&gt;Audiencia objetivo: &amp;nbsp; &lt;/strong&gt;Profesional de IT&lt;/div&gt;
&lt;div style="padding-top:4px;" id="presenter10"&gt;&lt;strong&gt;Nombre del moderador: &amp;nbsp; &lt;/strong&gt;Jorge Andr&amp;eacute;s Garcia,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Maximiliano D&amp;eacute;boli&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655552" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/HPC/default.aspx">HPC</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Realidad aumentada con Windows HPC</title><link>http://msmvps.com/blogs/lopez/archive/2008/12/02/realidad-aumentada-con-windows-hpc.aspx</link><pubDate>Tue, 02 Dec 2008 04:26:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655542</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1655542</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/12/02/realidad-aumentada-con-windows-hpc.aspx#comments</comments><description>&lt;p&gt;En estos d&amp;iacute;as estoy trabajando con Windows High Performance Computing Server 2008. Investigando sobre el tema en la red (en especial en Twitter), encuentro esta demostraci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JksDWFQwOOM"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JksDWFQwOOM" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WEfr9WmCtgg"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/WEfr9WmCtgg" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Es un trabajo de la gente del &lt;a target="_blank" href="http://www.hlrs.de/research/"&gt;High Performance Computing Center de Stuttgart&lt;/a&gt; (HLRS)&lt;/p&gt;
&lt;p&gt;Se llama realidad aumentada a un tipo de realidad virtual que combina im&amp;aacute;genes reales e imaginarias. Por ejemplo, usando un &amp;quot;headset&amp;quot; transparente podr&amp;iacute;amos ver c&amp;oacute;mo una mesa se ver&amp;iacute;a en nuestra sala, o ver un esquema en 3D de un motor mientras lo estamos reparando. La gente de HLRS est&amp;aacute; trabajando con el Microsoft Technical Computing Initiative en cosas como &lt;a href="http://www.hlrs.de/organization/vis/projects/mstci/" title="Augmented Reality in the automotive industry"&gt;Augmented Reality in the automotive industry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="240" src="http://www.hlrs.de/organization/vis/projects/mstci/sc07.jpg" height="174" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Pueden ver algunas fotos de las instalaciones que tienen en&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hlrs-ic.spaces.live.com/" title="Microsoft HPC Institute - HLRS - University of Stuttgart"&gt;Microsoft HPC Institute - HLRS - University of Stuttgart&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.hlrs.de/people/becker/visent/left.JPG" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Igualito al hardware que tengo en mi casa.... :-)&lt;/p&gt;
&lt;p&gt;Encontr&amp;eacute; estos videos en&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sltalk.de/index.php/2008/12/01/augmented-reality-mit-windows-hpc/"&gt;Augmented Reality mit Windows HPC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hay m&amp;aacute;s videos sobre HPC, y depuraci&amp;oacute;n MPI, en&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.youtube.com/results?search_query=HLRS&amp;amp;search=tag"&gt;HLRS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Algo m&amp;aacute;s de informaci&amp;oacute;n sobre Augmented Reality&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.hpcwire.com/blogs/27626804.html"&gt;What Is the Metaverse and Should HPC Care?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Augmented_reality" title="Augmented reality - Wikipedia, the free encyclopedia"&gt;Augmented reality - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Mixed_reality" title="Mixed reality - Wikipedia, the free encyclopedia"&gt;Mixed reality - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.augmented-reality.org/iwar/"&gt;International Symposium on Mixed and Augmented Reality (ISMAR)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.augmented.org/"&gt;&lt;/a&gt;&lt;a href="http://www.augmented.org/"&gt;&lt;/a&gt;&lt;a href="http://www.augmented.org/" title="http://www.augmented.org/"&gt;http://www.augmented.org/&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.howstuffworks.com/augmented-reality.htm"&gt;How Augmented Reality Will Work&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Llegaremos a tener nuestro &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Holodeck"&gt;Holodek&lt;/a&gt;? &lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com/"&gt;http://www.ajlopez.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655542" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Grid+Computing/default.aspx">Grid Computing</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Video/default.aspx">Video</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item><item><title>Recursos de Windows High Performance Computing (HPC) y Programación</title><link>http://msmvps.com/blogs/lopez/archive/2008/11/08/recursos-de-windows-high-performance-computing-hpc-y-programaci-243-n.aspx</link><pubDate>Sat, 08 Nov 2008 13:44:43 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1653506</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1653506</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2008/11/08/recursos-de-windows-high-performance-computing-hpc-y-programaci-243-n.aspx#comments</comments><description>&lt;p&gt;Desde el último año, estuve investigando sobre computación distribuida y en grilla. Encontré bastantes recursos útiles, información, que fui agregando a mi delicious. Uno de los tópicos que encontré es la implementación de Microsoft de High Performance Computing (HPC). Este post es una lista de los recursos más relevantes que estoy usando.&lt;/p&gt; &lt;p&gt;Primero, hay que ver la página de&amp;nbsp;Windows HPC Server 2008:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/hpc"&gt;http://www.microsoft.com/hpc&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="margin:0px 20px 20px 0px;" src="http://www.todocontenidos.com/images/articles/hpcppt01.png" align="left" alt="" /&gt;El primer video para mirar es el de último PDC 2008, la sesión de HPC:&lt;/p&gt; &lt;p&gt;HPC Session at last PDC&lt;br /&gt;&lt;a href="http://channel9.msdn.com/pdc2008/ES13/"&gt;http://channel9.msdn.com/pdc2008/ES13/&lt;/a&gt;  &lt;p&gt;Excelente presentación, cubriendo el nuevo Windows HPC Server 2008, nodos, tareas, trabajos, herramientas de programación, formas de programar, programación MPI (Message Passing Interface) y MPI.NET, computer go en HPC (hermosa idea, jugar al go en cluster), toda la presentación merece un post aparte.  &lt;p&gt;Me gustó también un video corto pero interesante, que muestra la consola de administración en:  &lt;p&gt;&lt;a href="http://channel9.msdn.com/shows/The+HPC+Show/Five-Minute-Intro-to-the-HPC-Server-2008-Management-Console/"&gt;http://channel9.msdn.com/shows/The+HPC+Show/Five-Minute-Intro-to-the-HPC-Server-2008-Management-Console/&lt;/a&gt;  &lt;p&gt;EL blog a leer es &lt;a href="http://blogs.msdn.com/hpctrekker/"&gt;Windows HPC survival guide&lt;/a&gt;  &lt;p&gt;Un post como ejemplo: &lt;a href="http://blogs.msdn.com/hpctrekker/archive/2008/09/22/no-scientist-left-behind-with-cray-supercomputer-running-windows-hpc-server-2008.aspx"&gt;No scientist left behind with CRAY Supercomputer running Windows HPC Server 2008&lt;/a&gt;  &lt;p&gt;Hay una colección de recursos en &lt;a href="http://resourcekit.windowshpc.net/Default.html"&gt;HPC Resource Kit&lt;/a&gt;  &lt;p&gt;Todos los videos de HPC:  &lt;p&gt;&lt;a href="http://channel9.msdn.com/tags/HPC/"&gt;HPC | Tags | Channel 9&lt;/a&gt;  &lt;p&gt;(tópicos interesantes: WCF y programación&amp;nbsp;HPC, HPC Basic Profile: servicios web para invocar desde Java y otros lenguajes)  &lt;p&gt;Hay un sitio de comunidad dedicado a Windows HPC:  &lt;p&gt;&lt;a title="http://www.windowshpc.net/" href="http://www.windowshpc.net/"&gt;http://www.windowshpc.net/&lt;/a&gt;  &lt;p&gt;con archivos, recursos, código fuente y ejemplos.&amp;nbsp;  &lt;h3&gt;Software para usar&lt;/h3&gt; &lt;p&gt;Para iniciarse en la programación para&amp;nbsp;HPC, hay que instalar &lt;a href="http://msdn.microsoft.com/en-us/library/cc853440(VS.85).aspx"&gt;Microsoft HPC Pack (Windows)&lt;/a&gt;. Lo bajé desde:  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=12887da1-9410-4a59-b903-693116bfd30e&amp;amp;displaylang=en" target="_blank"&gt;HPC Pack 2008 SDK download&lt;/a&gt;  &lt;p&gt;(no hace falta un HPC Server para los primeros pasos)  &lt;p&gt;Luego, instalé &lt;a href="http://www.osl.iu.edu/research/mpi.net/software/" target="_blank"&gt;MPI.NET Software&lt;/a&gt;  &lt;p&gt;(Instalé el &lt;a title="MPI.NET SDK.msi" href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET%20SDK.msi"&gt;MPI.NET SDK.msi&lt;/a&gt;&amp;nbsp;pero también expandí el &lt;a title="MPI.NET-1.0.0.zip" href="http://www.osl.iu.edu/research/mpi.net/files/1.0.0/MPI.NET-1.0.0.zip"&gt;MPI.NET-1.0.0.zip&lt;/a&gt;: éste tiene mejores ejemplos, ya armados como soluciones de Visual Studio)  &lt;p&gt;Un excelente tutorial, sobre programación secuencial, en paralelo, y luego usando HPC 2008, en:  &lt;p&gt;&lt;a title="Learning Parallel Programming --- from shared-memory multi-threading to" href="http://www.pluralsight.com/community/blogs/drjoe/archive/2008/08/18/learning-parallel-programming-from-shared-memory-multi-threading-to-distributed-memory-multi-processing.aspx"&gt;Learning Parallel Programming --- from shared-memory multi-threading to distributed-memory multi-processing&lt;/a&gt;  &lt;h3&gt;Enlaces adicionales&lt;/h3&gt; &lt;p&gt;Si quieren explorar las posibilidades de programación de HPC, hay algunos temas a investigar:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;HPC&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hpccommunity.org/"&gt;http://www.hpccommunity.org/&lt;/a&gt;&amp;nbsp;Comunidad HPC&lt;br /&gt;&lt;a title="http://www.hpcwire.com/" href="http://www.hpcwire.com/"&gt;http://www.hpcwire.com/&lt;/a&gt;&amp;nbsp;High Productivity Computing&lt;br /&gt;&lt;a href="http://www.ddj.com/hpc-high-performance-computing/"&gt;http://www.ddj.com/hpc-high-performance-computing/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=zTIKUxO9kf4&amp;amp;feature=user"&gt;YouTube - An Overview of High Performance Computing and Challenges for the Future&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/High-performance_computing"&gt;http://en.wikipedia.org/wiki/High-performance_computing&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;MPI&lt;/strong&gt;  &lt;p&gt;MPI (Message Passing Interface) está soportado en Windows HPC. Hay una implementación de Microsoft:  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb524831(VS.85).aspx"&gt;Microsoft MPI (Windows)&lt;/a&gt;  &lt;p&gt;que puede ser invocada desde C++.  &lt;p&gt;Hay una implementacíón&amp;nbsp;.NET sobre esa de&amp;nbsp;Microsoft MPI:  &lt;p&gt;&lt;a href="http://www.osl.iu.edu/research/mpi.net/"&gt;MPI.NET: High-Performance C# Library for Message Passing&lt;/a&gt;  &lt;p&gt;Tiene código fuente de ejemplo.  &lt;p&gt;(una anterior implementación en Codeplex:&amp;nbsp; &lt;a href="http://www.codeplex.com/mpinet"&gt;MPI .Net - Home&lt;/a&gt;)  &lt;p&gt;Ya había escrito sobre otra implementación en .NET:  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/2008/04/15/message-passing-interface-ccr-dss-and-pure-mpinet/" target="_blank"&gt;MPI Message Passing Interface in .NET&lt;/a&gt;  &lt;p&gt;Más sobre&amp;nbsp;MPI  &lt;p&gt;&lt;a href="http://www.mpi-forum.org/docs/mpi2-report.pdf"&gt;MPI 2.0 Report&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lam-mpi.org/tutorials/"&gt;MPI Tutorials&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Messaging_Passing_Interface"&gt;Microsoft Messaging Passing Interface - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.purempi.net/"&gt;Pure Mpi.NET&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;Programación en paralelo&lt;/strong&gt;  &lt;p&gt;&lt;a href="https://computing.llnl.gov/tutorials/parallel_comp/" target="_blank"&gt;Introduction to Parallel Computing&lt;/a&gt; introducción muy completa (gracias a&amp;nbsp;&lt;a href="http://blogs.southworks.net/jgarcia/" target="_blank"&gt;jgarcia&lt;/a&gt;&amp;nbsp;por el enlace)&lt;br /&gt;&lt;a href="http://research.microsoft.com/aboutmsr/labs/asia/innovationday_2008/ScienceFair.aspx"&gt;Microsoft Innovation Day - November 5, 2006&lt;/a&gt; están presentando algo relacionado con DryadLINQ&lt;br /&gt;&lt;a href="http://thevalerios.net/matt/2008/06/multithreading-and-concurrency-in-net/"&gt;Multithreading and Concurrency in .NET&lt;/a&gt;&amp;nbsp;una lista completa de tecnologías disponibles en .NET&lt;br /&gt;&lt;a title="http://www.microsoft.com/ccrdss" href="http://www.microsoft.com/ccrdss"&gt;http://www.microsoft.com/ccrdss&lt;/a&gt;&amp;nbsp;Ahora, CCR/DSS como paquete separado (antes venían sólo en Microsoft Robotics) &lt;br /&gt;&lt;a href="http://safari.adobepress.com/9780321603944"&gt;Adobe Press - 9780321603944 - Software Pipelines: The Key to Capitalizing on the Multi-core Revolution&lt;/a&gt;&lt;br /&gt;&lt;a href="http://channel9.msdn.com/shows/Going+Deep/Burton-Smith-On-General-Purpose-Super-Computing-and-the-History-and-Future-of-Parallelism/"&gt;Burton Smith: On General Purpose Super Computing and the History and Future of Parallelism | Going Deep | Channel 9&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hadoop.apache.org/core/"&gt;Welcome to Hadoop!&lt;/a&gt;&lt;br /&gt;&lt;a href="http://research.microsoft.com/research/sv/dryad/"&gt;Dryad - Home&lt;/a&gt;&amp;nbsp;Un interesante proyecto de&amp;nbsp;Microsoft research&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=WPhE5JCP2Ak"&gt;YouTube - Dryad: A general-purpose distributed execution platform&lt;/a&gt;&amp;nbsp;Presentación en Google Talks&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163744.aspx"&gt;Concurrency: What Every Dev Must Know About Multithreaded Apps&lt;/a&gt;&lt;br /&gt;&lt;a href="http://igoro.com/archive/overview-of-concurrency-in-net-framework-35/"&gt;Overview of concurrency in .NET Framework 3.5 | Igor Ostrovsky Blogging&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/pfxteam/default.aspx"&gt;Parallel Programming with .NET&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx"&gt;Parallel Computing Developer Center&lt;/a&gt; de Microsoft&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Parallel_Virtual_Machine"&gt;Parallel Virtual Machine - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx&lt;/a&gt; Parallel LINQ  &lt;p&gt;&lt;strong&gt;Map Reduce&lt;/strong&gt;&lt;/p&gt;&lt;a href="http://www.michael-noll.com/wiki/Writing_An_Hadoop_MapReduce_Program_In_Python"&gt;Writing An Hadoop MapReduce Program In Python&lt;/a&gt;&lt;br /&gt;&lt;a href="http://research.microsoft.com/research/sv/dryad/eurosys07.pdf"&gt;Dryad: Distributed Data-Parallel Programs from Sequential Building Blocks&lt;/a&gt;&lt;br /&gt;&lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;Google Research Publication: MapReduce&lt;/a&gt;&lt;br /&gt; &lt;p&gt;&lt;strong&gt;Delicious&lt;/strong&gt;  &lt;p&gt;En mis enlaces en delicious sobre&amp;nbsp;HPC, MPI, Parallel programming, Grid Computing, algoritmos Map Reduce, CCR/DSS:  &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/hpc"&gt;http://delicious.com/ajlopez/hpc&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/mpi"&gt;http://delicious.com/ajlopez/mpi&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/parallel"&gt;http://delicious.com/ajlopez/parallel&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/gridcomputing"&gt;http://delicious.com/ajlopez/gridcomputing&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/mapreduce"&gt;http://delicious.com/ajlopez/mapreduce&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/ccr"&gt;http://delicious.com/ajlopez/ccr&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delicious.com/ajlopez/dss"&gt;http://delicious.com/ajlopez/dss&lt;/a&gt;  &lt;p&gt;En el PDC 2008, Windows HPC fue mostrado con un ejemplo de Computer Go, el programa campeón del mundo ManyFacesOfGo&amp;nbsp;(&lt;a href="http://www.smart-games.com"&gt;http://www.smart-games.com&lt;/a&gt;) . Computer Go es un tópico fascinante:  &lt;p&gt;&lt;a href="http://delicious.com/ajlopez/computergo"&gt;http://delicious.com/ajlopez/computergo&lt;/a&gt;  &lt;p&gt;Angel &amp;quot;Java&amp;quot; Lopez&lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1653506" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Grid+Computing/default.aspx">Grid Computing</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/HPC/default.aspx">HPC</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/High+Performance+Computing/default.aspx">High Performance Computing</category></item></channel></rss>