Pracuję nad kompilatorem i chciałbym poprawić jego wydajność. Zauważyłem, że około 50% czasu zajmuje parsowanie plików źródłowych. Ponieważ plik źródłowy jest dość mały i po nim wykonuję wiele transformacji, wydaje mi się, że jest on doskonały.Jak test porównawczy Boost Spirit Parser?
Mój parser jest parserem Boost Spirit z lexerem (z lexerem :: pos_iterator) i gramaturą średniej wielkości. Parsuję źródło w AST.
Mój problem polega na tym, że nie mam pojęcia, co zajmuje najwięcej czasu podczas analizowania: kopie węzłów AST, lexer, reguł parsera lub pamięci.
Nie sądzę, że jest to problem z I/O, ponieważ pracuję na dysku SSD i że czytam plik całkowicie na początku, a następnie używam tylko wersji pamięci.
Próbowałem za pomocą profilarek, ale metody, że potrzeba czasu, są pewne metody z Boost, z imionami setek znaków i nie wiem dokładnie, co robią ...
tak, to czy jest preferowanym sposobem porównywać parownik Boost Spirit i jego gramatykę? A może istnieją pewne zasady, które można wykorzystać do weryfikacji wydajności w niektórych określonych punktach?
Dzięki
źródeł dla zainteresowanych:
Oto zapis przez ApochiQ kto korzysta Boost.Spirit jak parser dla języka epoki. Znacznie poprawił wydajność swojego parsera między wydaniami 10 a 11 i napisał, na czym się skupił [tutaj] (http://code.google.com/p/scribblings-by-apoch/wiki/OptimizingBoostSpirit). –
Analiza porównawcza WSZYSTKO polega zwykle na uruchomieniu czegoś przez "testowany kod", a następnie analizie wyników. Jeśli masz złożony system, często pomaga on utworzyć "zerowy sterownik" lub "zerowy interfejs", dzięki czemu możesz na przykład zasilać plik źródłowy i analizować go, bez wpływu na analizowane wyniki. –
@ MatthieuM. Tak, znam ten artykuł. Już dawno temu podążyłem za kilkoma poradami tego wspaniałego artykułu. Ale nie wiem, jaką radę zastosować. –