После профилирования среды выполнения antlr4 C ++
Я заменил «есть» < При вызове ClassName> «, использующем динамическое приведение, для проверки типа класса в наиболее заметных местах по методике isType старой школы, в которой используется битовая маскировка для каждого класса, очень похоже на технику типа C, я получил около 20% по сравнению с регрессией во время выполнения.
Следующий правонарушитель в очереди:
ParserATNSimulator.cpp
auto onExit = finally([this, input, index, m] {
mergeCache.clear(); // wack cache after each prediction
Вызов:
void PredictionContextMergeCache::clear() { _data.clear(); }
который вызывает очистку unordered_map, которая, в свою очередь, вызывает дорогой memset к 0.
Интересно, нет ли здесь более быстрой реализации?
Спасибо
Alain
Задача ещё не решена.
Других решений пока нет …