Re: [Python] Pararelizzare due loop
Il giorno 05 gennaio 2012 15:56, Matteo Boscolo ha scritto: > ciao a tutti, > ho questa funzioncina dentro una classe . > Ma come, nessuno l'ha corretto? Si chiama metodo :-) Non voglio rendere inutile questo mio commento (e spero proprio che nessuno l'abbia corretto perchè ho letto le risposte saltuariamente), quindi voglio fornirti uno spunto per capire meglio il concetto. In termini più generici non basta spawnare processi o lanciare thread per migliorare i tempi di esecuzione o far scalare l'applicativo, vedi la legge di Amdahl per maggiori informazioni, se proprio ti interessa l'argomento in modo approfondito. Se non fosse questo il caso lascia perdere e questo mio commento sarà totalmente inutile. Non basta dire "voglio dimezzare i tempi, eseguo due processi/thread" per ottenere il risultato sperato. Seguendo i consigli degli altri potrai ottenere molto di più. Il giorno 06 gennaio 2012 12:03, Daniele Maccio ha scritto: >"Premature optimization is the root of all evil" > http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize +1 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
2012/1/5 Matteo Boscolo : > vorrei qualche suggerimento su come parallelizzare i due cicli in modo da > rendere più efficiente e veloce questa funzione .. Non farlo. > def _updateSolver(self,r): > """ > internal function for solver updating > """ > for p in r.parameters.values(): > self._ruleSolver.addParameter(p.name, p.value) > for f in r.functions.values(): > self._ruleSolver.addFunction(f.name, f.value) L'unica cosa "innocua" e sensata che vedo qui e' usare strutture dati appropriate. Dai metodi, mi sembra che parameters e functions siano dizionari. Non so cosa siano le chiavi. Dopo di che chiami addParameter e addFunction, "spezzando" oggetto che sembra una coppia. E qualcosa mi dice che vai a mettere il tutto dentro un dizionario. A me sembra che questo sia un caso in cui la programmazione ad oggetti stia facendo dei danni. Il modo piu' rapido per aggiungere valori ad un dizionario a partire da un altro dizionario e' chiamare update e dimenticarsi del resto. A margine, se questa cosa e' quello che penso io, l'unico modo di andare veloce e' avere buone regole di taglio e buona propagazione. -- . ..: -enrico- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
"Premature optimization is the root of all evil" http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize Il 06 gennaio 2012 10:51, Giovanni Porcari ha scritto: > > Il giorno 05/gen/2012, alle ore 19:09, Giovanni Porcari ha scritto: > >>> Supponi di avere due liste da 1.000.000 di elementi .. >>> ciclo per un milione >>> e poi per un altro milione >>> >>> se pararelellizzo dovrei se non dimezzare almeno ridurre il tempo di >>> esecuzione .. che dite ?? >>> Tenete presente che giro so w$ >> >> >> Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno >> sguattero >> e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito. >> Poi immagina di avere due sguatteri ma sempre un solo lavello. >> >> Quanto scommetti che il tempo finale è maggiore di 2000 secondi ? > > Andrea ha detto che se fai molto I/O ha senso parallelizzare. > > Nell'esempio se le 2 pile di piatti fossero in due stanze diverse > dalla cucina e i poveri sguatteri fossero costretti a correre > a prendere un piatto per volta allora anche con un solo lavello > due sguatteri (threads) farebbero prima che uno solo. > Ma solo perchè uno sguattero sfrutterebbe il tempo morto > dell'altro che corre a prendere il prossimo piatto. > > G > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
Il giorno 05/gen/2012, alle ore 19:09, Giovanni Porcari ha scritto: >> Supponi di avere due liste da 1.000.000 di elementi .. >> ciclo per un milione >> e poi per un altro milione >> >> se pararelellizzo dovrei se non dimezzare almeno ridurre il tempo di >> esecuzione .. che dite ?? >> Tenete presente che giro so w$ > > > Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno > sguattero > e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito. > Poi immagina di avere due sguatteri ma sempre un solo lavello. > > Quanto scommetti che il tempo finale è maggiore di 2000 secondi ? Andrea ha detto che se fai molto I/O ha senso parallelizzare. Nell'esempio se le 2 pile di piatti fossero in due stanze diverse dalla cucina e i poveri sguatteri fossero costretti a correre a prendere un piatto per volta allora anche con un solo lavello due sguatteri (threads) farebbero prima che uno solo. Ma solo perchè uno sguattero sfrutterebbe il tempo morto dell'altro che corre a prendere il prossimo piatto. G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
2012/1/5 Matteo Boscolo > Supponi di avere due liste da 1.000.000 di elementi .. > ciclo per un milione > e poi per un altro milione > > se pararelellizzo dovrei se non dimezzare almeno ridurre il tempo di > esecuzione .. che dite ?? 1) Che e' molto facile rallentare il codice nel tentativo di velocizzarlo con le micro-ottimizzazioni. 2) Che e' piu' facile ottimizzare quando il codice e leggibile e che le micro-ottimizzazioni rendeno il codice poco leggibile. 3) Che ha volte ha molto senso parallelizzare tasks che fanno tanto I/O. 4) Che solo proprio in alcuni casi il tempo della macchina e' piu' prezioso di quello del programmatore. 5) Che in genere il programma passa la maggior parte del tempo in una piccola parte di codice. Le misure sono essenziali per trovarla. 6) Spesso c'e' sempre tempo per ottimizzare piu' tardi. Ciao -- Andrea Francia http://www.andreafrancia.it ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
Il giorno 05/gen/2012, alle ore 19:11, Marco Beri ha scritto: > Sarà anche come dici, ma io sono sicuro che se prendi 9 mamme un bambino > viene fuori in un mese... Si ma ci vogliono anche 9 papà ? Perchè in tal caso la mamma si diverte di più ;) G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
2012/1/5 Giovanni Porcari > Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno > sguattero > e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito. > Poi immagina di avere due sguatteri ma sempre un solo lavello. > Quanto scommetti che il tempo finale è maggiore di 2000 secondi ? > Sarà anche come dici, ma io sono sicuro che se prendi 9 mamme un bambino viene fuori in un mese... ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
Il giorno 05/gen/2012, alle ore 18:00, Matteo Boscolo ha scritto: > Supponi di avere due liste da 1.000.000 di elementi .. > ciclo per un milione > e poi per un altro milione > > se pararelellizzo dovrei se non dimezzare almeno ridurre il tempo di > esecuzione .. che dite ?? > Tenete presente che giro so w$ Supponi di avere due pile di piatti da lavare da 1.000 piatti ciascuna uno sguattero e un lavello. Se lava 1 piatto al secondo in 2000 secondi ha finito. Poi immagina di avere due sguatteri ma sempre un solo lavello. Quanto scommetti che il tempo finale è maggiore di 2000 secondi ? ;) G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
condivido i dubbi degli altri sul fatto che i thread non siano un grande aiuto nel tuo caso ad ogni modo segnalo questo http://eli.thegreenplace.net/2011/12/27/python-threads-communication-and-stopping/ mi sembra ben fatto Marco ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
Il 05/01/2012 17:48, Giovanni Porcari ha scritto: Il giorno 05/gen/2012, alle ore 15:56, Matteo Boscolo ha scritto: vorrei qualche suggerimento su come parallelizzare i due cicli in modo da rendere più efficiente e veloce questa funzione .. Ma sei sicuro che alla fine sia più 'efficiente e veloce' ? Cioè, cosa ti dà la certezza che non sia il contrario ? G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python Supponi di avere due liste da 1.000.000 di elementi .. ciclo per un milione e poi per un altro milione se pararelellizzo dovrei se non dimezzare almeno ridurre il tempo di esecuzione .. che dite ?? Tenete presente che giro so w$ ciao Matteo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
Il giorno 05/gen/2012, alle ore 15:56, Matteo Boscolo ha scritto: > vorrei qualche suggerimento su come parallelizzare i due cicli in modo da > rendere più efficiente e veloce questa funzione .. Ma sei sicuro che alla fine sia più 'efficiente e veloce' ? Cioè, cosa ti dà la certezza che non sia il contrario ? G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
Il 05/01/2012 17:08, Andrea Francia ha scritto: Scusa se ti faccio una contro-domanda. Come mai vuoi ottimizzare questa funzione? Hai problemi di performance? attualmente no.. ma vorrei ottimizzare al meglio questo processo perché potrebbe frullare un bel po Hai gia' verificato dove si trova il collo di bottiglia? Te lo chiedo perche' a giudicare dal nome dei metodi non sembrano operazioni molto onerose. non sono cose onerose ma potrebbero essere tante .. quindi se riesco a pararelizzare la cosa e' meglio Grazie mille Matteo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Pararelizzare due loop
2012/1/5 Matteo Boscolo > ciao a tutti, > ho questa funzioncina dentro una classe . > > vorrei qualche suggerimento su come parallelizzare i due cicli in modo da > rendere più efficiente e veloce questa funzione .. > Scusa se ti faccio una contro-domanda. Come mai vuoi ottimizzare questa funzione? Hai problemi di performance? Hai gia' verificato dove si trova il collo di bottiglia? Te lo chiedo perche' a giudicare dal nome dei metodi non sembrano operazioni molto onerose. Ciao -- Andrea Francia http://www.andreafrancia.it ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] Pararelizzare due loop
ciao a tutti, ho questa funzioncina dentro una classe . vorrei qualche suggerimento su come parallelizzare i due cicli in modo da rendere più efficiente e veloce questa funzione .. le dimensioni del r.parameters e r.functions sono differenti .. grazie mille ciao, Matteo def _updateSolver(self,r): """ internal function for solver updating """ for p in r.parameters.values(): self._ruleSolver.addParameter(p.name, p.value) for f in r.functions.values(): self._ruleSolver.addFunction(f.name, f.value) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python