[Python] Utilizzo completo della cpu

Matteo Perini perini.matteo a gmail.com
Ven 18 Nov 2011 08:54:31 CET


Il 17/11/2011 18:44, Manlio Perillo ha scritto:
> -----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).

Grazie del consiglio.

>
>> Però non riesco a capire se è possibile applicarlo anche ad un unico
>> comando.
> Che intendi come "comando"?

Scusami ma non conosco la terminologia corretta....
Io per comando intendevo "leastsq(e, v0, args=(x,y,phi,z), maxfev=10000)"
>
>> 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).

Ho trovato un paio di esempi on-line, nonche sul sito ufficiale che 
usavano sempre lambda per passare la funzione a leastsq
http://www.scipy.org/scipy_Example_List#head-4c436ae0085d9a56056425d11abff4ccdd3d3620

Quindi ho usato quella.

Se ho capito bene potrei usare:

def fp(v, x, y, phi):
     return (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)


Giusto?
> 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).
Mmmmhhhh la vedo mooolto dura per le mie conoscenze.
Grazie dei consigli
Matteo


Maggiori informazioni sulla lista Python