Ich arbeite an einem Compiler und möchte seine Leistungen verbessern. Ich habe festgestellt, dass etwa 50% der Zeit damit verbracht wird, die Quelldateien zu analysieren. Da die Quelldatei ziemlich klein ist und ich danach eine ganze Reihe von Transformationen mache, scheint es für mich perfekt zu sein.Wie Benchmark Boost Spirit Parser?
Mein Parser ist ein Boost Spirit Parser mit einem Lexer (mit lexer :: pos_iterator) und ich habe eine mittlere Grammatik. Ich analysiere die Quelle in einen AST.
Mein Problem ist, dass ich keine Ahnung habe, was die meiste Zeit beim Parsen kostet: Kopien von AST-Knoten, Lexer, Parser-Regeln oder Speicher.
Ich denke nicht, dass es I/O-Problem ist, da ich an einer SSD arbeite und dass ich die Datei vollständig am Anfang lese und dann nur die Speicherversion benutze.
Ich habe versucht, Profiler, aber die Methoden, die Zeit in Anspruch nimmt einige Methoden-Boost mit Namen Hunderte von Zeichen lang sein und ich weiß nicht genau, was sie tun ...
So ist es eine bevorzugte Art und Weise unter Verwendung von einen Boost Spirit Parser und seine Grammatik zu benchmarken? Oder gibt es einige Regeln, mit denen die Effizienz an bestimmten Punkten überprüft werden kann?
Dank
Quellen für Interessenten:
Hier ist ein aufzuschreiben von ApochiQ der Boost.Spirit als Parser für die Epoch Sprache verwendet. Er hat die Leistung seines Parsers zwischen den 10 und 11 Releases erheblich verbessert und aufgeschrieben, worauf er sich [hier] konzentrierte (http://code.google.com/p/scribblings-by-apoch/wiki/OptimizingBoostSpirit). –
Benchmarking alles in der Regel beinhaltet etwas durch den "Code im Test", und dann die Analyse der Ergebnisse. Wenn Sie ein komplexes System haben, hilft es oft, einen "Null-Treiber" oder eine "Null-Schnittstelle" zu erzeugen, so dass Sie beispielsweise eine Quelldatei einspeisen und analysieren können, ohne auf die analysierten Ergebnisse einzugehen. –
@MatthieuM. Ja, ich kenne diesen Artikel. Ich habe schon vor einiger Zeit einige Ratschläge dieses großartigen Artikels befolgt. Aber ich weiß nicht, welchen Rat ich als nächstes befolgen soll. –