De ce timp de executie a unei „buclă pentru“ în Python cu fermoar nu este aproximativ aceeași în două contextt echivalent

voturi
0

Alerg aceeași „bucla for“ în Python folosind aceeași funcție cu obiecte de aceeași mărime, în două alt context, dar echivalent. Cu toate acestea, timpul de calcul a celor două bucle nu este același lucru. Într-un caz, este de trei ori mai mare decât timpul de calcul al celuilalt caz. Aici este codul:

result = multiproc_map(local_analysis, state_batches)
for ii, (ATii,muii) in zip(state_batches, result):
   AT[:,ii] = ATii 
   mu[ii]  = muii 

Aici sunt timpul de executie diiferent (în sec.) A porțiunii de cod de mai sus, în cele două cazuri:

timpul de executare a multiproc_map: 9.5367431640625e-07 4.069389343261719

timpul de executie a „bucla for“: 13.779568910598755 .0259706974029541

În ambele cazuri, forma obiectelor local_analysis și state_batches sunt exact la fel.

Orice ajutor ar fi foarte apreciat. Desigur, eu pot oferi explicații și detalii suplimentare, dacă este necesar :)

Întrebat 09/10/2019 la 13:00
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Am găsit în sfârșit o soluție, dar nu o explicație pentru această problemă. Așa cum am fost folosind această buclă în două cazuri diferite, am putut urmări originea bug-ul. În final, am constatat că nu a existat o diferență în executarea timp a „pentru bucla“ dacă aș schimba poziția parametrilor în definiția funcției și utilizați cuvinte cheie argumente. Aici este definiția veche a funcției:

hybrid_dual_resolution(N,Nl,Nhs,Nls,alpha,betaH1,betaH2,betaH3,betaL1,betaL2,betaL3,
                       opt_file_hr,opt_file_lr,loc_radh,loc_radl,upd_a,
                       infl=1.0,rot=False,mp=False,taper='GC',**kwargs):

Aici este noua definiție a funcției în care o dau argumente ca și cuvinte cheie argumente:

def hybrid_dual_resolution(opt_file_hr=None,opt_file_lr=None,upd_a='DEnKF',
                           N=3,Nhs=200,Nl=32,Nls=200,loc_radh=17.7,loc_radl=8.75,
                           alpha=0.04,
                           betaH1=1.,betaH2=0.,betaH3=0.,
                           betaL1=0.,betaL2=1.,betaL3=0.,
                           taper='GC',infl=1.0,
                           rot=False,mp=False,**kwargs):

Și acum momentul executării buclei este aceeași în ambele cazuri, și aproape de timpul minim am menționat în postul anterior.

Sunt destul de surprins de acest bug. Credeți că trece argumentele ca și cuvinte cheie argumente se pot modifica timpul de execuție a „pentru bucla“?

Publicat 11/10/2019 la 14:12
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more