Estoy llegando a esto trabajando en áreas donde no hay SLA de rendimiento. Cuando se trata de renderizadores fuera de línea en gráficos de computadora, no existe un "rendimiento satisfactorio" para los usuarios, porque ya están distribuyendo enormes sumas de dinero para distribuir la computación a través de las nubes y renderizar granjas incluso con los renderizadores de última generación. para producir imágenes y fotogramas de calidad de producción para películas, p. ej.
Pero tengo que decir, como alguien que trabaja en este dominio durante muchos años, que cualquier solución que degrada significativamente la capacidad de mantenimiento en favor de la eficiencia en realidad está trabajando en contra de los requisitos de rendimiento siempre cambiantes. Porque si no puede mantener eficazmente su solución en los próximos años, ya que las cosas están cambiando bajo sus pies (tanto en términos de código circundante como de lo que los usuarios esperan que los competidores sigan superando entre sí), entonces su solución ya está trabajando hacia la obsolescencia y necesidad de reemplazo al por mayor.
No veo el propósito final de los perfiladores como VTune como una forma de hacer que mi código se ejecute más rápido. Su valor final es asegurarse de que no esté degradando mi productividad para satisfacer las demandas de rendimiento cada vez mayores. Si tengo que aplicar alguna microoptimización de aspecto grosero, entonces el perfilador, combinado con ejecutarlo en casos de usuarios reales (y no en algún caso de prueba que imagino que podría ser importante), se asegura de aplicar ese aspecto inevitablemente grosero optimizaciones muy, muy juiciosas a solo los principales puntos de acceso que aparecen, así como documentarlos con mucho cuidado porque inevitablemente tendré que volver a visitarlos, mantenerlos, ajustarlos y cambiarlos en los próximos años si esa solución sigue siendo viable.
Y especialmente si su solución optimizada implica más acoplamiento, entonces realmente sería reacio a usarla. Una de las métricas más valiosas que he llegado a apreciar en las áreas más críticas para el rendimiento de la base de código es el desacoplamiento (como minimizar la cantidad de información que algo necesita para funcionar, lo que también minimiza la probabilidad de que requiera cambios a menos que los necesite directamente). ), porque esas áreas críticas multiplican significativamente las razones para que las cosas cambien. Lo que significa que cuanto menos información requiera algo para trabajar, menos razones tiene para cambiar, y minimizar las razones para el cambio es realmente una gran parte de mejorar la productividad en mis áreas particulares de enfoque porque las cosas tendrán que cambiar constantemente de todos modos (nosotros en otro año quedará obsoleto)
Para mí, las soluciones más grandes y efectivas que he encontrado son aquellas en las que la eficiencia, la mantenibilidad y la productividad no son diametralmente opuestas entre sí. La búsqueda para mí es tratar de hacer que estos conceptos sean lo más armoniosos posible.