Amazon.de Widgets
Skip to content
7.Februar 2011 / Patrick

Parallel Computing mit MPICH ohne SGE

closeDieser Beitrag wurde vor über 3 Monaten veröffentlicht. Die darin beschriebenen Informationen sind mit Vorsicht zu geniessen, da sie bereits veraltet oder nicht mehr gültig sein könnten. Solltest du von Neuerungen oder Verbesserungen wissen, so freue ich mich über einen klärenden Kommentar.

Um zu sehen, was mein neuer Oscar Cluster so alles kann, habe ich mir vorgenommen die Performance mal genauer unter die Lupe zu nehmen.
Dabei wollte ich mich prinzipiell auf die Hardware konzentrieren, um aufzeigen zu können, welche Vorteile zum Beispiel Infiniband anstelle von Ethernet oder High Performance Storage oder NAS anstelle von lokalen Disks bieten können. Damit das auch gewährleistet wird, habe ich eine Möglichkeit gesucht einen Job auch ohne Batch Queueing System zu starten, damit die Kennzahlen der Analyse nicht dadurch verfälscht werden.

Dabei bin ich auf die Methode über ein Machinefile in Kombination mit MPICH gestossen.
Das ganze funktioniert wirklich erstaunlich einfach.

Verwendet habe ich wieder das folgende Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <mpi.h>
 
int main (argc, argv)
     int argc;
     char *argv[];
{
  int rank, size, 
 
  MPI_Init (&argc, &argv);	/* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);	/* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);	/* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

Dieses muss zuerst natürlich noch kompiliert werden, alles wie man es schon kennt:

1
mpicc -o hello_world_c hello_world.c

Und danach kann der Job direkt mit mpirun und ohne SGE gestartet werden:

1
mpirun -np 16 -machinefile machine.file hello_world_c

In die Datei machine.file müssen lediglich die Namen der Nodes aufgeführt werden:

1
2
3
4
lcc102
lcc103
lcc104
lcc105

ACHTUNG: Wichtig bei dieser Methode ist es zu wissen; es ist nicht mehr alles so kontrolliert wie beim Batch Queueing System.
So muss man beachten, dass man mit der Option -np nur so viele Cores angibt, wie auch tatsächlich vorhanden sind. Gibt man zu viele an, so kommen ein paar der Jobs in die Queue der CPU und der ganze Cluster würde ausgehebelt werden und seine tatsächliche Geschwindigkeit inklusive aller Vorteile verlieren!
Wie genau dann schief geht, habe ich bereits in einem Beitrag mit dem Titel Load unter Linux beschrieben.

Diese Methode ist also nur für den Systemadministrator selbst und nicht für die “selbstsüchtigen Benutzer” ;)