Question

Je veux mesurer la ammount de la virgule flottante et des opérations arithmétiques exécutées par une application avec « perf », la nouvelle commande d'interface de ligne de commande pour le sous-système de compteur de performance linux. (Voir ci-dessous des fins de test j'utiliser une application simple factice que je créé,).

Parce que je ne pouvais pas trouvé aucun événement « perf » définis pour la mesure de FP et entier des opérations, j'ai commencé à creuser dans les codes d'événement de matériel brut (à utiliser avec -rNNN, où NNN est la valeur hexadécimale du code de l'événement). Donc, mon vrai problème est que, les codes que j'ai trouvé des instructions à la retraite (INST_RETIRED) ne font pas la distinction entre FP et d'autres instructions (X87 et MMX / SSE). Quand j'ai essayé d'utiliser les umasks appropriés au code particulier, je trouve que en quelque sorte « perf » ne comprend pas ou soutenir l'inclusion umask. J'ai essayé avec:

% perf stat -e rC0 ./a.out

qui me donne les instructions à la retraite, mais

% perf stat -e rC002 ./a.out 

qui devrait me donner les instructions X87 exécutées dit que je fournis des paramètres erronés. Peut-être, mais quelle est la bonne façon d'utiliser umasks des événements matériels bruts avec « perf »? en général ce qui est le moyen d'obtenir le nombre exact de opérations en virgule flottante et entier un programme exécuté en utilisant l'outil de perf?

Merci, Konstantin Boyanov


Voici mon application de 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;
  }
}
Était-ce utile?

La solution

L'événement à utiliser dépend du processeur. Vous pouvez utiliser libpfm4 (http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi) pour déterminer quels sont les événements disponibles (en utilisant le programme showevinfo), puis check_events de la même distribution à comprendre l'état brut codes pour l'événement. Mon CPU Sandy Bridge soutient l'événement FP_COMP_OPS_EXE que je empiriquement étroitement correspond au nombre FLOP.

Autres conseils

Je ne suis pas sûr de perf, mais oprofile a flottante des événements ponctuels pour de nombreux processeurs. Il peut y avoir un certain chevauchement, comme INST_RETIRED est un événement oprofile valide aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top