una transito switch significado significa que opción multiple medicina estructura derecho condicional bifurcación bifurcaciones bifurcacion anatomia c++ windows visual-c++ optimization branch-prediction

c++ - transito - ¿Puedo medir los fallos de predicción de bifurcación en una CPU Intel Core moderna?



que significa bifurcacion en anatomia (1)

Esta pregunta y su respuesta, que recientemente fue etiquetada como una respuesta épica, me ha llevado a preguntarme; ¿Puedo medir el rendimiento de una aplicación en ejecución en Windows en términos de sus fallas de predicción de rama de CPU? Sé que existen algunas herramientas de análisis estático, que pueden ayudar a optimizar el código para un buen desempeño en situaciones de predicción de bifurcaciones, y que las técnicas manuales podrían ayudar simplemente haciendo cambios y volviendo a probar, pero estoy buscando algún mecanismo automático que pueda reportar un número total de fallas en la predicción de la bifurcación, durante un período de tiempo, mientras se ejecuta una aplicación de Windows, y espero que alguna herramienta de Perfilador para Visual C ++ pueda ayudarme.

Por el bien de esta pregunta, la aplicación en cuestión se construye con un compilador nativo como Visual C ++ para Windows, o usa algún otro compilador nativo, como GCC, FreePascal, Delphi o TurboAssembler. El ejecutable puede no tener ninguna información de depuración en absoluto. Quiero saber si puedo detectar y contar fallos de predicción de bifurcaciones, tal vez leyendo la información interna de la CPU a través de algún servicio de Windows como WMI, o tal vez ejecutando por completo dentro de un entorno virtualizado que ejecuta Windows, como usar VirtualBox, y luego ejecutando un completo entorno de Windows virtualizado con mi aplicación de prueba, dentro de VirtualBox, y haciendo análisis de tiempo de ejecución de la CPU virtual. O alguna otra técnica que no conozco, por lo tanto esta pregunta.

Sí, he buscado en Google. Lo único que parece prometedor es este PDF de AMD. La página 18 menciona algo muy cercano a lo que me gustaría hacer, pero parece escrito para aquellos que trabajan sin ningún sistema operativo, en plataformas de hardware de evaluación en bruto:

5.1. Ramas Aplicabilidad. Las predicciones erróneas de ramas condicionales pueden ser un problema importante en el código con mucha lógica de toma de decisiones.

Las ramas condicionales se pueden predecir mal cuando la probabilidad de elegir la ruta verdadera o falsa es aleatoria o cercana a una división 50-50. El hardware de predicción de ramificación no puede "aprender" un patrón y las ramificaciones no se predicen correctamente. Colección. Recopile los eventos en esta tabla para medir el rendimiento de la predicción de la rama:

Ramas Calcule la velocidad a la que se toman las ramas y la proporción del número de instrucciones por rama usando estas fórmulas: Velocidad de toma de rama = Taken_branches / Ret_instructions Relación de rama tomada = Taken_branches / Branches
Instrucciones por rama = Ret_instructions / Branches

Actualización: supongo que podría decir que estoy buscando una manera de leer el módulo de Intel Core i7 PMU, o funciones equivalentes de otras CPU. Parece que Intel VTUNE (de los comentarios de Adrian) está muy cerca de lo que pedí.


VTune Performance Analyzer puede hacerlo! Si está estudiando estos temas, eche un vistazo al "Libro de cocina de optimización" de Intel Press.

Nota: los comentarios indican la misma respuesta, pero con cierta incertidumbre, usé VTune y medí la tasa de predicción de bifurcación para una CPU Intel. Así que estoy 100% seguro.

Aquí está el enlace para VTune

Aquí está el enlace para el libro.