2010-01-28 7 views
6

He tenido la intención de actualizar un poco mi conocimiento de las estadísticas. Un área donde parece que las estadísticas serían útiles es en el código de creación de perfiles. Digo esto porque parece que la creación de perfiles casi siempre implica que trate de extraer cierta información de una gran cantidad de datos.¿Qué conceptos de estadísticas son útiles para el perfil?

¿Hay algún tema en las estadísticas que pueda mejorar para obtener una mejor comprensión de la salida del generador de perfiles? Puntos de bonificación si puede dirigirme a un libro u otro recurso que me ayude a comprender mejor estos temas.

Respuesta

3

No estoy seguro de que los libros sobre estadísticas sean tan útiles cuando se trata de crear perfiles. La ejecución de un generador de perfiles debe proporcionarle una lista de funciones y el porcentaje de tiempo invertido en cada una. Luego observa el que tuvo el mayor porcentaje de sabios y ve si puedes optimizarlo de alguna manera. Repita hasta que su código sea lo suficientemente rápido. No hay mucho margen para la desviación estándar o chi cuadrado allí, creo.

+0

Eso es realmente en última instancia cómo lo hago, y es probable que tengas razón. Aún así, me gustaría obtener más información acerca de las estadísticas, y este parece ser un buen lugar para probar y hacerlo práctico para hacerlo. –

+0

++ Neil tiene razón, aunque principalmente miro en el nivel de la línea, no en el nivel de la función. (Y, Neil, espero que por "porcentaje de tiempo" quieras decir "tiempo total", no "tiempo propio", y espero que quisieras "tiempo de reloj de pared", no solo de CPU, porque a medida que el software aumenta, el tiempo pierde se vuelve cada vez más debido a llamadas de función innecesarias, y algunas de ellas hacen E/S). –

1

Creo que el concepto estadístico más importante para entender en este contexto es Amdahl's law. Aunque comúnmente se lo menciona en contextos de paralelización, la ley de Amdahl tiene una interpretación más general. He aquí un extracto de la página de Wikipedia:

Más técnicamente, la ley se refiere con el aumento de velocidad alcanzable de una mejora a un cálculo que afecta a una proporción P de que cómputo donde la mejora tiene un aumento de velocidad de S. (Por ejemplo, si una mejora de puede acelerar el 30% del cálculo de , P será 0.3; si la mejora de hace que la parte afectada sea dos veces más rápido, S será 2.) La ley de Amdahl establece que la aceleración general de aplicando la mejora será

alt text

+2

No son realmente estadísticas, ¿o sí? –

+1

@Neil: Realmente no lo sé :-) Wikipedia dice "Las estadísticas son la ciencia de hacer un uso efectivo de los datos numéricos relacionados con grupos de individuos o experimentos" - ¿no es esto aplicable, entonces? –

+2

@Eli Precisamente - No veo ningún dato de "grupo" en esa ecuación. –

-1

Si se aplica el método de programación MVC con PHP esto sería lo que necesita al perfil:

Application: 
    Controller Setup time 
    Model Setup time 
    View Setup time 
Database 
    Query - Time 
Cookies 
    Name - Value 
Sessions 
    Name - Value 
+0

Lo siento, no sé PHP. Y no estoy seguro de cómo se relaciona esto con mi pregunta. ¿Dónde encajan las estadísticas aquí? –

+0

