Quiero saber cuántas instrucciones x86-64 se ejecutan durante una ejecución determinada de un programa que se ejecuta en Red Hat Enterprise Linux. Sé que puedo obtener esta información del valgrind pero la desaceleración es considerable. También sé que estamos usando CPU Intel Core 2 Quad (modelo Q6700) que tienen contadores de rendimiento de hardware integrados. Pero no conozco ninguna forma de acceder al número total de instrucciones ejecutadas desde un programa C.¿Cómo puedo contar las instrucciones ejecutadas en Red Hat Enterprise Linux (x86-64)?
Respuesta
Performance Application Programming Interface (PAPI) parece ser a lo largo de las líneas de lo que busca.
Desde el website:
PAPI tiene como objetivo proporcionar al diseñador de herramientas y el ingeniero de aplicación con una interfaz consistente y metodología para el uso de los equipos de contadores de rendimiento que se encuentra en la mayoría de los microprocesadores principales.
Vince Weaver, un investigador postdoctoral Asociado con el Laboratorio de Computación Innovadora de la Universidad de Tennessee, hizo un poco de trabajo PAPI-related. La investigación que aparece en su web page en UTK parece que puede proporcionar información adicional.
libpapi es la biblioteca que está buscando. Los chips AMD e Intel brindan el número de entradas.
Hay varias formas de hacerlo, dependiendo de lo que necesite exactamente. Si solo quiere saber el número total de argumentos potenciales, puede ejecutar objdump en el binario, que le proporcionará el ensamblaje. Si desea información más detallada acerca de las instrucciones reales que se están ejecutando en un recorrido del programa, es posible que desee consultar el DynamoRIO que proporciona esa funcionalidad. Es similar a valgrind, pero creo que tiene un efecto menor en el rendimiento. Pude juntar un contador de instrucciones básicas con él en septiembre de manera relativamente rápida y fácil.
Si eso no es bueno, puede intentar consultar PAPI, que es una API que debe permitirle acceder a los contadores de rendimiento de sus procesadores. Nunca lo he usado, así que no puedo hablar por eso, pero un amigo mío lo usó en un proyecto hace unos 6 meses y dijo que lo encontró muy útil.
El programa debajo del acceso al contador de ciclos se registra desde C (código lamentable no portátil, pero funciona bien con gcc). Este es para contar ciclos, eso no es lo mismo que instrucciones. Los procesadores modernos pueden usar varios ciclos en la misma instrucción o ejecutar varias instrucciones a la vez. Los ciclos suelen interesar más a ese número de instrucciones, pero depende de su propósito real.
Sin duda, se puede acceder al contador de otras interpretaciones de la misma manera (en realidad ni siquiera sé si hay otras), pero tendré que buscar el código de instrucción real para usar.
static __inline__ unsigned long long rdtsc(void)
{
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
- 1. ¿Cómo instalar Maven en Red Hat Enterprise Linux 6?
- 2. instalar apt-get en el servidor Linux Red Hat
- 3. ¿Cómo encontrar si MySQL está instalado en Red Hat?
- 4. Linux por proceso límites de recursos - una profunda Red Hat Mystery
- 5. Cómo se comprueba la versión de RedHat Enterprise Linux?
- 6. baja Java proceso único límite de la rosca en Red Hat Linux
- 7. ¿Puedo usar CoffeeScript en las vistas ejecutadas en render.js?
- 8. ¿Cómo contar las diferencias entre dos archivos en Linux?
- 9. ¿Puedo almacenar en caché las consultas LINQ parcialmente ejecutadas?
- 10. Cómo instalar maven2 en Linux RedHat
- 11. Cómo iniciar sesión o reproducir líneas o instrucciones ejecutadas inmediatamente antes de un bloqueo
- 12. ¿Cómo puedo contar las subcadenas superpuestas en Perl?
- 13. ¿Cómo se muestran las últimas consultas ejecutadas en MySQL?
- 14. ¿Cómo imprimo las consultas ejecutadas por el método django .save()?
- 15. Donde las instrucciones SSE superan las instrucciones normales
- 16. ¿Cómo puedo supervisar las sentencias sql ejecutadas en un SQL Server 2005?
- 17. ¿Cómo puedo contar las instancias de un objeto?
- 18. Contar el número de consultas ejecutadas por NHibernate en una prueba de unidad
- 19. ¿Cómo puedo saber qué paquete Linux instalar para mi Linux AMI?
- 20. obtener todas las consultas ejecutadas en SQL Server
- 21. ¿Cómo puedo contar personajes en Perl?
- 22. ¿Cómo puedo contar operaciones en C++?
- 23. ¿Cómo puedo contar ejecuciones en una secuencia?
- 24. ¿Cómo contar las líneas en una cadena?
- 25. Hacer interfaz de red virtual en Linux?
- 26. Número de conteos de consultas MySQL ejecutadas en la página
- 27. ¿Cómo puedo detener las tablas que aparecen en la guía de Enterprise?
- 28. ¿Cómo se definen las instrucciones de uso en web.config?
- 29. ¿Protege mprotect la memoria caché de instrucciones en ARM Linux?
- 30. Volviendo a ejecutar las pruebas fallidas y no ejecutadas
solo preguntando. ¿Por qué querrías que se ejecutaran varias instrucciones? El número de ciclos parece más significativo que agregar instrucciones lentas (digamos accesos de memoria) con registros rápidos. – kriss
El número de ciclos incluye puestos como esperar que se entreguen datos desde las memorias caché. Por lo tanto, difiere de ejecución a ejecución, mientras que el número de insns se mantiene constante – horsh
@kriss: lo que dijo horsh --- Estoy buscando un número que sea estable y repetible. –