Мы работаем над базой кода C ++ среднего размера (10Mloc), которая благодаря нашим усилиям по оптимизации становится все более медленной .
Эта кодовая база представляет собой набор библиотек, которые мы объединяем, чтобы заставить их работать. Когда была разработана общая структура взаимодействия этих библиотек, был сделан акцент на производительность, а затем, когда было добавлено больше частей, общая структура не сильно изменилась. Оптимизация проводилась по мере необходимости и по мере развития нашего оборудования. Это сделало дорогое раннее решение очевидным только намного позже. Сейчас мы находимся в точке, где дальнейшая оптимизация обходится намного дороже, так как она потребует переписывания больших частей базы кода. Мы приближаемся к нежелательному локальному минимуму, поскольку знаем, что в принципе код должен работать намного быстрее.
Существуют ли какие-либо успешные методологии, помогающие решить, какие изменения следует предпринять для эволюции кодовой базы в направлении решения с оптимальной производительностью, которое нелегко спутать с возможностями простой оптимизации?
РЕДАКТИРОВАТЬ
Чтобы ответить на вопрос, как мы в настоящее время профиль:
На самом деле у нас есть только 2 разных сценария, как этот код может быть использован, оба смущающе параллельны. Профилирование выполняется как с использованием настенного времени, усредненного по большой выборке входных данных, так и с более детальными прогонами (стоимость инструкций, неправильные прогнозы веток и проблемы с кэшированием). Это работает хорошо, поскольку мы работаем исключительно на наших чрезвычайно однородных машинах (кластер из пары тысяч идентичных машин). Поскольку мы обычно заняты всеми нашими машинами, большую часть времени работаем быстрее, это означает, что мы можем рассмотреть дополнительные новинки. Проблема, конечно, в том, что, когда появляются новые варианты ввода, они могут получить штраф за опоздание, поскольку мы убрали наиболее очевидные микроэффективности для других вариантов использования, таким образом, возможно, сузив количество «оптимально работающих» сценариев.
sloc
. Я назвал это "умеренным размером", потому что я понятия не имею, что здесь считают "большим".