• Non ci sono risultati.

MPI – Formato delle chiamate

N/A
N/A
Protected

Academic year: 2021

Condividi "MPI – Formato delle chiamate"

Copied!
10
0
0

Testo completo

(1)

MPI – Formato delle chiamate

In C: err = MPI_Xxxxx(parameter, …) 

MPI_ e' prefisso di tutte le funzioni MPI 

Dopo il prefisso, la prima lettera è maiuscola e tutte le altre minuscole 

Praticamente tutte le funzioni MPI tornano un codice d’errore intero 

Le costanti sono stringhe tutte in maiuscolo 

In Fortran (cenni sulle differenze tra Fortran e C ): call MPI_XXXX(parameter,…, err) 

MPI_ e' prefisso di tutte le subroutine MPI 

Anche se il Fortran è case insensitive, le subroutine e le costanti MPI sono

convenzionalmente scritte in maiuscolo 

L’ultimo parametro è il codice d’errore (INTEGER)

(2)

MPI – Struttura della libreria

(3)

MPI – Struttura di un programma

(4)

MPI

Tutti i programmi MPI devono includere l’header file standard:

mpi.h per il C, mpif.h per il Fortran

Nell’include file standard sono contenute definizioni, macro e prototipi di funzioni necessarie per la compilazione di un

programma MPI

(due parole a proposito dei file di header). 

MPI_Init: La prima routine MPI in un programma MPI deve essere la routine MPI_Init: 

Inizializza l’ambiente di comunicazione

All’interno di un programma MPI puo' essere chiamata una sola volta

definisce il comunicatore standard MPI_COMM_WORLD

MPI_Finalize: In un programma MPI conclude la fase di comunicazione

Provvede al rilascio pulito dell’ambiente di comunicazione

Non e' possibile eseguire ulteriori chiamate MPI dopo la

finalizzazione

(5)

Binding MPI_Init

In C:

int MPI_Init(int *argc, char **argv)

Se necessario, piu' essere utilizzata per passare gli argomenti di command line a tutti i processi

In Fortran

INTEGER err MPI_INIT(err)

(6)

Binding MPI_Finalize

In C:

int MPI_Finalize(void)

In Fortran

INTEGER err

MPI_FINALIZE(err)

(7)

MPI – Hello World!

Vediamo il classico “Hello World!” usando MPI. 

La compilazione e l'esecuzione di un programma MPI dipendono dalla particolare implmentazione che si sta usando. Nel nostro caso stiamo lavorando in un

“Cluster Beowulf Intel” 

8 nodes Intel Pentium 4 Hyper­Threading 3 Ghz

Central Memory 1 GB on each node

Useremo mpich2­1.0.6 (compilato con GNU C)

  http://www­unix.mcs.anl.gov/mpi/mpich2/index.htm  

(8)

Multi­core and Hyper­Theading 

Single Core

CPU State Interrupt Logic

Execution

 Unit Cache

Hyper­Threading

Interrupt Logic Interrupt Logic

CPU State CPU State

Execution

 Unit Cache

Interrupt Logic Interrupt Logic

CPU State CPU State

Execution  Unit Cache

Execution

 Unit Cache

(9)

MPICH2

Come funziona ?

$ cat machinefiles  cg01

cg02  ... 

$ cat .mpd.conf secretword=test

$ chmod 600 .mpd.conf

$ mpdboot ­n 9 ­f machinefiles ­r rsh

$ mpdallexit

$ mpdlistjobs

$ mpdkilljob 11@cg00_34674

(10)

MPI – Hello World

Esempio: hello.c

$ mpicc ­o hello hello.c

$ mpiexec ­n 9 ./hello

vediamo adesso il kill: tokill.c

$ mpicc ­o tokill tokill.c

$ mpiexec ­n 4 ./tokill

$ mpdlistjobs

$ mpdkilljob 14@cg00_34674

(maggior dettaglio sul funzionamento di mpicc)

Riferimenti

Documenti correlati

(b) If (i) on or prior to the publication of the Reference Index to be used to calculate any Rate of Interest in relation to the index-linked interest provisions of these Notes, the

Reference Index: means, the unrevised Harmonised Index of Consumer Prices excluding tobacco for the European Monetary Union (also defined by the Sponsor as the Monetary Union

If the provisions of a Disruption Fallback become applicable with respect to the Notes of any Series, an investor in such Notes should expect that any or all of the following may

(come alcuni credono) AL FATTO che gli stessi figli siano dediti agli studi in una scuola superiore o universitaria oppure al fatto che abbiano compiuto o meno il 26° anno di età..

81/08 che garantisce efficacia esimente della responsabilità amministrativa delle persone giuridiche, delle società e delle associazioni di cui al D.Lgs.. 231/01 per i reati di

MPI_Cart_rank: sulla base della topologia definita all’interno del comunicatore, ritorna il rank del processo con un fissato set di coordinate cartesiane.. [IN] nnodes: numero

Esercizio: adesso provate a fare il send e receive di una matrice tra due processi usando i diversi

• Dati nella cache L1 (~ 2 cicli per l’accesso) – Necessarie q=0.5 (cioe’ 2 flop per dato trasferito) per. avere il 50%