2017-05-25 7 views
0

La question peut être triviale mais je n'ai pas trouvé de réponse directe à ma question.Paralléliser pour une boucle en python en utilisant mpi4py

J'ai une boucle for codée en Python 3.6 et je veux la paralléliser. Il va comme suit:

# Main file 
import scipy 
a=1 
b=2 # ... some parameters defined 
for i in range (10): 
    (ans_1,ans_2) = f(a,b,i) 

# Function file 
def f(x,y,j): 
    c = a+b # Some calculations 
    scipy.savetxt("data.csv",delimiter=',') # Saving required variables 

Comment puis-je paralléliser la boucle dans mon fichier principal en utilisant le module mpi4py en Python 3.6? Par exemple, je veux spécifier le nombre de processeurs comme nous utilisons dans Matlab: parfor(20) et en tapant parfor au lieu de for dans la boucle. Aidez-moi, s'il vous plaît!

Répondre

-2

Pourquoi avez-vous besoin de MPI? , Je suggère d'utiliser quelque chose comme JOBLIB ... https://pythonhosted.org/joblib/parallel.html

Dans votre cas, quelque chose comme

from joblib import Parallel, delayed 
# parallel on 20 cores: 
Parallel(n_jobs=20)(delayed(f)((a,b,i)) for i in range(10)) 
# Function file 
def f(params): 
    x,y,j = params 
    c = a+b # Some calculations 
    scipy.savetxt("data.csv",delimiter=',') 
+0

Merci @Hilman. Mais il n'y a que mpi4py disponible en supercalculateur disponible pour mes calculs. Toute aide à ce sujet? – Vembha

+0

Puis-je pas écrire 'def f (x, y, j):'? Que fait 'def f (params):' do? – Vembha