jueves, 2 de febrero de 2017

Análisis de algoritmos de inteligencia artificial mediante PerfMonitor – LowLevelHardware

Este análisis lo he llevado a cabo en uno de mis sistemas Intel Core 2 Quad de la serie 9000 (stepping E0) con 12 MB (6 + 6) caché de L2 basado en núcleos Penryn de 45 nm a 3.4 GHz y con memoria de 4 GB a 1066 MHz, FSB1600 y Performance Level 5 para una excelente latencia de memoria de solamente 52 ns en Everest.

PIC03281

El software escogido es PerfMonitor, una aplicación freeware y portable que analicé someramente en un artículo anterior.

La carga de trabajo analizada son los algoritmos de cálculo utilizados en el sistema analizado en los siguientes artículos de ProfessionalSAT:

Core i7 @ 4.2 GHz. Algoritmos de inteligencia artificial. Parte III – ProfessionalSAT

Core i7 @ 4.2 GHz. Algoritmos de inteligencia artificial. Parte II – ProfessionalSAT

Sistemas de Altas Prestaciones, algoritmos de Inteligencia Artificial. Parte I – ProfessionalSAT

Todos los resultados son del Core 0 del procesador Core 2 Quad, aunque se pueden extrapolar a los demás pues son idénticos.

Image2

En primer lugar observamos cuatro lecturas:

  • Non Halted Clock Cicles: ciclos del procesador en actividad. Podemos ver que lo 3400 M de ciclos por segundo la CPU está ocupada. Uso de CPU: 100%.
  • Instructions Decoded: número total de instrucciones descodificadas por segundo. Vemos unos 4070M de instrucciones por segundo, más de una por ciclo (1.19 por ciclo).
  • Bus Clock Cicles: ciclos de uso del FSB. 100% de uso del FSB.
  • IPC: 0.9 instrucciones/ciclo ejecutadas.

Image3

En esta captura podemos ver:

  • Retired Mispredicted Branches: fallos de predicción del Branch prediction. 21.3 M por segundo.
  • Retired Branches: Branches (en millones) retiradas (procesadas) por segundo. 373 M Branch/s.
  • Retired Instructions: total de instrucciones procesadas y retiradas por segundo en millones. 2345 M instrucciones/s.
  • Branch Prediction Success Rate: tasa de acierto de los predictores de saltos del procesador Core i7 en este algoritmo: 94.3 %.

Image6 

Aquí observamos:

  • Retired Instructions: total de instrucciones procesadas y retiradas por segundo en millones. 2345 M instrucciones/s.
  • LLC Request: peticiones del procesador al LLC (Last Level Caché), en este caso las L2 unificadas de 6 MB, en millones por segundo. 145.9 M/s. Esto indica una importante tasa de fallos de las pequeñas L1 de 32 KB como ya he comentado en otros artículos hablando de los procesadores Core2.
  • LLC Mises: fallos de la L2 de 6 MB. 1.9 M/s. En este caso el procesador hace una petición por el FSB al chipset para pedir un acceso a RAM.
  • LLC Success Rate: Tasa de aciertos de la L2. 98.7 %. Excelente tasa gracias al gran tamaño de 6 MB para cada dos núcleos.

PIC03241

En un sentido más práctico comentar que esta carga de trabajo contiene un mix de instrucciones de enteros y su velocidad de ejecución viene marcada por la altísima cantidad de branches en el código lo que hace inevitable un alto número absoluto de fallos de predicción que acarrean latencias de “recuperación” del fallo de predicción.

Para minimizar esta latencia es crítica una configuración extrema en la frecuencia del Uncore y en las latencias y anchos de banda de L3 y memoria y también del subsistema de disco.

Si consideras útil el contenido de este Blog, ayuda a mantenerlo ojeando algunas de las ofertas que consideres interesantes de nuestros anunciantes.