MPI avec python

nuanda -  
 nuanda -
Bonjour,

Je souhaite utiliser MPI avec Python. Mon programme python est très simple, mais le temps de calcul et d'ecriture à chaque itération est long.

__________________________________________________________________________
for i in mylist:
myfile = open(path+str(i)+'filename.dat, 'w')
.......
# calcul + ecriture du fichier...
.......

myfile.close()

__________________________________________________________________________

Par consequent, je voudrais lancer le programme sur plusieurs processeurs grace à MPI, etant donné que chaque iteration correspond à un job independant.

Quelqu'un aurait-il une methode simple pour faire ça svp?

Merci!

4 réponses

nuanda
 
Houla :)

MPI signifie Message Passing Interface et permet d'executer un programme en parallele en distribuant des "jobs" sur divers CPU.

Dans mon cas, je cherche une méthode simple pour implementer çà avec Python.

Si vous avez des bases de Python et MPI, toute aide est plus que bienvenue! ;)
Merci.
0
flo88 Messages postés 28376 Date d'inscription   Statut Contributeur Dernière intervention   5 101
 
C'était un clin d'oeil.
Simplement, que dans certain domaine professionnel, certaine abréviation ne veulent pas dire la même chose.
0
nuanda
 
No souci :)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je pourrais t'aider à faire des algorithmes en parallèle, mais en pseudo MPI car je ne connais pas Python... Pour l'implémentation en naviguant un peu j'ai trouvé pyMPI.

Quand je regarde ton code j'ai quand même un gros doute sur la parallélisation, car si c'est le temps d'écriture qui est long tu ne pourras rien faire car de toute façon ton fichier final devra être lu et écrit sur l'ordinateur maître. La parallélisation va de plus demander un certain nombres de ressources puisque tu vas devoir envoyer sur le réseau les fichiers de départ, puis les fichiers d'arrivées.
En revanche si c'est le temps des calculs qui est long alors tu as tout intérêt à paralléliser, par exemple avec 1 fichier par ordinateur (processeur en fait) :

Maître : Pour chaque i, envoyer le fichier f[i] sur l'ordinateur i.
Maître : Pour chaque i, recevoir le fichier f'[i] de l'ordinateur i.

Ordinateur [i] : recevoir le fichier f du maître
Ordinateur [i] : faire le calcul de f et enregistrer le résultat dans f' 
Ordinateur [i] : envoyer le fichier f' au maître

Ça c'est la première idée (assez naïve) de la parallélisation. Mais il peut-être intéressant d'utiliser la parallélisation aussi dans les calculs, mais là il nous faut plus d'infos sur ce que tu veux faire !
0
nuanda
 
Merci KX.

"Pour chaque i, envoyer le fichier f[i] sur le CPU i" C'est exactement ça que je veux.
Et j'utilise une seule machine multi-core donc pas de souci pour l'ecriture etc.

J'aurais juste besoin de savoir comment implementer ça en Python (en utilisant pyMPI par exemple comme tu le suggeres).
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Si tu utilises une seule machine, je ne vois pas l'intérêt d'utiliser MPI. Alors je ne sais pas ce qui existe en Python mais l'utilisation de plusieurs threads ou processus (type fork) est certainement plus judicieux, car ça permettrait d'équilibrer la charge sur les différents processeurs. Mais MPI paraît inutiles ici, car il s'adresse avant tout à l'utilisation sur plusieurs machines pas une seule...
0
nuanda
 
J'utulise un supercomputer avec plusieurs nodes donc l'utilisation de MPI est completement pertinente.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Ok, mais pour l'implémentation en python je ne peux pas t'aider... Je ne connais pas.
0
nuanda
 
Tant pis :( merci quand meme.
0
flo88 Messages postés 28376 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 5 101
 
Salut

MPI est un protocole de transfert de données industriel............

Il faut toujours précisé.

Bonjour chez vous
-1