|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
[Generale] Multithreaded parsing
Salve a tutti,
dato il crescente numero di core degli attuali processori, l'uso dei threads si stà sempre più diffondendo per via dei vantaggi che non starò qui ad elencare (eccezione per Python che per inciso adoro :P). Mi chiedevo quindi, durante una normale procedura di parsing, secondo voi, si può fare uso di multithreading per eseguire in modo concorrenziale sia il lexer che il parser vero e proprio? Mi viene in mente una soluzione di parsing predittivo in cui lo scanner comunica con il parser tramite l'inserzione dei simboli in una tabella anzichè usare la più classica get_next_token() direttamente quando il parser ha bisogno di un nuovo token. Ho letto sul web qualche articolo in inglese che però parlava di parsing concorrenziale non di eseguire assieme scanner e parser. Mi vengono però in mente un paio di casi in cui sarebbe necessario usare un semaforo per impedire ai due thread di entrare in conflitto su certi dati, per esempio, il parser finisce di analizzare i token e ne richiede uno nuovo che lo scanner stà inserendo... Insomma, non sarebbe certo facile come un parser normale, ma appunto, potrebbe secondo voi costituire una alternativa per migliorare le prestazioni di parsing? Ps. ho visto più indietro (parecchio), un topic riguardante un contest di parsing, ma pare morto li!?! Grazie a tutti, Lex |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Potresti usare un approccio del tipo produttore -> consumatore, col thread del lex che produce i token, e quello del parser che li consuma.
Ci sono però due problemi con questo approccio. Il primo è che per sincronizzarli devi usare roba come lock et similia, che riduce le prestazioni del sistema. Il secondo, più grave, è che quest'approccio funziona soltanto con parser che non sono sensibili al contesto. Quindi se il tuo lexer produce token che non dipendono dal contesto, allora sei a posto, altrimenti non puoi utilizzarlo.
__________________
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 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 22005
|
Quote:
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
|
#4 | ||
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Quote:
Quote:
Hai per caso qualche riferimento che descriva più approfonditamente problemi e soluzioni (eventuali) legate a questo tipo di parsing? Mille grazie per la risposta, Ciao.
__________________
|
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Detto questo non so se ne valga la pena, molto piu' semplice compilare piu' unita' in parallelo...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Quote:
Ciao.
__________________
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Intendo dire che di solito un programma che non sia banale e' diviso in piu' moduli indipendenti, ed e' piu' facile far partire N esecuzioni diverse in parallelo che non parallelizzare il compilatore stesso. Quando programmo in C++ uso il gcc che non e' parallelo ma questo non mi vieta di riuscire ad usare tutti e quattro i core della macchina.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quoto. La compilazione di un file e' cosa breve. Inutile parallelizzare la compilazione singola. Meglio invece istanziare piu' compilatori per compilare piu' file in parallelo, cosa che viene gia' fatta da parecchi tool.
Diverso invece sarebbe pensare di parallelizzare il parsing di un file XML per costruirne l'albero. Ci sono mostri di XML in giro per i quali potrebbe valerne la pena. Ma tipicamente questi problemi hanno sempre un canale seriale da qualche parte, (es scarico il file XML da rete) e il collo di bottiglia e' quasi sempre li' piuttosto che nel processamento, che e' di per se banale.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#9 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Per il resto, concordo con quanto hanno scritto gli altri. Quote:
Quote:
__________________
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 | |||||
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Quote:
Quote:
Non puoi eseguire più interpreti per eseguire uno stesso programma (singolo processo). Poi è chiaro che anche gli interpreti si possano lanciare in parallelo ma non beneficia di aumento di prestazioni. Quote:
Quote:
Quote:
Grazie a tutti per l'interesse.
__________________
|
|||||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
In questo caso potresti procedere con la strategia suggerita da cdimauro, se procedi in modo intelligente la quantita' di lavoro in piu' non e' improponibile.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#12 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Poi io preferisco nettamente il cartaceo, se posso. Quote:
Non so a quali tecnologie e linguaggio ti stai affidando per realizzare il tutto, ma può darsi che non dovrai sbatterti più di tanto nell'impresa.
__________________
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 |
||
|
|
|
|
|
#13 | |||||
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Quote:
Quote:
dove ci incontriamo? Quote:
Quote:
Quote:
__________________
|
|||||
|
|
|
|
|
#14 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quote:
Ho già realizzato qualcosa con ANTLR & Python, e mi sono trovato benissimo. Poi ANTLR ha un ottime IDE, ANTLRWork, che ti permette di sviluppare grammatiche (e parser annessi) molto comodamente.
__________________
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 |
|||
|
|
|
|
|
#15 | |||
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Uhm... viaggio compreso con la cena? (sono 1.400 e rotti km)
Vabbè non vorrei sembrare uno scroccone, il viaggio ce lo metto io. E' un'occasione per fare una vacanza. Quote:
Quote:
Quote:
__________________
|
|||
|
|
|
|
|
#16 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Un altro punto di forza è che il lexer e il parser li scrivi nello stesso linguaggio e anche nello stesso file. Un altro è che invece del parser puoi direttamente fargli generare (sempre con lo stesso linguaggio) l'AST delle espressioni parserizzate; così salti pure questa fase, che negli altri parser tipo YACC & co. dev'essere fatta generalmente a manina.
__________________
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 | |
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Non ne dubito. Se avrò l'occasione di venirci ti avviso, potrei offrirla anche io una cena, il posto lo scegli tu però (con tutte le responsabilità del caso
Quote:
__________________
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Purtroppo su Wikipedia si trova poco sugli AST, per cui ti consiglio di studiare l'argomento sul libro che t'ho consigliato.
Qui trovi un'introduzione ad ANTLR "in 5 minuti". Mentre qui un esempio un po' più complesso, di una calcolatrice, in cui viene mostrato anche come far generare direttamente un AST, e un parser che lo "scorre". Tra l'altro ho scoperto adesso dal sito che l'ha usato Google nel suo App Engine. P.S. Allora ti aspetto.
__________________
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 |
|
|
|
|
|
#19 | ||||
|
Member
Iscritto dal: Jun 2010
Città: Asti
Messaggi: 85
|
Quote:
Comprerò quanto prima il libro che mi hai consigliato, non vedo l'ora di averlo sotto mano per iniziare a divorarlo. Quote:
Quote:
Quote:
Guarda un po' cosa ho trovato, magari li hai già visti, ma: 1 - The Language from the Dragon Book in ANTLR 2 - Automate translation of Java to Python
__________________
|
||||
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
No, non li avevo mai visti. Appena ho un po' di tempo mi smazzo il PDF (l'altro l'ho già letto, ed è una bella esperienza
Grazie!
__________________
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: 17:33.




















