Оптимизация времени выполнения ANTLR4 C ++ - PullRequest
0 голосов
/ 12 декабря 2018

После профилирования среды выполнения antlr4 C ++ я заменил вызовы "is ", которые используют динамическое приведение, чтобы проверить тип класса в наиболее заметных местах, методом старой школы isType, которая использует битовую маскировку для каждого класса, оченьКак и в случае с техникой, во время выполнения я набрал около 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

...