Bueno, PHP es otro lenguaje de programación. (Lo siento, pensé (erróneamente) que te refieres a php. Por cierto, ¿esto realmente merece un voto negativo?No es como si estuviera escribiendo spam o una respuesta completamente inútil – RJD22

3

estadísticas es divertido e interesante, pero para ajuste de rendimiento, no lo necesita. Here's an explanation why, pero una simple analogía podría dar la idea.

Un problema de rendimiento es como un objeto (que en realidad puede ser varios objetos conectados) enterrado bajo un acre de nieve, y usted está tratando de encontrarlo sondeando aleatoriamente con un palo. Si su bastón lo golpea un par de veces, lo ha encontrado; su tamaño exacto no es tan importante. (Si realmente quiere una mejor estimación de lo grande que es, tome más sondas, pero eso no cambiará su tamaño.) La cantidad de veces que tiene que sondear la nieve antes de encontrarla depende de la cantidad de área de la nieve debajo de la cual está.

Una vez que lo encuentre, puede sacarlo. Ahora hay menos nieve, pero puede haber más objetos debajo de la nieve que queda. Entonces, con más pruebas, puedes encontrarlas y eliminarlas también. De esta manera, puedes continuar hasta que no puedas encontrar nada más que puedas eliminar.

En el software, la nieve es hora, y el sondeo toma muestras de la pila de llamadas en tiempo aleatorio. De esta manera, es posible encontrar y eliminar múltiples problemas, lo que resulta en large speedup factors.

Y las estadísticas no tienen nada que ver con eso.

1

Creo que un concepto relacionado tanto con la estadística como con la creación de perfiles (su pregunta original) que es muy útil y utilizado por algunos (vea la técnica recomendada de vez en cuando) es mientras hace "microperfilaje": muchos programadores rally y gritar "no se puede micro perfil, micro-perfiles simplemente no funciona, demasiadas cosas pueden influir en su cálculo".

Sin embargo, sólo tiene que ejecutar n veces su perfilado, y mantener sólo x% de sus observaciones, los alrededor de la mediana, ya que la mediana es una "estadística robusta" (contrariamente a la media) que no está influenciada por valores atípicos (los valores atípicos son precisamente el valor que desea no tener en cuenta al realizar dicho perfil).

Esta es definitivamente una técnica de estadística muy útil para los programadores que quieren micro-perfilar su código.

+0

No mida. * Catch it in the act. * Http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024 –

+1

Lo hago y veo esto dos métodos como complementarios ... Me encanta enviar un SIGQUIT a mis programas Java de subprocesos múltiples, que vuelcan todos los hilos, exactamente donde están. Lo hago todo el tiempo. Es decir, no responde la pregunta * en absoluto *. La pregunta fue sobre conceptos estadísticos útiles para la creación de perfiles. – SyntaxT3rr0r

+0

Bueno, supongo que hay un concepto estadístico en el que confío, la distribución binomial, pero no * lo uso *, excepto como una explicación de por qué funciona la "captura". También uso el teorema de Bayes para explicar por qué funciona. Pero el abejorro no necesita saber * cómo * vuela, solo vuela. –

3

Todo lo que sé sobre perfiles es lo que acabo de leer en Wikipedia :-) pero sé bastante sobre estadísticas. El artículo sobre perfiles mencionó el muestreo y el análisis estadístico de los datos muestreados. Claramente, el análisis estadístico podrá usar esas muestras para desarrollar algunas declaraciones estadísticas sobre el rendimiento. Supongamos que tiene alguna medida de rendimiento, m, y muestra que mide 1000 veces. Digamos también que usted sabe algo sobre los procesos subyacentes que crearon ese valor de m. Por ejemplo, si m es la SUMA de un grupo de variables aleatorias, la distribución de m es probablemente normal. Si m es el PRODUCTO de un grupo de variables aleatorias, la distribución probablemente sea lognormal. Y así sucesivamente ...

Si no conoce la distribución subyacente y desea hacer una declaración acerca de la comparación del rendimiento, es posible que necesite lo que se denomina estadísticas no paramétricas.

En general, sugeriría cualquier texto estándar sobre inferencia estadística (DeGroot), un texto que cubra diferentes distribuciones de probabilidad y dónde son aplicables (Hastings & Peacock), y un libro sobre estadísticas no paramétricas (Conover) . Espero que esto ayude.

+1

++ para su discusión de estadísticas, especialmente sus referencias. Confío en Hastings & Peacock. He suprimido un (-) para su conocimiento de la Wikipedia de creación de perfiles :-) Ver mi respuesta. Mi analogía con la nieve no es genial, pero hay una gran idea errónea generalizada en el mundo, y Wikipedia, y la mayoría pero no todos los vendedores de perfiles, y el documento ** gprof ** original, que la optimización del rendimiento se trata de mediciones y estadísticas. Aquí hay un desacuerdo: http://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion/1562802#1562802 –

2

Zed Shaw, como de costumbre, tiene algunos thoughts en el tema de estadísticas y programación, pero los pone mucho más elocuentes que pude.

Cuestiones relacionadas