2016-05-03 4 views
1

Ich benutze Intel VTune, um mein Programm zu profilieren.Wo ist Integer Vtune?

Die CPU, die ich verwende, ist IVY Bridge.

https://software.intel.com/en-us/node/589933

FP_COMP_OPS_EXE.X87 Anzahl der FP Computational Uops Ausgeführt dieses Zyklus:

die Hardware-Anweisung Ereignis kann alle hier. Die Anzahl der FADD-, FSUB-, FCOM-, FMUL-, Ganzzahl-MULsand-IMULs, FDIVs, FPREMs, FSQRTS, Ganzzahl-DIVs und IDIVs. Dieses Ereignis nicht ein FADD unterscheiden in der Mitte eines transzendentalen Strömung von einem

s verwendet

FP_COMP_OPS_EXE.X87 scheint Integer-Multiplikation und Division ganzer Zahlen aufzunehmen; Es gibt jedoch keine Integer-Addition und Integer-Subtraktion. Ich kann diese beiden Arten von Anweisungen nicht von der obigen Website finden.

Kann mir jemand sagen, was ist das Ereignis, das Integer Addition und Integer Subtraktion Anweisungen zählt?

+1

Es gibt keinen separaten Zähler für sie. Wenn Sie eine dynamische Zählung nur von 'add' /' sub' Befehlen wünschen, und nicht gleich billigen wie 'cmp',' and', 'xor', schauen Sie sich [binary instrumentation] an (http://stackoverflow.com/ Fragen/36650210/how-to-Profil-die-Anzahl-Ergänzungen-Mutltiplikationen-etc-with-vtune/36658984 # 36658984). 'add' ist eine der billigsten Anweisungen mit zwei Eingängen für jede normale CPU. Auf IvB läuft auf jedem ALU-Port: 1c Latenz, eine pro 0,333c Durchsatz. Nur 'mov reg, reg 'oder eine Nullstellung ist billiger. Siehe das [x86-Tag-Wiki] (http://stackoverflow.com/tags/x86/info). –

Antwort

1

Ich habe viel in Frage zu lesen, aber hier geht:

Es ist möglich, dass, wenn Ihr Code rechen gebunden ist man Wege finden, könnte die Bedeutung der Ganzzahl addiert und U-Boote, ohne sie direkt zu messen zu schließen. Zum Beispiel würde UOPS_RETIRED.ALL - FP_COMP_OPS_EXE.ALL Ihnen eine sehr grobe Schätzung von Adds und Subs geben, vorausgesetzt, Sie haben bereits etwas getan, um festzustellen, dass Ihr Code compute-gebunden ist.

Haben Sie? Wenn nicht, kann es hilfreich sein, mit der grundlegenden Analyse von VTune zu beginnen und dann Speicher-, Cache- und Front-End-Engpässe zu beseitigen. Wenn Sie dies bereits getan haben, haben Sie ein paar Optionen:

  • Querverweis UOPS_DISPATCHED_PORT mit einem Ivy-Bridge-Blockdiagramm, oder noch besser, eine Liste von denen bestimmte Arten von Arithmetik auf welchen Ports ausführen kann (was ich nicht finden kann).
  • Ändern Sie Ihre Programmquelle, Compilerflags oder Assembly, führen Sie ein grobkörnigeres Profil wie die Basisanalyse erneut aus und sehen Sie, ob Sie einen Einfluss auf der Ebene einer Kennzahl wie INST_RETIRED.ANY/CPU_CLK_UNHALTED sehen.

Sorry, es scheint keine direktere Antwort zu geben.

+1

Agner Fog hat getestet, welche Anweisungen welche Ports verwenden können, und veröffentlichte [Anweisungstabellen] (http://agner.org/optimize/). 'add',' sub', 'xor' und viele andere der einfachsten Integer-Anweisungen können auf jedem ALU-Port in jeder CPU ausgeführt werden. Das macht es zu einer dummen Frage: 'add' und' sub' sind nicht speziell und konkurrieren um dieselben Ausführungsressourcen wie so ziemlich alles andere. (Im Gegensatz zu FP add und mul, die auf begrenzten Ports laufen). –

+0

Danke, genau das habe ich gesucht. Hätte gedacht, es mit Agner zu besprechen. Ich stimme dem Verdacht zu, dass diese Frage spezifischer ist, als das OP wahrscheinlich wirklich stellen möchte, um die meisten der realen Anwendungsfälle anzusprechen, die mir auf diesem Weg helfen würden, aber ich mache meine Am besten, um es freundlich zu lesen. Ich bin nicht überzeugt, dass es "albern" ist. Du könntest aber recht haben. –

+1

Das ist wahr, es ist etwas, was Sie sich fragen könnten, während Sie eine Skalarschleife optimieren, die einige Integer-Additionen ausführt, oder Add-Anteil als Teil des Schleifen-Overheads für Zeigerinkremente messen wollten. Das OP hat sicherlich kein Szenario vorgeschlagen, das solch eine komische Anfrage erklären würde. (Das ist die andere Sache: 'add' ist ein normaler Teil des Schleifen-Overheads, aber das Zählen von' fadd' zählt nur "work"). Wie auch immer, deine Antwort "tu das nicht, tu das stattdessen" ist ein nützlicherer Ratschlag, der 'add' insns mit binärer Instrumentierung oder so etwas zählt. –