2010-07-01 10 views
11

Tengo una aplicación que realiza pocos cálculos de CPU, pero principalmente tiene acceso a la memoria (asignando objetos y moviéndolos, hay pocos códigos numéricos o aritméticos).¿Cómo comprobar si la aplicación está unida a la CPU o ligada a la memoria?

¿Cómo puedo medir la cantidad de tiempo que gasto en latencias de acceso a la memoria (debido a errores de caché), con la CPU inactiva?

Debo señalar que la aplicación se ejecuta en un invitado de Hyper-V; No estoy seguro de que suponga ninguna dificultad, pero podría ser.

Respuesta

2

Siempre puede profile su aplicación para ver dónde pasa la mayor parte del tiempo.

Puede aprender mucho sobre el comportamiento de su aplicación y los patrones de acceso a los datos de esta manera.

Si está utilizando Linux, tienen una amplia gama de herramientas disponibles para el perfil, como:

EDIT:

Para obtener una medición más exacta del rendimiento del procesador y de los accesos a la memoria, también puede probar el AMD CodeAnalyst Performance Analyzer. Here son instrucciones sobre cómo usarlo con procesadores Intel, aunque yo mismo no lo he probado.

Otra herramienta que también puede serle útil es la Intel Performance Tuning Utility.

+0

Verá, ya he perfilado la aplicación. Tiene un perfil de rendimiento razonablemente plano con gran parte del tiempo ocupado por varias funciones de acceso a la memoria como memset, memmove, etc. (en realidad se trata de una aplicación .NET que se ejecuta en Windows, y CLR llama a estas funciones durante la construcción del objeto). Me gustaría saber si su tiempo está dominado por la CPU o por el bus de memoria. – jkff

+1

Puede probar ** AMD CodeAnalyst Performance Analyzer **: http://developer.amd.com/cpu/codeanalyst/Pages/default.aspx o http://www.virtualdub.org/blog/pivot/entry.php ? id = 288 –

2

A menos que tenga una latencia incorporada en el sistema, simplemente ejecute la aplicación por un tiempo en una máquina dedicada y verifique los contadores de la CPU. Si la aplicación usa el 100% del núcleo de la CPU a la que puede acceder, está vinculado a la CPU. De lo contrario, pasa tiempo en otras cosas como asignaciones de memoria y IO.

+2

Entonces, ¿las latencias de acceso a la memoria no están incluidas en los contadores de rendimiento de uso de la CPU? – jkff

+1

No creo que estén específicamente * excluidos *, pero ese tipo de granularidad es difícil de precisar. Su proceso obtiene la CPU por un período fijo de tiempo, pero la espera en las cargas de caché todavía cuenta como "uso" de la CPU, ya que su proceso no ha sido desalojado. No sé si es posible obtener realmente números duros para el tiempo de espera de la memoria sin husmear en el bus. – TMN

+1

Con 'Callgrind' puede obtener los contadores para los errores de caché' L1' y 'L2'. Agregue estos datos con información de perfiles y obtenga una estimación de cómo funcionan los patrones de acceso a datos para su aplicación. –

Cuestiones relacionadas