Pregunta

Quiero medir la ammount de punto flotante y operaciones aritméticas realizadas por alguna aplicación con 'Potencia', la nueva línea de comandos comando de interfaz con el subsistema de contador de rendimiento de Linux. (Para propósitos de prueba utilizo una aplicación sencilla ficticio que creé, véase más adelante).

Debido a que no podía encontrar ningún evento '' Potencia definidos para la medición de FP y las operaciones de enteros, que comenzó a cavar en los códigos de eventos de hardware prima (para ser utilizado con -rNNN, donde NNN es el valor hexadecimal del código de evento). Así que mi problema real es que, los códigos que he encontrado para las instrucciones de jubilados (INST_RETIRED) no hacen la distinción entre FP y otras instrucciones (X87 y MMX / SSE). Cuando traté de utilizar los umasks apropiadas para el código particular, descubrí que de alguna manera 'Potencia' no comprende o no apoyar la inclusión máscara de usuario. He intentado con:

% perf stat -e rC0 ./a.out

lo que me da las instrucciones retirados, pero

% perf stat -e rC002 ./a.out 

lo que me deben dar las instrucciones x87 ejecutados dice que suministré parámetros erróneos. Tal vez sea así, pero ¿cuál es la forma correcta de utilizar umasks de eventos de hardware primas con 'Potencia'? en general, ¿cuál es la manera de obtener el número exacto de las operaciones de enteros y en coma flotante de un programa ejecutado utilizando la herramienta de Potencia?

Muchas gracias, Konstantin Boyanov


Aquí está mi aplicación de prueba:

int main(void){
  float  numbers[1000];
  float res1;
  double doubles[1000];
  double res2;

  int i,j=3,k=42;

  for(i=0;i<1000;i++){
    numbers[i] = (i+k)*j;
    doubles[i] = (i+j)*k;
    res1 = numbers[i]/(float)k;
    res2 = doubles[i]/(float)j;
  }
}
¿Fue útil?

Solución

El evento a utilizar depende de la del procesador. Puede utilizar libpfm4 (http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi) para determinar cuáles son los eventos disponibles (utilizando el programa de showevinfo) y luego check_events de la misma distribución de averiguar la prima códigos para el evento. Mi CPU Sandy Bridge apoya el evento FP_COMP_OPS_EXE que he encontrado empíricamente se corresponde estrechamente con la cuenta flop.

Otros consejos

No estoy seguro acerca de Potencia, pero oprofile ha flotante de eventos de punto para muchos procesadores. Puede haber cierta superposición, como INST_RETIRED es un evento oprofile válida también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top