Difference between revisions of "CoE Cluster April 2012"

From Teknologisk videncenter
Jump to: navigation, search
Line 12: Line 12:
 
*[[/Dell Cluster installation|Dell Cluster Installation]]
 
*[[/Dell Cluster installation|Dell Cluster Installation]]
 
*[[/MPI|Programmering med MPI]]
 
*[[/MPI|Programmering med MPI]]
−
=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.
 
−
Installation:
 
−
<pre>
 
−
aptitude install geany
 
−
</pre>
 
−
For at kompilere det med mpicc og eksekvere med mpiexec skal man lige rette lidt til under "Build > Set Includes and Arguments".
 
−
{|
 
−
|[[Image:Geany IDE.jpg|800px|left|thumb|Geany IDE]]
 
−
|}
 
−
<pre>mpicc -Wall "%f" -o "%e"
 
−
 
−
mpiexec -n 20 -hostfile ~/mpd.hosts "%e"
 
−
</pre>
 
−
Og til C++ bruger man mpic++ -Wall "%f" -o "%e"<br/><br/>
 
−
Programmet man skriver skal selvfølgelig ligge i /var/mirror for de andre noder også har adgang til det.<br/><br/>
 
−
Og den kan man selvfølgelig X'e over med
 
−
<pre>
 
−
env DISPLAY=172.16.4.105:1 geany
 
−
</pre>
 
−
 
−
==Hello World eksempel==
 
−
HelloWorld program
 
−
<source lang=c>
 
−
#include "mpi.h"
 
−
#include <stdio.h>
 
−
 
−
int main (int argc, char *argv[] )
 
−
{
 
−
        int rank, size, namelen;
 
−
        char processor_name[MPI_MAX_PROCESSOR_NAME];
 
−
 
−
 
−
        MPI_Init( &argc, &argv );
 
−
 
−
        MPI_Get_processor_name( processor_name, &namelen );
 
−
        MPI_Comm_rank( MPI_COMM_WORLD, &rank );
 
−
        MPI_Comm_size( MPI_COMM_WORLD, &size );
 
−
        printf( "Hello World from process %d, of %d on %s\n", rank, size, processor_name );
 
−
        MPI_Finalize();
 
−
        return 0;
 
−
}
 
−
</source>
 
−
Compile det med
 
−
<pre> mpicxx -o helloWorld helloWorld.c</pre>
 
−
og kør det med
 
−
<pre>mpiexec -n 10 /var/mirror/helloWorld</pre>
 
−
Resultatet skulle gerne blive
 
−
<pre>
 
−
Hello World from process 2, of 10 on C05
 
−
Hello World from process 6, of 10 on C05
 
−
Hello World from process 3, of 10 on C06
 
−
Hello World from process 1, of 10 on C04
 
−
Hello World from process 5, of 10 on C04
 
−
Hello World from process 7, of 10 on C06
 
−
Hello World from process 9, of 10 on C04
 
−
Hello World from process 0, of 10 on C01
 
−
Hello World from process 4, of 10 on C01
 
−
Hello World from process 8, of 10 on C01
 
−
</pre>
 
−
==Hello World med MPI==
 
−
Det forrige eksempel brugte ikke rigtig MPI til noget, ud over at få rank og size.<br/>
 
−
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:
 
−
<source lang=c>
 
−
#include "mpi.h"
 
−
#include <stdio.h>
 
−
#include <string.h>
 
−
 
−
int main (int argc, char *argv[] )
 
−
{
 
−
        int rank, size, namelen, i;
 
−
        char processor_name[MPI_MAX_PROCESSOR_NAME];
 
−
        char greeting[MPI_MAX_PROCESSOR_NAME + 100];
 
−
        MPI_Status status;
 
−
 
−
        MPI_Init( &argc, &argv );
 
−
 
−
        MPI_Get_processor_name( processor_name, &namelen );
 
−
        MPI_Comm_rank( MPI_COMM_WORLD, &rank );
 
−
        MPI_Comm_size( MPI_COMM_WORLD, &size );
 
−
        sprintf( greeting,  "Hello World from process %d, of %d on %s\n", rank, size, processor_name );
 
−
 
−
        if ( rank == 0 ) {
 
−
                printf( "%s", greeting );
 
−
                for (i = 1; i < size; i++ ) {
 
−
                        MPI_Recv( greeting, sizeof( greeting ), MPI_CHAR, i, 1, MPI_COMM_WORLD, &status );
 
−
                        printf( "%s", greeting );
 
−
                }
 
−
        }
 
−
        else {
 
−
                MPI_Send( greeting, strlen( greeting ) + 1, MPI_CHAR, 0, 1, MPI_COMM_WORLD );
 
−
        }
 
−
        MPI_Finalize();
 
−
        return 0;
 
−
}
 
−
</source>
 
−
Hvilket returnenrer:
 
−
<pre>0: Hello World from process 0, of 10 on C01
 
−
0: Hello World from process 1, of 10 on C04
 
−
0: Hello World from process 2, of 10 on C05
 
−
0: Hello World from process 3, of 10 on C06
 
−
0: Hello World from process 4, of 10 on C01
 
−
0: Hello World from process 5, of 10 on C04
 
−
0: Hello World from process 6, of 10 on C05
 
−
0: Hello World from process 7, of 10 on C06
 
−
0: Hello World from process 8, of 10 on C01
 
−
0: Hello World from process 9, of 10 on C04
 
−
</pre>
 
 
=Slides=
 
=Slides=
 
*[http://mars.tekkom.dk/mediawiki/images/c/c3/PXE.pdf PXE]
 
*[http://mars.tekkom.dk/mediawiki/images/c/c3/PXE.pdf PXE]

Revision as of 11:06, 9 December 2011

{{#img: image=Super-computer-artw.jpg | page=Linux Cluster til Center of Excelence/Beskrivelse til CoE West | width=200px | title=Linux Supercomputer projekt }}

Equipment

MachoGPU

  • IP Address:
    • Local: 192.168.139.199
    • Global: 83.90.239.182
  • Login name: Your preferred.
  • Password: l8heise
    • Remember to change the password with the passwd command

Assignments

Slides

Litteratur Liste

Evaluering

Gå ind på Evaluering

og indtast koden til spørgeskemaet: JJ6Z-JQZJ-111K