En ningún orden en particular:
"Listo, fuego, apunten" - pensando que sabe lo que necesita ser optimizado sin probarlo (es decir adivinando) y luego actuar sobre eso, y ya que doesn No ayuda mucho, por lo tanto, suponiendo que el código debe haber sido óptimo para empezar.
"Penny Wise, libra tonto" - pensar que la optimización es todo acerca de optimización del compilador , quejarse sobre ++i
vs i++
mientras que las montañas de tiempo en que se gastan innecesariamente en los diseños exagerados, especialmente de estructuras de datos y bases de datos.
"Swat vuela con un bazooka" - estando tan enamorado de las ideas más geniales que se escuchan en las aulas que se utilizan para todo, independientemente de la escala.
"Fuzzy Thinking about Performance" - eludir términos como "punto de acceso" y "cuello de botella" y "perfilador" y "medir" como si esto fuera bien entendido o relevante. (Apuesto consigo una paliza por eso!) OK, uno a la vez:
punto de acceso - ¿Cuál es la definición? Tengo uno: es una región de direcciones físicas donde el registro de PC se encuentra una fracción de tiempo significativa. Es el tipo de cosas que los samplers de PC son buenos para encontrar. Muchos problemas de rendimiento presentan zonas interactivas, , pero solo en los programas más simples se presenta el problema en el mismo lugar donde el punto de acceso es.
cuello de botella: un término general utilizado para problemas de rendimiento, implica un canal limitado que limita la rapidez con la que se puede lograr el trabajo. La suposición no declarada es que el trabajo es necesario. En mis décadas de ajuste del rendimiento, de hecho he encontrado algunos problemas como ese, muy pocos. Casi todos son de naturaleza muy diferente. En lugar de tomar la ruta más corta desde el punto A hasta el punto B, se toman pequeños desvíos, en forma de llamadas a función que toman poco código, pero no poco tiempo. Luego, esos desvíos toman más desvíos anidados, a veces 30 niveles de profundidad. Cuanto más anidados estén los desvíos, más probable es que algunos de ellos sean menos de lo necesario (derrochadores, de hecho) y casi siempre surge de galopando generalidad - indulgencia incuestionable en "abstracción".
profiler - una cosa buena universal, ¿verdad? Todo lo que tienes que hacer es obtener un generador de perfiles y hacer algunos perfiles, ¿verdad? ¿Alguna vez pensó en lo fácil que es engañar a un perfilador para que le diga una gran cantidad de nada, cuando su objetivo es averiguar lo que necesita reparar para obtener un mejor rendimiento? En algún lugar de su árbol de llamadas, guarde un poco de E/S de archivos, o una pequeña llamada a alguna rutina del sistema, o haga que su gemelo malvado lo haga sin su conocimiento. En algún momento, ese será su problema, y la mayoría de los perfiladores lo perderán por completo porque la única ineficiencia que contemplan es algorítmico ineficiencia. O bien, no todas sus rutinas serán pequeñas, y es posible que no llamen a otra rutina en un número reducido de lugares, por lo que su gráfico de llamadas indica que hay un enlace entre las dos rutinas, pero que llama al. O supongamos que puede darse cuenta de que un gran porcentaje de tiempo se gasta en una ruta A llamadas B llamadas C.Puedes ver eso y pensar que no hay mucho que puedas hacer al respecto, cuando si también puedes ver los datos que pasan en esas llamadas, podrías ver si es necesario. Aquí hay un proyecto divertido: elija su perfilador favorito y luego vea cuántas maneras de engañarlo. Es decir, encuentre formas de hacer que el programa tarde más tiempo sin que el generador de perfiles sea capaz de decir lo que hizo, porque si puede hacerlo de manera intencional, también puede hacerlo sin tener la intención de hacerlo.
medida - (es decir, medida tiempo) eso es lo perfiladores han hecho durante décadas, y se enorgullecen de la exactitud y la precisión con la que se miden. Pero mida ¿qué tiempo? y ¿por qué con precisión? Recuerde, el objetivo es localizar con precisión los problemas de rendimiento de, de modo que pueda optimizarlos fructíferamente para obtener una aceleración. Cuando obtienes esa aceleración, es lo que es, independientemente de la precisión con que la hayas calculado de antemano. Si esa precisión de medición se compra a expensas de la precisión de la ubicación, entonces usted acaba de comprar manzanas cuando lo que necesitaba eran naranjas.
Here's a list of myths about performance.
Hmmm, los perfiladores me han sido muy útiles, y he hecho mejoras gracias a que son mensurables y perceptibles ... Realmente no entiendo su punto. – alex
@alex: Sí, encuentran * algunos * problemas. ¿Sabes que no tienes más oportunidades para aceleración? La ausencia de evidencia no es evidencia de ausencia.Aquí hay un ejemplo de lo que quiero decir, donde en varias iteraciones, se demostró una aceleración de más de 40 veces: http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773 –
+1, aunque no estoy de acuerdo con (o entiendo mal) la parte del "cuello de botella". Mi punto de vista: cuello de botella describe el componente de hardware que limita - por ej. CPU, caché, disco. Cuando se ejecuta un programa computacionalmente pesado, raramente todos los componentes están dentro de sus límites; por lo general, uno será el cuello de botella. Puede reducir la carga general, puede eliminar la "presión" de un componente para que no se produzca un cuello de botella tan temprano y puede mover la "presión" entre los componentes. – peterchen