<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://mars.merhot.dk/w/index.php?action=history&amp;feed=atom&amp;title=CoE_Cluster_november_2011%2FMPI</id>
		<title>CoE Cluster november 2011/MPI - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://mars.merhot.dk/w/index.php?action=history&amp;feed=atom&amp;title=CoE_Cluster_november_2011%2FMPI"/>
		<link rel="alternate" type="text/html" href="http://mars.merhot.dk/w/index.php?title=CoE_Cluster_november_2011/MPI&amp;action=history"/>
		<updated>2026-05-20T21:35:50Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>http://mars.merhot.dk/w/index.php?title=CoE_Cluster_november_2011/MPI&amp;diff=20515&amp;oldid=prev</id>
		<title>Pasa: Created page with &quot;=Programmering med MPI= http://www.lam-mpi.org/tutorials/one-step/ezstart.php ==Geany IDE== Der findes et IDE man kan tilrette til cluster kompilering og eksekvering kaldet geany...&quot;</title>
		<link rel="alternate" type="text/html" href="http://mars.merhot.dk/w/index.php?title=CoE_Cluster_november_2011/MPI&amp;diff=20515&amp;oldid=prev"/>
				<updated>2011-12-09T09:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;=Programmering med MPI= http://www.lam-mpi.org/tutorials/one-step/ezstart.php ==Geany IDE== Der findes et IDE man kan tilrette til cluster kompilering og eksekvering kaldet geany...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Programmering med MPI=&lt;br /&gt;
http://www.lam-mpi.org/tutorials/one-step/ezstart.php&lt;br /&gt;
==Geany IDE==&lt;br /&gt;
Der findes et IDE man kan tilrette til cluster kompilering og eksekvering kaldet geany.&lt;br /&gt;
Installation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aptitude install geany&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For at kompilere det med mpicc og eksekvere med mpiexec skal man lige rette lidt til under &amp;quot;Build &amp;gt; Set Includes and Arguments&amp;quot;.&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:Geany IDE.jpg|800px|left|thumb|Geany IDE]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;pre&amp;gt;mpicc -Wall &amp;quot;%f&amp;quot; -o &amp;quot;%e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mpiexec -n 20 -hostfile ~/mpd.hosts &amp;quot;%e&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Og til C++ bruger man mpic++ -Wall &amp;quot;%f&amp;quot; -o &amp;quot;%e&amp;quot;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Programmet man skriver skal selvfølgelig ligge i /var/mirror for de andre noder også har adgang til det.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Og den kan man selvfølgelig X'e over med&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
env DISPLAY=172.16.4.105:1 geany&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hello World eksempel==&lt;br /&gt;
HelloWorld program&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;quot;mpi.h&amp;quot;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char *argv[] )&lt;br /&gt;
{&lt;br /&gt;
        int rank, size, namelen;&lt;br /&gt;
        char processor_name[MPI_MAX_PROCESSOR_NAME];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        MPI_Init( &amp;amp;argc, &amp;amp;argv );&lt;br /&gt;
&lt;br /&gt;
        MPI_Get_processor_name( processor_name, &amp;amp;namelen );&lt;br /&gt;
        MPI_Comm_rank( MPI_COMM_WORLD, &amp;amp;rank );&lt;br /&gt;
        MPI_Comm_size( MPI_COMM_WORLD, &amp;amp;size );&lt;br /&gt;
        printf( &amp;quot;Hello World from process %d, of %d on %s\n&amp;quot;, rank, size, processor_name );&lt;br /&gt;
        MPI_Finalize();&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Compile det med&lt;br /&gt;
&amp;lt;pre&amp;gt; mpicxx -o helloWorld helloWorld.c&amp;lt;/pre&amp;gt;&lt;br /&gt;
og kør det med&lt;br /&gt;
&amp;lt;pre&amp;gt;mpiexec -n 10 /var/mirror/helloWorld&amp;lt;/pre&amp;gt;&lt;br /&gt;
Resultatet skulle gerne blive&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello World from process 2, of 10 on C05&lt;br /&gt;
Hello World from process 6, of 10 on C05&lt;br /&gt;
Hello World from process 3, of 10 on C06&lt;br /&gt;
Hello World from process 1, of 10 on C04&lt;br /&gt;
Hello World from process 5, of 10 on C04&lt;br /&gt;
Hello World from process 7, of 10 on C06&lt;br /&gt;
Hello World from process 9, of 10 on C04&lt;br /&gt;
Hello World from process 0, of 10 on C01&lt;br /&gt;
Hello World from process 4, of 10 on C01&lt;br /&gt;
Hello World from process 8, of 10 on C01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Hello World med MPI==&lt;br /&gt;
Det forrige eksempel brugte ikke rigtig MPI til noget, ud over at få rank og size.&amp;lt;br/&amp;gt;&lt;br /&gt;
Hvis vi skal lave det om til at rank 0 er den der printer til skærmen og alle de andre sender via MPI til den, ville det se sådan ud:&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;quot;mpi.h&amp;quot;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char *argv[] )&lt;br /&gt;
{&lt;br /&gt;
        int rank, size, namelen, i;&lt;br /&gt;
        char processor_name[MPI_MAX_PROCESSOR_NAME];&lt;br /&gt;
        char greeting[MPI_MAX_PROCESSOR_NAME + 100];&lt;br /&gt;
        MPI_Status status;&lt;br /&gt;
&lt;br /&gt;
        MPI_Init( &amp;amp;argc, &amp;amp;argv );&lt;br /&gt;
&lt;br /&gt;
        MPI_Get_processor_name( processor_name, &amp;amp;namelen );&lt;br /&gt;
        MPI_Comm_rank( MPI_COMM_WORLD, &amp;amp;rank );&lt;br /&gt;
        MPI_Comm_size( MPI_COMM_WORLD, &amp;amp;size );&lt;br /&gt;
        sprintf( greeting,  &amp;quot;Hello World from process %d, of %d on %s\n&amp;quot;, rank, size, processor_name );&lt;br /&gt;
&lt;br /&gt;
        if ( rank == 0 ) {&lt;br /&gt;
                printf( &amp;quot;%s&amp;quot;, greeting );&lt;br /&gt;
                for (i = 1; i &amp;lt; size; i++ ) {&lt;br /&gt;
                        MPI_Recv( greeting, sizeof( greeting ), MPI_CHAR, i, 1, MPI_COMM_WORLD, &amp;amp;status );&lt;br /&gt;
                        printf( &amp;quot;%s&amp;quot;, greeting );&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
                MPI_Send( greeting, strlen( greeting ) + 1, MPI_CHAR, 0, 1, MPI_COMM_WORLD );&lt;br /&gt;
        }&lt;br /&gt;
        MPI_Finalize();&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hvilket returnenrer:&lt;br /&gt;
&amp;lt;pre&amp;gt;0: Hello World from process 0, of 10 on C01&lt;br /&gt;
0: Hello World from process 1, of 10 on C04&lt;br /&gt;
0: Hello World from process 2, of 10 on C05&lt;br /&gt;
0: Hello World from process 3, of 10 on C06&lt;br /&gt;
0: Hello World from process 4, of 10 on C01&lt;br /&gt;
0: Hello World from process 5, of 10 on C04&lt;br /&gt;
0: Hello World from process 6, of 10 on C05&lt;br /&gt;
0: Hello World from process 7, of 10 on C06&lt;br /&gt;
0: Hello World from process 8, of 10 on C01&lt;br /&gt;
0: Hello World from process 9, of 10 on C04&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pasa</name></author>	</entry>

	</feed>