[Python] Utilizzo completo della cpu

Matteo Perini perini.matteo a gmail.com
Ven 18 Nov 2011 09:02:12 CET


> Non credo nel tuo caso. Il codice python in linea di massima non può
> essere eseguito in multithread, nel senso che l'interprete può esegure un
> solo opcode alla volta. Ma se questo opcode "è lungo di suo", per esempio
> legge da un file, o dalla rete, o fa qualcosa di complesso ma restando in
> C, senza toccare pezzi di python, allora può "rilasciare il GIL" e
> permettere ad altri thread di correre in parallelo. Di conseguenza, un
> programma python può beneficiare di multithread solo quando è IO-bound, non
> quando è CPU-bound, e il tempo di CPU è speso in codice Python.
>
> Nota che - se ricordo bene - numpy rilascia il GIL per le operazioni
> implementate in C, ovvero, se fai A + B dove A e B sono matrici 10000 x
> 10000, mentre le somma può permettere ad altro codice (python o meno) di
> correre. Ma la funzione leastsq, anche se è scritta in C, valuta
> continuamente la fp che, essendo scritta in Python, ha bisogno di aspettare
> il GIL per essere eseguita.

Le cose si complicano....
Ho capito (forse) il 50% di quello che hai scritto (per colpa mia 
naturalmente).
Quando mi rapporto con questa lista mi rendo conto di saperne veramente 
poco... ;)
>
> Al di là della prestazione di Python coi thread, non credo che la leastsq
> sia parallelizzabile: se non dico cappellate, l'algoritmo consiste in
> valutare continuamente la funzione in un numero di punti e ogni valutazione
> ha bisogno dei risultati precedenti, quindi non mi sembra un problema
> adatto ad essere parallelizzato.
Penso invece che dopo una prima inizializzazione del calcolo il tutto si 
riconduca a dei calcoli matriciali ma è passato un po' di tempo dagli 
esami di calcolo numerico.
Grazie
MAtteo


Maggiori informazioni sulla lista Python