Domanda

voglio misurare la quantità degli virgola mobile e di operazioni aritmetiche eseguite da alcune applicazioni con 'perf', il nuovo comando di interfaccia a riga di comando per il sottosistema contatore delle prestazioni di Linux. (A scopo di verifica che uso una semplice applicazione manichino che ho creato, vedi sotto).

Perché non riuscivo a trovare tutti gli eventi 'Potenza' definiti per la misurazione e la FP intero operazioni, ho iniziato a scavare nei codici evento hardware grezzo (da utilizzare con -rNNN, dove nnn è il valore esadecimale del codice evento). Quindi il mio vero problema è che, i codici che ho trovato per le istruzioni in pensione (INST_RETIRED) non fanno distinzione tra FP e altre istruzioni (X87 e MMX / SSE). Quando ho cercato di utilizzare i umask appropriati per il particolare codice ho scoperto che in qualche modo 'perf' non capisce o sostenere l'inclusione umask. Ho provato con:

% perf stat -e rC0 ./a.out

che mi dà le istruzioni in pensione, ma

% perf stat -e rC002 ./a.out 

che mi dovrebbe dare le istruzioni x87 eseguite dice ho fornito i parametri sbagliati. Forse è così, ma qual è il modo corretto di utilizzare umask di eventi hardware prime con 'perf'? in generale qual è il modo per ottenere il numero esatto di operazioni in virgola mobile e un programma eseguito utilizzando lo strumento perf?

Molte grazie, Konstantin Boyanov


Ecco la mia applicazione di test:

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;
  }
}
È stato utile?

Soluzione

L'evento di utilizzo dipende dal processore. È possibile utilizzare libpfm4 (http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi) per determinare quali sono gli eventi disponibili (utilizzando il programma showevinfo) e poi check_events dalla stessa distribuzione per capire le materie prime i codici per l'evento. La mia CPU Sandy Bridge supporta l'evento FP_COMP_OPS_EXE che ho trovato empiricamente corrisponde strettamente al conte FLOP.

Altri suggerimenti

Non sono sicuro su perf, ma oprofile ha eventi in virgola mobile per molti processori. Ci può essere qualche sovrapposizione, come INST_RETIRED è un evento oprofile valida anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top