MPI avec python

Fermé
nuanda - 13 nov. 2012 à 10:23
 nuanda - 20 nov. 2012 à 01:16
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

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 25931 Date d'inscription dimanche 15 mai 2005 Statut Contributeur Dernière intervention 5 mai 2024 4 406
14 nov. 2012 à 10:38
C'était un clin d'oeil.
Simplement, que dans certain domaine professionnel, certaine abréviation ne veulent pas dire la même chose.
0
No souci :)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 nov. 2012 à 00:29
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
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 nov. 2012 à 14:02
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
J'utulise un supercomputer avec plusieurs nodes donc l'utilisation de MPI est completement pertinente.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 nov. 2012 à 23:56
Ok, mais pour l'implémentation en python je ne peux pas t'aider... Je ne connais pas.
0
Tant pis :( merci quand meme.
0
flo88 Messages postés 25931 Date d'inscription dimanche 15 mai 2005 Statut Contributeur Dernière intervention 5 mai 2024 4 406
Modifié par flo88 le 13/11/2012 à 10:54
Salut

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

Il faut toujours précisé.

Bonjour chez vous
-1