Я иду на эту работу в областях, где нет производительности SLA. Когда речь идет о автономных средствах рендеринга в компьютерной графике, для пользователей не существует «удовлетворительной производительности», поскольку они уже выделяют огромные суммы денег для распределения вычислений по облакам и рендеринга ферм даже с помощью современных средств рендеринга. для вывода качественных изображений и кадров для фильмов, например
Но я должен сказать как один, работающий в этой области в течение многих лет, что любое решение, которое значительно ухудшает ремонтопригодность в пользу эффективности, на самом деле работает против постоянно меняющихся требований к производительности. Потому что, если вы не сможете эффективно поддерживать свое решение в течение многих лет, поскольку все меняется под вашим ногами (как с точки зрения окружающего кода, так и того, что ожидают пользователи, поскольку конкуренты продолжают превосходить друг друга), то ваше решение уже работает в направлении устаревания и необходимость оптовой замены.
Я не вижу конечной цели профилировщиков, таких как VTune, как способ заставить мой код работать быстрее. Их конечная ценность - убедиться, что я не снижаю свою производительность, чтобы соответствовать постоянно растущим требованиям к производительности. Если мне абсолютно необходимо применить какую-то грубую микрооптимизацию, то профилировщик в сочетании с выполнением его в реальных пользовательских случаях (а не в каком-то тестовом примере, который, я думаю, может оказаться важным), гарантирует, что я буду применять такой неизбежно грубый вид оптимизация очень, очень разумно, чтобы только верхние горячие точки, которые появляются, а также очень тщательно их документирование, потому что мне неизбежно придется пересматривать и поддерживать, настраивать и изменять их в течение следующих нескольких лет, если это решение останется жизнеспособным.
И особенно, если ваше оптимизированное решение требует большего количества соединений, я бы неохотно использовал его. Одним из наиболее ценных показателей, которые я оценил в наиболее критичных для производительности областях кодовой базы, является разделение (как при сведении к минимуму объема информации, которая должна работать, что также сводит к минимуму вероятность того, что она потребует изменений, если она не требует непосредственных изменений). ), потому что эти критические области значительно умножают причины для изменений. Это означает, что чем меньше информации требуется для работы, тем меньше причин для изменений и минимизация причин изменений действительно является огромной частью повышения производительности в моих конкретных сферах деятельности, потому что все равно придется постоянно меняться (мы устареет через год иначе),
Для меня самые лучшие и наиболее эффективные решения, которые я нашел, - это те, в которых эффективность, ремонтопригодность и производительность не диаметрально противоположны друг другу. Задача для меня - попытаться сделать эти концепции настолько гармоничными, насколько это возможно.