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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a