2008-09-10 27 views
11

Estoy tratando de optimizar varios cuellos de botella en una aplicación que se supone que debe funcionar en una muy amplia gama de CPUs y arquitecturas (algunos de ellos muy cerca de dispositivos embebidos).Limitar velocidad de la CPU para el perfilado

Los resultados de mi generador de perfiles, sin embargo, no son muy significativa debido a la velocidad de mi CPU. ¿Hay alguna manera (preferiblemente en Windows o Mac OS X) para limitar la velocidad de mi CPU con fines de generación de perfiles?

He pensado en el uso de una máquina virtual, pero no he encontrado ninguna con dicha funcionalidad.

Respuesta

0

Recientemente, hay una aplicación en Downloadsquad.com. No recuerdo su nombre pero sí algunos procesadores de woth stiff y administrador de tareas. Puede que solo haya sido para administrar qué aplicaciones están en qué CPU, pero tal vez te daría esto. Intentaré buscarlo esta tarde y responderé si lo encuentro.

0

Muchos perfiladores (por ejemplo oprofile - pero eso es sólo Linux) permiten establecer la frecuencia que se recogen los datos. Vea si su generador de perfiles lo admite, y si no, pruebe con uno diferente que sí lo haga.

+0

creo que quiere reducir la velocidad de la CPU por lo que la relación entre la velocidad de la CPU y la velocidad de otras operaciones (tales como E/S, la entrada del usuario ...) se acerca más a las relaciones con experiencia en sistemas antiguos. No veo cómo el aumento de la frecuencia de recolección ayudaría allí. – sleske

+0

@sleske Supuse que se refería a que la CPU era tan rápida que se recogieron muy pocas muestras de perfil, por lo que no se devolvieron datos significativos. –

1

Me temo que no conozco a ninguna otra respuesta que para empezar a buscar alrededor de su zona para hardware antiguo. La CPU no es la única variable que (generalmente) puede afectar las cosas. El tamaño de caché L1/L2, la velocidad del bus de memoria, la velocidad/latencia de la memoria, la velocidad del disco duro, etc. son factores importantes en muchas aplicaciones.

2

Es un error común que lo que necesita saber la velocidad de su código es saber dónde están sus problemas de rendimiento son. Eso confunde la búsqueda de problemas con la medición de problemas.

This is the method I use.

Si hay cierta lógica despilfarro en el programa, será un desperdicio no importa lo que la CPU ejecuta.

Lo que necesita saber es dónde está. Para la medición, no necesita saber qué tan grande es; solo necesita saber que es lo suficientemente grande como para necesitar reparación.

Por lo general, hay una serie de problemas, de diferentes tamaños. Probablemente encuentre primero los más grandes, pero sin importar en qué orden los arregle, cada uno que arregle hará que sea más fácil encontrar los restantes, ya que tomarán un porcentaje mayor.

+0

Tienes un punto, pero antes que nada debes averiguar * si tienes un problema *. Si tiene un código ineficiente, pero las ineficiencias están marcadas por los tiempos de espera de E/S, no tiene sentido optimizarlo. Entonces, las relaciones entre las velocidades de los componentes del sistema son importantes para las pruebas de rendimiento, y es por eso que debe ralentizar la CPU. – sleske

+0

@sleske: Es por eso que no me gusta hacer una gran diferencia entre el tiempo de CPU y el tiempo bloqueado. Un error de rendimiento puede consistir en demasiado de uno u otro, pero el OP realmente no mencionó la E/S. Mi punto es que hacer algo con 10 instrucciones, donde 1 haría el trabajo, es tan inútil a 1 ghz como a 1 hz. Creo que los porcentajes son más importantes que los tiempos, con el fin de aislar el desperdicio. –

+1

@sleske: ... No creo que lo haya dicho muy bien. Aquí hay un ejemplo (http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773) donde hubo una serie de problemas de rendimiento, que varían en tamaño en aproximadamente 2 órdenes de magnitud , uno de los cuales fue un problema de E/S. Después de eliminar algunos más grandes, llegó a un punto donde la E/S era más grande. Si la CPU corriera a una velocidad diferente, eso llegaría en un punto diferente. –

0

He pensado en utilizar una máquina virtual , pero no he encontrado ninguna con dicha funcionalidad.

¿Por qué necesita una VM que explícitamente ofrece esa funcionalidad? Simplemente limite el uso de la CPU de la VM en el sistema operativo host (donde es solo un proceso regular). Eso debería tener exactamente el mismo efecto.

Puedes hacer esto p. Ej. usando cpulimit en Linux; soluciones similares existen para MS Windows.

+0

Esto hace que obtenga una CPU muy poco elegante, p. rápido por medio segundo, luego nada durante el siguiente medio segundo, dependiendo de cómo funcione el sistema VM. –

Cuestiones relacionadas