|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
[PYTHON, C] Beyond bytecode: a wordcode-based Python
Ho finito poco fa di creare su Google Code tutto il materiale relativo al mio progetto, che potete anche scaricare con SubVersion.
Trovate tutto a questo indirizzo. Nella sezione download trovate le slide che ho presentato alla PyCon3 in formato sia PowerPoint che PDF. Le critiche, manco a dirlo, sono bene accette (se costruttive), come pure eventuali richieste di chiarimento (a cui risponderò non appena possibile
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Segnalo un resoconto della seconda giornata della PyCon3, in cui si parla anche del mio talk.
E un mio articolo incentrato sul solo talk che ho tenuto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Ci capisco poco e niente di quello che hai scritto nell'articolo (che era decisamente interessante)...
cmq complimenti per l'idea e per il lavoro, sembra davvero un passo avanti anche "ad occhio" Ma esistono altri linguaggi che usano le words per le istruzioni? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Può darsi, ma non ne ho la minima idea.
Comunque se dai un'occhiata alle slide dovresti capire meglio come funziona. Grazie comunque.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Complimenti, ottimo lavoro
Ho leggiucchiato le slide e devo dire che hai avuto una gran bella idea In media credo che una riduzione del numero di istruzioni per programma in un interprete identifichi un aumento prestazionale proprio per il fatto che bisogna stare meno nel ciclo di decoding delle istruzioni. Ma l'aumento prestazionale in media quant'è? Ho visto dalle slide le percentuali su pybench e sembra una percentuale altissima A quando l'introduzione nella mainline? Ha qualche problema di compatibilità questo sistema o funziona bene con tutti i programmi python? Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
|
#7 | |||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Quote:
![]() Quote:
Diciamo che, risolto questo problemino (che riguarda più che altro i debugger, non le applicazioni comuni), dovrebbe essere pronta per andare in produzione a tutti gli effetti.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
In effetti...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Complimenti Cesare
![]() Bel progetto, molto interessante, soprattutto l'ideaa di evitare i salti rendendo il formato dell'opcode fisso. Se hai bisogno di qualche test su Linux a 64 bit (Core 2 Duo 2.16 Ghz) sono disponibile, però mi dovresti fornire anche la suite di test Ultima modifica di cionci : 14-05-2009 alle 12:50. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Quote:
Cmq pensavo che i linguaggi in VM funzionassero GIA' in questa maniera, che senso ha costringersi ad usare i byte quando il computer stesso li digerisce peggio? Cmq le istruzioni in wordcode sono di una complessità eccessiva, fortuna che le scrive il compiler ![]() Un'idea: vista la quantità di istruzioni che si hanno ora a disposizione, potrebbe essere possibile profilare il codice e trovare le sequenze di istruzioni più comuni, quindi creare un singolo super-opcode che faccia esattamente la stessa operazione? |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Ti do delle indicazioni intanto su come compilarlo su Linux, visto che c'è un mio amico che ha avuto qualche problema. Dopo averlo configurato (con ./configure immagino), copia il mio file Python_ast.h su quello che è stato generato automaticamente. Per i test, in Tools/pybench c'è il file pybench.py. Basta eseguirlo nel seguente modo (supponendo che python si trovi nella root): python Tools/pybench/pybench.py -f pybench_results.log e postare i risultati (magari compressi in formato zip). Così posso confrontarli con quelli della versione base (che si trovano nel sito del progetto). Per PyStone, invece, basta eseguire questo: python Lib/test/pystone.py Ma è meglio farlo per un certo numero di volte, scartare il primo risultato e fare la media degli altri. Questo perché è un po' "ballerino" come test (almeno nelle macchine in cui l'ho provato).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Comunque le strade da percorrere ora potrebbero essere molteplici: gli opcode a 16 bit rendono secondo me il parsing un filo inefficiente. Forse la dimensione migliore sarebbe 32 bit, ma ovviamente si perderebbero i vantaggi nel risparmio di spazio. Però con l'idea di Tommo la cosa potrebbe divenire interessante, la fusione di una sequenza di istruzioni in un solo opcode a 32 bit farebbe risparmiare ancora spazio e renderebbe il tutto più veloce (ovviamente senza mescolare opcode a 16 e a 32 bit). Ultima modifica di cionci : 14-05-2009 alle 13:00. |
|
|
|
|
|
|
#15 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Con la mia soluzione ho dovuto prendere adeguate misure per garantire che il codice funzionasse sia su macchine little-endian che su macchine big-endian, e coi relativi problemi di allineamento (ad esempio su ARM non è possibile leggere word a indirizzi dispari). Insomma, c'è da sbatterci un po' per avere una soluzione che sia compatta, performante, ma soprattutto... funzionante Infine c'è da considerare anche l'architettura che si vuole creare, che in genere si pensa e realizza sulla base del linguaggio. Ad esempio la VM di Java è molto diversa da quella di .NET, ed entrambe le sono rispetto alla soluzione bytecode dell'attuale Python e della mia wordcode. Quote:
Quote:
Nel repository SVN in Tools trovi la cartella codebench che ho creato, in cui si trovano due applicazioni python da eseguire rigorosamente e rispettivamente per la versione bytecode e per quella wordcode. Lanciate senza parametri compilano tutti i file .py che trovano nelle cartelle Lib e Tools, e riportano poi tutta una serie di statistiche. E' così che ho trovato un bel po' di pattern a cui ho dedicato poi degli opportuni opcode. Ce ne sarebbero altri, ma al momento ho altre cose da fare, per cui magari tornerò a metterci mano dopo che avrò stabilizzato il progetto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 14-05-2009 alle 13:03. Motivo: Corretto SVB con SVN |
|||
|
|
|
|
|
#16 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Nella mia implementazione ho opcode a 16 e 32 bit, e alcune fanno un mare di lavoro (arrivo a eseguire gli stessi compiti di ben 4 istruzioni della vecchia implementazione). Il modello che ho proposto non ha opcode di dimensione fissa: la dimensione è variabile, e attualmente posso avere istruzioni di 1, 2 o 3 word (quindi 2, 4 o 6 byte). Un modello "CISC", appunto, che è il nome che ho dato a questa versione. Altre VM, come quella di LUA ad esempio, utilizzano invece opcode a 32 bit di dimensione fissa.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
C'è poco da dire. Gran bel lavoro davvero. Mi stupisce sempre di più vedere quante cose conosci. Complimenti.
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Capito...
cmq io intendevo "fortuna che all'utente finale le scrive il compiler"... lo so che al compiler le hai scritte te ![]() La mia idea nasce proprio da questo punto: in pratica, creare un wordcode generator, che trova le sequenze più comuni in bytecode e genera le corrispondenti opcode, diverse per ogni programma. Ovviamente il tutto non sarebbe solo a compile time, perchè una sequenza che compare una volta sola nel codice potrebbe essere ripetuta milioni di volte a runtime... Quindi, dopo che lo fai girare un pò di tempo sulla tua applicazione, genera un wordcode "personale" che contiene words uniche per le parti critiche del tuo programma. IMHO avrebbe senso, perchè ora che avete 32768 comandi disponibili è follia pensare di riempirli tutti a mano Ovviamente, è solo un'idea random
Ultima modifica di Tommo : 14-05-2009 alle 13:18. |
|
|
|
|
|
#19 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Il primo è che dipende tutto dal codice eseguito. Se n'è già discusso nella mailing list di Python, e purtroppo le prestazioni delle versioni "profile guided" dipendono appunto dal profilo scelto (es: template HTML, conversione dalla 2 alla 3, problema delle 8 regine, ecc. ecc.). Il secondo è che gli opcode prodotti non sarebbero ottimizzati, perché non si può semplicemente prendere una sequenza di bytecode e tirare fuori una wordcode corrispondente. Le wordcode che ho creato arrivano da opportuni "tweak" che mi hanno permesso di compattare il più possibile le informazioni che mi interessavano in poco spazio (infatti al più utilizzo 2 word per le "macroistruzioni" più complesse). Il terzo è che... la opcode table è rimasta di 256 elementi, e non 32768.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:54.






















