[Python] Utilizzo completo della cpu
Manlio Perillo
manlio.perillo a gmail.com
Gio 17 Nov 2011 18:44:21 CET
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Il 17/11/2011 17:19, Matteo Perini ha scritto:
> Ciao lista,
> Vorrei sapere se è possibile utilizzare tutti i core della cpu per
> eseguire calcoli gravosi.
Si.
Come è possibile usare anche tutte le cpu dei computer in una rete.
Il come è un altro discorso...
> Ho guardato un po' in internet e come risposta ho trovato il
> multithreading che ho già utilizzato un paio di volte.
Il multithreading in Python non va bene, a meno di condizioni
particolari (cerca su Internet Python GIL).
> Però non riesco a capire se è possibile applicarlo anche ad un unico
> comando.
Che intendi come "comando"?
> Mi spiego meglio.
>
> ho una funzione fp non lineare che deve essere ottimizzata...
> fp = lambda v, x,y,
> phi:(1+v[0]*phi+v[1]*x+v[2]*x*phi+v[3]*y+v[4]*y*phi+v[5]*x**2...
> +v[6]*phi*x**2+v[7]*y**2+v[8]*phi*y**2+v[9]*x*y+v[10]*phi*x*y)/(v[11]+v[12]*phi...
>
> +v[13]*x+v[14]*x*phi+v[15]*y+v[16]*y*phi+v[17]*x**2+v[18]*phi*x**2+v[19]*y**2...
>
> +v[20]*phi*y**2+v[21]*x*y+v[22]*phi*x*y)
>
Scusa, ma perchè usi lambda?
Nel tuo caso rende il codice meno leggibile.
Fai un più semplice:
def fp(v, x, y, phi):
...
Le lambda dovrebbero essere usate *solo* se ti serve una funzione
anonima (ad esempio per passarla come argomento ad un altra funzione).
>
> imposto la funzione obiettivo
> e = lambda v, x,y, phi, z: (fp(v,x,y,phi)-z)
>
> e infine avvio il processo di ottimizzazzione ai minimi quadrati
> v, success = leastsq(e, v0, args=(x,y,phi,z), maxfev=10000)
>
> Questo va avanti per minuti e usa un solo core.
> C'è un modo per suddividere i calcoli di leastsq tra più core?
> (spero di si)
Devi parallelizzare l'algoritmo, e di solito non è banale.
In letteratura dovresti trovare algoritmi per l'ottimizzazione ai minimi
quadrati paralleli, magari trovi anche implementazioni già pronte.
Una volta che hai l'algoritmo, l'altro problema è l'implementazione
(anche questo non banalissimo).
Ciao Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk7FR/UACgkQscQJ24LbaUQWyQCaAwJJ3RG49Tavy19BBSRDvXl3
9P0An1g1oS7rfLK4quLwRXUvsFqbXfEz
=UcKu
-----END PGP SIGNATURE-----
Maggiori informazioni sulla lista
Python