DE102016103019A1 - Hardwaregestützte Kantenprofilerstellung - Google Patents

Hardwaregestützte Kantenprofilerstellung Download PDF

Info

Publication number
DE102016103019A1
DE102016103019A1 DE102016103019.8A DE102016103019A DE102016103019A1 DE 102016103019 A1 DE102016103019 A1 DE 102016103019A1 DE 102016103019 A DE102016103019 A DE 102016103019A DE 102016103019 A1 DE102016103019 A1 DE 102016103019A1
Authority
DE
Germany
Prior art keywords
program code
executed
track
trace
hops
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE102016103019.8A
Other languages
English (en)
Inventor
Grigori Chtrasberg
Moshe Klausner
Nitzan Peleg
Yaakov Yaari
Lukas Kull
Thomas Morf
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102016103019A1 publication Critical patent/DE102016103019A1/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Ein Verfahren, aufweisend: Zählen jedes Vorkommens eines Hardwareereignisses durch einen Leistungsüberwachungszähler eines Hardwareprozessors während der Ausführung eines Zielprogrammcodes; geordnetes und fortlaufendes Speichern einer vordefinierten TBT-Größe von letzten ausgeführten Sprüngen des Zielprogrammcodes während seiner Ausführung in einem Puffer einer Verfolgungseinrichtung für ausgeführte Sprünge (Taken Branch Trace (TBT) Facility) des Hardwareprozessors; jedes Mal, wenn das Zählen gleich einer Abtastrate ist, Auslösen eines Abtastens des Puffers, um eine TBT zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist; Aufbauen einer vollen Sprungverfolgungsspur für jede TBT auf Grundlage des Zielprogrammcodes; Entnehmen einer vordefinierten Größe einer ausgeschnittenen Sprungverfolgungsspur (Chopped Branch Trace (CBT)) von letzten Sprüngen aus jeder vollen Sprungverfolgungsspur, um eine ausgeschnittene Sprungverfolgungsspur für jede TBT zu erhalten; und inkrementelles Speichern jeder ausgeschnittenen Sprungverfolgungsspur, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.

Description

  • HINTERGRUND
  • Die vorliegende Erfindung betrifft das Gebiet der rückführungsgeleiteten Codeoptimierung.
  • Rückführungsgeleitete Codeoptimierung (einschließlich Basisblockumordnen, Funktions-Inlining, Schleifenaufrollen usw.) stellt eine vorteilhafte Programmoptimierung dar, die von allen Arten von Programmoptimierungswerkzeugen, einschließlich statische Optimierungswerkzeuge (z. B. Kompilierer und Post-Link-Optimierer) sowie dynamische Optimierungswerkzeuge, verwendet wird. Während ein Kantenprofil im Gegensatz zu zum Beispiel Basisblockprofilen hoch effizient für solch eine Optimierung ist, kann die Aufgabe des Erfassens eines Kantenprofils schwieriger sein.
  • Die vorhergehenden Beispiele des Standes der Technik und damit verbundene Einschränkungen sollen veranschaulichend und nicht ausschließend sein. Andere Einschränkungen des Standes der Technik werden für den Fachmann bei einem Lesen der Patentschrift und einem Studium der Figuren ersichtlich.
  • KURZDARSTELLUNG
  • Die folgenden Ausführungsformen und Aspekte davon werden in Zusammenhang mit Systemen, Werkzeugen und Verfahren beschrieben und veranschaulicht, die beispielhaft und veranschaulichend, den Umfang nicht einschränkend, beabsichtigt sind.
  • Es wird gemäß einer Ausführungsform ein Verfahren bereitgestellt, aufweisend: Zählen jedes Vorkommens eines Hardwareereignisses durch einen Leistungsüberwachungszähler (Performance Monitoring Counter (PMC)) eines Hardwareprozessors während der Ausführung eines Zielprogrammcodes; geordnetes und fortlaufendes Speichern einer vordefinierten Größe einer Verfolgungsspur ausgeführter Sprünge (Taken Branch Trace (TBT) size) von letzten ausgeführten Sprüngen des Zielprogrammcodes während seiner Ausführung in einem Puffer einer Verfolgungseinrichtung für ausgeführte Sprünge (Taken Branch Trace Facility (TBTC)) des mindestens einen Hardwareprozessors; jedes Mal, wenn das Zählen gleich einer Abtastrate ist, Auslösen eines Abtastens des Puffers, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist; Aufbauen einer vollen Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes, wobei die volle Sprungverfolgungsspur alle abgeschlossenen Sprünge des Zielprogrammcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge aufweist; Entnehmen einer vordefinierten Größe einer ausgeschnittenen Sprungverfolgungsspur (Chopped Branch Trace (CBT) size) aus jeder vollen Sprungverfolgungsspur, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten; und inkrementelles Speichern jeder ausgeschnittenen Sprungverfolgungsspur, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.
  • Es wird gemäß einer weiteren Ausführungsform ein Computerprogrammprodukt bereitgestellt, das ein nichtflüchtiges computerlesbares Datenspeichermedium mit damit ausgebildetem Betriebsprogrammcode bereitgestellt, wobei der Betriebsprogrammcode durch mindestens einen Hardwareprozessor ausführbar ist, wobei der mindestens eine Hardwareprozessor konfiguriert ist: jedes Vorkommen eines Hardwareereignisses während der Ausführung eines Zielprogrammcodes zu zählen; geordnet und fortlaufend eine vordefinierte TBT-Größe von letzten ausgeführten Sprüngen des Zielprogrammcodes während seiner Ausführung in einem Puffer zu speichern; und jedes Mal, wenn das Zählen gleich einer Abtastrate ist, ein Abtasten des Puffers auszulösen, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist, und wobei der Betriebsprogrammcode durch den mindestens einen Hardwareprozessor ausführbar ist, um: eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes aufzubauen, wobei die volle Sprungverfolgungsspur alle abgeschlossenen Sprünge des Zielprogrammcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge aufweist; eine vordefinierte CBT-Größe von letzten Sprüngen aus jeder vollen Sprungverfolgungsspur zu entnehmen, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten; und jede ausgeschnittene Sprungverfolgungsspur inkrementell zu speichern, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.
  • Es wird gemäß einer weiteren Ausführungsform ein System bereitgestellt, das mindestens einen Hardwareprozessor aufweist, wobei der mindestens eine Hardwareprozessor aufweist: eine Verfolgungseinrichtung für ausgeführte Sprünge (TBTC), die einen Puffer aufweist, wobei die TBTC konfiguriert ist, geordnet und kontinuierlich eine vordefinierte TBT-Größe von letzten ausgeführten Sprüngen von mehreren Sprüngen eines Zielprogrammcodes während seiner Ausführung in dem Speicher zu speichern; einen Leistungsüberwachungszähler (PMC), der konfiguriert ist, während des Ausführens des Zielprogrammcodes: a. jedes Vorkommen eines Hardwareereignisses zu zählen, und b. jedes Mal, wenn die Zahl gleich einer Abtastrate ist, ein Abtasten der BTF auszulösen, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist, wobei der Hardwareprozessor konfiguriert ist, durch Ausführen eines Betriebsprogrammcodes: eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes aufzubauen, wobei die volle Sprungverfolgungsspur alle abgeschlossenen Sprünge des Zielprogrammcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge aufweist, eine vordefinierte CBT-Größe von letzten Sprüngen aus jeder vollen Sprungverfolgungsspur zu entnehmen, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten; und jede ausgeschnittene Sprungverfolgungsspur inkrementell in einer Datenspeichereinheit zu speichern, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.
  • In manchen Ausführungsformen wird das Speichern der vordefinierten TBT-Größe von letzten ausgeführten Sprüngen in einer zyklischen Weise durchgeführt.
  • In manchen Ausführungsformen ist die Abtastrate variabel, wobei der Abtastratenwert gleich einer vordefinierten Zahl ist, die mit einer zufällig gewählten Differenz aufsummiert wird, und die Werte der zufällig gewählten Differenz im Wesentlichen niedriger sind als der Wert der vordefinierten Zahl.
  • In manchen Ausführungsformen ist das Zählen gleich der Abtastrate, sobald ein nicht ausgeführter Sprung abgeschlossen ist, und wobei das Verfahren ferner ein Anhängen des nicht ausgeführten Sprungs an die volle Sprungverfolgungsspur aufweist.
  • In manchen Ausführungsformen handelt es sich bei dem Kantenprofil um ein Aufrufschaubildprofil, und bei dem Sprung handelt es sich um einen Funktionsaufruf.
  • In manchen Ausführungsformen ist das Vorkommen eines Hardwareereignisses ein Abschluss eines Sprungs des Zielprogrammcodes.
  • In manchen Ausführungsformen ist das Vorkommen eines Hardwareereignisses ein Abschluss einer Anweisung des Zielprogrammcodes.
  • In manchen Ausführungsformen ist die Abtastrate vordefiniert.
  • In manchen Ausführungsformen ist der Puffer zyklisch.
  • Zusätzlich zu den vorstehend beschriebenen beispielhaften Aspekten und Ausführungsformen werden weitere Aspekte und Ausführungsformen durch Bezugnahme auf die Figuren und durch Studium der folgenden detaillierten Beschreibung ersichtlich.
  • KURZBESCHREIBUNG DER FIGUREN
  • Beispielhafte Ausführungsformen werden in Figuren veranschaulicht, auf die Bezug genommen wird. Abmessungen von in den Figuren gezeigten Komponenten und Merkmalen sind allgemein für die Zweckmäßigkeit und Klarheit der Darstellung gewählt und nicht notwendigerweise maßstabsgerecht gezeigt. Die Figuren sind nachstehend aufgelistet.
  • 1 zeigt einen Ablaufplan eines Verfahrens, das gemäß einer Ausführungsform der offenbarten Technik aufgebaut und wirksam ist;
  • 2 zeigt eine schematische Darstellung eines beispielhaften Betriebsschemas von Hardware (einem Hardwareprozessor) und Software gemäß dem Verfahren von 1; und
  • 3 zeigt ein Steuerflussschaubild (Control Flow Graph (CFG)) eines beispielhaften Programms.
  • DETAILLIERTE BESCHREIBUNG
  • Das offenbarte Verfahren, der offenbarte Hardwareprozessor und das offenbarte Computerprogrammprodukt stellen ein zuverlässiges und einheitliches Kantenprofilerstellen auf Grundlage eines Ansatzes bereit, der sowohl genau als auch schlank ist, wodurch eine Softwareoptimierung auf eine schnellere Weise erlaubt wird.
  • Ein Schlüsselattribut für ein Kantenprofil ist Einheitlichkeit. Ein einheitliches Kantenprofil ist eines, bei dem das Verhältnis zwischen beliebigen zwei Kanten im Profil proportional zu dem des ganzen Kantenprofils ist (d. h. derart, dass beide Profile ein gleiches Maß an Kantenausbreitung zeigen). Da sich das Codeumordnen zum Beispiel mit der relativen Ausführungszahl der Kanten (auch als „Heat” bekannt) befasst, kann ein einheitliches Kantenprofil dieselbe Qualität besitzen wie ein ganzes Profil, sofern das Codeumordnen betroffen ist. Somit kann ein zuverlässiges einheitliches Kantenprofil entscheidend für viele rückführungsgeleitete Optimierungen sein, wie beispielsweise Basisblock-Codeumordnen und Funktions-Inlining. Die Verfügbarkeit solch eines solchen Profils kann für die zugrundeliegende Plattform einen Wettbewerbsvorteil bereitstellen.
  • Ein Erfassen eines einheitlichen Profils, das kleinere Ausführungszahlen als das ganze Profil besitzt, kann zu bevorzugen sein, da es weniger Aufwand besitzt und daher seine Auswirkungen auf das Programmausführen kleiner sind und ein präziseres Modell der realen Arbeitslast erhalten werden kann. Jüngste Prozessoren sind mit einer Einrichtung ausgestattet, die hier „Verfolgungseinrichtung für ausgeführte Sprünge” (Taken Branch Trace Facility (TBTF)) genannt wird und konfiguriert ist, eine Momentaufnahme (snapshot) von kurzen Verfolgungsspuren ausgeführter Sprünge aufzunehmen. Üblicherweise werden diese Momentaufnahmen in festen Intervallen von Anweisungen oder Zyklen aufgenommen. Das Erfassen eines Kantenprofils unter Verwendung dieser Verfolgungsspuren ausgeführter Sprünge ist nicht einheitlich, weil es aus ausgeführten Sprüngen besteht und somit seine Spanne bezüglich des kompletten Sprungstroms variiert. Zusätzliche Verzerrungen ergeben sich beim Abtasten an Anweisungs- oder Zyklenintervallen wegen einer unterschiedlichen Verteilung von Sprüngen.
  • Die offenbarte Kantenprofilerstellung stellt ein Abtasten einer festen Menge von Informationen in festen (oder im Durchschnitt festen) sprungbezogenen Intervallen bereit, was ein Erzeugen eines zuverlässigen einheitlichen Kantenprofils erlaubt.
  • Glossar
  • Der Begriff „Sprung”, wie hierin bezeichnet, kann eine Anweisung in einem Programmcode (oder einfach „einem Programm”) betreffen, die bei Abarbeiten durch einen Computer den Computer veranlasst, die Ausführung einer anderen Ausführungssequenz zu beginnen, d. h. einen Sprung zu einem anderen Programmzähler als der nächsten Anweisung in der aktuellen Anweisungssequenz zu nehmen. Der Begriff „Sprung” kann sich auf jeden beliebigen Typ eines Sprungs beziehen, einschließlich einem bedingten oder unbedingten Sprung, einem Funktionsaufruf und einer Funktionsausgabe, einem direkten oder indirekten Sprung und Ähnliches.
  • Der Begriff „Abschluss eines Sprungs” kann sich auf die Handlung eines Abarbeitens einer Sprunganweisung durch einen Computer beziehen. Der Sprung kann dann ausgeführt werden oder nicht.
  • Der Begriff „ausgeführter Sprung”, wie hierin bezeichnet, kann sich auf eine abgearbeiteten Sprung beziehen, der den Computer veranlasst hat, die Ausführung einer anderen Anweisungssequenz an einem anderen Speicherort des Programms als die nächste Anweisungen zu beginnen (d. h. ein Verzweigen durchzuführen).
  • Der Begriff „nicht ausgeführter Sprung”, wie hierein bezeichnet, kann sich auf eine abgearbeiteten bedingten Sprung beziehen, der nicht ausgeführt wurde, da seine Bedingung nicht erfüllt war. Stattdessen kann der Computer mit dem Ausführen der aktuellen Anweisungssequenz beginnend mit der Anweisung, die der Anweisung des bedingten Sprungs folgt, fortfahren.
  • Der Begriff „Kantenprofil”, wie hierein bezeichnet, kann sich auf ein Profil beziehen, das die Anzahl festhält, mit der Sprünge in einem Programm ausgeführt wurden oder nicht ausgeführt wurden.
  • Der Begriff „volle Sprungverfolgungsspur” oder „volle Sprungverfolgung”, wie hierein bezeichnet, kann sich auf ein Speichern mehrerer aufeinander folgender Sprünge in einem Programm während seiner Ausführung beziehen, wobei die Sprünge zum Beispiel ausgeführt oder nicht ausgeführt sein können.
  • Der Begriff „Verfolgungsspur ausgeführter Sprünge” oder „Verfolgung ausgeführter Sprünge”, wie hierin verwendet, kann sich auf ein Speichern ausgeführter Sprünge entlang eines speziellen ausgeführten Pfads in einem Programm beziehen.
  • Der Begriff „Verfolgungseinrichtung für ausgeführte Sprünge” (Taken Branch Trace Facility (TBTC)) kann sich auf eine Einrichtung beziehen, die innerhalb derzeitiger Hardwareprozessoren strukturiert ist, die konfiguriert sind, eine Momentaufnahme von Verfolgungsspuren ausgeführter Sprünge aufzunehmen. Solche Einrichtungen sind unter verschiedenen Handelsnamen erhältlich, wie beispielsweise „History Rolling Buffer” (BHRB) auf dem „POWER8”-Prozessor von der IBM Corp. oder „Branch Trace Buffer” (BTB) auf dem „Itanium 2”-Prozessor von der Intel Corp. usw.
  • Die Begriffe „Größe einer Verfolgungsspur ausgeführter Sprünge” (Taken Branch Trace (TBT) size) und „Größe einer ausgeschnittenen Sprungverfolgungsspur (Chopped Branch Trace (CBT) size) können sich auf die Größe einer Verfolgungsspur ausgeführter Sprünge und entsprechend eine ausgeschnitten Sprungverfolgungsspur beziehen, wobei die Größe in einer Anzahl von Sprüngen gemessen wird.
  • Es wird nun Bezug auf 1 genommen, die einen Ablaufplan eines Verfahrens zeigt, das gemäß einer Ausführungsform der offenbarten Technik aufgebaut und wirksam ist. In einem Schritt 100 kann jedes Vorkommen eines Hardwareereignisses während der Ausführung eines Zielprogrammcodes gezählt werden. Bei dem Hardwareereignis kann es sich um einen Abschluss eines Sprungs oder einer Anweisung des Zielprogrammcodes handeln. Der Zielprogrammcode kann mehrere Sprünge und mehrere Anweisungen enthalten. Das Programm kann durch einen Benutzer bereitgestellt werden, um ein Kantenprofil für das Programm zu Zwecken der rückführungsgeleiteten Optimierung zu erzeugen. Der Zielprogrammcode kann sich auf den in einer Datenspeichereinheit gespeicherten Binärcode des Zielprogrammcodes beziehen.
  • In manchen Ausführungsformen kann es sich bei dem Hardwareereignis um einen Abschluss einer Anweisung des Zielprogrammcodes handeln. Eine zusätzliche Normierung kann in solchen Fällen aufgrund von Differenzen der Größe der Basisblöcke des Zielprogrammcodes erforderlich sein. Dementsprechend kann die Anzahl von Abtastungen (d. h. Verfolgungsspuren ausgeführter Sprünge), die in jedem Basisblock des Zielprogrammcodes abgetastet wurden, dann durch die Größe des Basisblocks dividiert werden.
  • Es wird nun Bezug auf 2 genommen, die eine schematische Darstellung eines beispielhaften Betriebsschemas von Hardware (einem Hardwareprozessor) und Software gemäß dem Verfahren von 1 zeigt. Das Verfahren von 1 kann zumindest teilweise durch einen Hardwareprozessor ausgeführt werden. Der Hardwareprozessor 220 kann durch ein zugrundeliegendes System bereitgestellt werden. Der Hardwareprozessor kann einen Leistungsüberwachungszähler (PMC) 250 enthalten. Der PMC 250 kann konfiguriert sein, jeden Abschluss eines ausgeführten oder nicht ausgeführten Sprungs in einem Programmbinärcode 200 während der Ausführung des Programmbinärcodes 200 zu zählen. Der Programmbinärcode 200 kann einen zu optimierenden Zielprogrammcode enthalten. Bei dem PMC 250 kann es sich um einen Hardwareleistungszähler handeln, wie er im Stand der Technik bekannt ist. Typische Hardwareprozessoren können eine Anzahl von PMCs enthalten, die an erweiterte Sätze (rich sets) von Ereignissen angebunden sind, die während der Ausführung (Anweisungsabschluss, Sprungabschluss usw.) auftreten können.
  • In manchen Ausführungsformen kann am Beginn des Programms ein PMC-Ereignisabwickler 260 an den Programmbinärcode 200 angebunden sein (z. B. durch einen Strang (thread), der den Programmbinärcode 200 ausführt), um auf einen Alarm (alert) durch den PMC 250 hin aufgerufen zu werden. Bei dem Ereignisabwickler 260 kann es sich um eine Subroutine handeln, die durch den PMC 250 aufgerufen werden kann. Der Programmbinärcode 200 kann dann das Ausführen über den Hardwareprozessor starten, während der Hardwareprozessor jedes Vorkommen eines Sprungs (mit B angezeigt) während der Ausführung des Programmbinärcodes 200 durch den PMC 250 zählt.
  • In einem Schritt 110 kann eine vordefinierte Größe einer Verfolgungsspur ausgeführter Sprünge (TBT) von letzten ausgeführten Sprüngen (d. h. eine vordefinierte Anzahl von letzten ausgeführten Sprüngen) des Zielprogrammcodes geordnet und kontinuierlich während der Ausführung des Programms in einem Puffer gespeichert werden. Die TBT-Größe von letzten ausgeführten Sprüngen kann in einer zyklischen Weise gespeichert werden, d. h. indem ein Puffer verwendet wird, dessen Größe gleich der TBT-Größe ist, da er Ende-zu-Ende verbunden ist. Unter Bezugnahme auf 2 kann der Hardwareprozessor ferner eine TBTF 230 enthalten. Die TBTF 230 kann einen zyklischen Puffer ausgeführter Sprünge 240 enthalten, dessen Größe gleich der TBT-Größe ist. Der Hardwareprozessor kann dementsprechend die TBT-Größe von letzten ausgeführten Sprüngen im zyklischen Puffer ausgeführter Sprünge 240 speichern.
  • In einem Schritt 120 kann jedes Mal, wenn das Zählen (d. h. gemäß Schritt 100) gleich einer Abtastrate ist (d. h. Abtasten pro Anzahl abgeschlossener Sprünge) das Abtasten des Puffers ausgelöst werden, um eine Verfolgungsspur ausgeführter Sprünge einschließlich der aktuellen TBT-Größe von letzten ausgeführten Sprüngen zu empfangen.
  • Unter Bezugnahme auf 2 kann der PMC 250 konfiguriert sein, das Abtasten der TBTF 230 gemäß der Abtastrate auszulösen (d. h. dem Auslöseereignis). Wenn solch ein Ereignis auf einen Abschluss einer Abtastraten-Sprunganweisung B (d. h. eine N-te Sprunganweisung, wobei N gleich der Abtastrate ist) eintritt, kann der PMC 250 einen PMC-Alarm an den PMC-Ereignisabwickler 260 ausgeben. Der PMC 250 kann auf einen gewählten Wert (die Abtastrate) voreingestellt sein und kann jedes Mal, wenn ein Sprung abgeschlossen wird, um eins verringert werden. Wenn der PMC 250 null erreicht, kann er ein Interrupt erzeugen, das es dem PMC-Ereignisabwickler 260 erlaubt, die TBTF 230 abzutasten. Der PMC-Ereignisabwickler 260 kann dann die TBTF 230 abtasten, wobei die Verfolgungsspur ausgeführter Sprünge abgerufen wird, mit T angegeben. Bei T kann es sich um eine geordnete Liste der TBT-Größe von letzten ausgeführten Sprüngen, T[0: TBT_Größe – 1], handeln, wobei zum Beispiel T[0] der älteste im zyklischen Puffer ausgeführter Sprünge 240 gespeicherte Sprung ist und T[TBT_Größe – 1] der jüngste Sprung ist. Der PMC-Ereignisabwickler 260 kann T an einem Programmablaufverfolger (Program Flow Tracer (PFT)) 270 übermitteln. Bei dem PFT 270 kann es sich um ein Stück Software handeln, das als ein Strang ausgeführt wird und auf ein Erzeugen einer Spur des Programmablaufs abzielt. Der PMC-Ereignisabwickler 260 kann dann zurückkehren, wobei der TBTF 230 signalisiert wird, den Betrieb wiederaufzunehmen. Dies geschieht, um einen Eingriff in die Programmausführung zu minimieren. Die TBTF 230 kann während des Betriebs des PMC-Ereignisabwicklers 260 üblicherweise deaktiviert werden, sodass sie die Aktivität des PMC-Ereignisabwicklers 260 nicht zählt.
  • In manchen Ausführungsformen kann die Abtastrate vordefiniert sein. In manchen Ausführungsformen kann die Abtastrate variabel und im Durchschnitt fest sein. Die Abtastrate kann im Durchschnitt fest sein, indem ihr Wert gleich einer vordefinierten Zahl, die mit einer zufällig gewählten Differenz aufsummiert wird, und so festgelegt wird, dass die Abtastrate im Wesentlichen im Durchschnitt gleich der vordefinierten Zahl ist.
  • Die Werte der zufällig gewählten Differenz können im Wesentlichen niedriger als der Wert der vordefinierten Zahl sein, um das Abtasten einheitlich zu halten. Somit kann der Wert der Abtastrate variabel sein, jedoch um den Wert der vordefinierten Zahl liegen. Diesen Ansatz kann man anwenden, um eine Synchronisierung mit einem Stück des Zielprogrammcodes zu verhindern, was zu einer verzerrten Abtastspur führen kann. Somit kann der PMC 250 konfiguriert sein, jedes Mal, wenn eine Verfolgungsspur ausgeführter Sprünge erzeugt wird, eine Differenz zufällig auszuwählen. Des Weiteren kann laut Chen et al., D. (kein Datum). „Taming Hardware Event Samples for FDO Compilation". Verfügbar unter: „http://www.australianscience.com.au/research/google/36358.pdf" [Zugriff am 30. Okt. 2014], ein zufälliges Abtasten die Einheitlichkeit des Abtastens selbst in Abwesenheit von Synchronisierung verbessern.
  • Die Größe des zyklischen Puffers und die Rate des Abtastens kann eine Softwareeinstellung der Hardware und kann je Hardwarestrang oder Hardwarekern oder Zentraleinheit (Central Processing Unit (CPU)) abhängig von der verfügbaren Hardware sein.
  • In einem Schritt 130 kann eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes aufgebaut werden. Die volle Sprungverfolgungsspur kann alle abgeschlossenen Sprünge des Zielprogrammcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge enthalten. Unter spezieller Bezugnahme auf 2 kann der PFT 270 für jede Verfolgungsspur ausgeführter Sprünge T den Code im Programmbinärcode 200 ab dem ältesten Sprung in der Verfolgungsspur ausgeführter Sprünge T fortlaufend abtasten. Der PFT 270 kann dann alle abgeschlossenen Sprünge, einschließlich ausgeführte und nicht ausgeführte, die er finden kann, speichern, wenn er durch den Programmausführungsablauf geht, wie in der Verfolgungsspur ausgeführter Sprünge T abgetastet, wodurch eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge T aufgebaut wird.
  • Es wird nun Bezug auf 3 genommen, die ein CFG eines beispielhaften Programms zeigt. Die Beschriftungen bc1, bc2 usw. geben bedingte Sprünge an (d. h. „bc” steht für „branch conditional” (bedingt springen)). Die Beschriftung T gibt die Option an, den Sprung auszuführen. Die Beschriftung NT gibt die Option an, den Sprung nicht auszuführen. Die durchgehenden Linien geben den tatsächlichen Programmablauf an, d. h. welche Sprünge abgeschlossen wurden und ob sie ausgeführt wurden oder nicht. Die gestrichelten Linien geben die nicht ausgeführten Pfade im Code an. Eine volle Sprungverfolgungsspur kann zum Beispiel für dieses CFG im Falle erzeugt werden, dass die TBT-Größe gleich 4 ist und die Abtastrate größer oder gleich 5 ist, was dementsprechend vier ausgeführte Sprünge beinhaltet: bc1, bc2, bc4 und den Auslösesprung (d. h. unter der Annahme, dass der Auslösesprung ein ausgeführter Sprung ist) sowie fünf abgeschlossene Sprünge: bc1, bc2, bc3, bc4 und den Auslösesprung. Der älteste ausgeführte Sprung ist bc1, und der jüngste ausgeführte Sprung ist der Auslösesprung. Alle ausgeführten Sprünge, d. h. bc1, bc2, bc4 und der Auslösesprung können aus der Verfolgungsspur ausgeführter Sprünge entnommen werden. Die volle Sprungverfolgungsspur kann sich dementsprechend zwischen dem ältesten Sprung, bc1, und dem jüngsten ausgeführten Sprung, dem Auslösesprung, erstrecken. Die nicht ausgeführten Sprünge, d. h. bc3, können aus dem Zielprogrammcode entnommen werden.
  • In einem Schritt 140 kann eine vordefinierte Größe einer ausgeschnittenen Sprungverfolgungsspur (CBT) von letzten Sprüngen (d. h. eine vordefinierte Anzahl letzter Sprünge) aus jeder vollen Sprungverfolgungsspur entnommen werden, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten. Die CBT-Größe kann höchstens gleich der vordefinierten TBT-Größe sein, um den Fall einzubeziehen, in dem die Sprünge in der vollen Sprungverfolgungsspur sämtlich ausgeführte Sprünge sind.
  • Unter Bezugnahme auf 2 kann der PFT 270 die letzte gespeicherte CBT-Größe von Sprüngen von jeder vollen Sprungverfolgungsspur entnehmen, wobei aus ihnen eine mit F bezeichnete ausgeschnittene Sprungverfolgungsspur gebildet wird. Der PFT 270 kann dann die ausgeschnittene Sprungverfolgungsspur F an einen Kantenerfasser (Edge Collector (EC)) 280 übermitteln. Der EC 180 kann Zähler für jede ausgeführte Kante (d. h. Sprung) im Programm unterhalten, um die Anzahl zu zählen, mit der sie abgetastet wurde. Auf solche Zähler kann zum Beispiel unter Verwendung einer herkömmlichen Hashwertbildung, herkömmlichen Caching-Verfahren oder einem herkömmlichen CFG mit gewichteten Kanten zugegriffen werden. Vorteilhafterweise kann die CBT-Größe so definiert werden, dass sie so groß wie möglich ist, um eine Erfassung von maximalen Informationen in jeder Abtastinstanz zu erlauben, und dass die CBT-Größe fest ist, um Einheitlichkeit zu erreichen. Somit kann die CBT-Größe der Maximalanzahl von Sprüngen entsprechen, die in jeder Verfolgungsspur ausgeführter Sprünge zu finden sind, und daher kann die CBT-Größe so definiert sein, dass sie gleich der TBT-Größe ist. Wenn es sich bei der Sprunganweisung B, welche den Alarm verursacht hat (d. h. gemäß der Abtastrate) um einen nicht ausgeführten Sprung handelt, kann er in manchen Ausführungsformen an die volle Sprungverfolgungsspur angehängt werden. Unter Bezugnahme auf 2 kann in solch einem Fall der PMC-Ereignisabwickler 260 die volle Sprungverfolgungsspur vom letzten ausgeführten Sprung bis B abschließen. Dementsprechend endet die ausgeschnittene Sprungverfolgungsspur F in B. Wenn B aus irgendeinem Grund nicht angehängt werden kann (z. B. dass er nicht zuverlässig durch die Architektur gespeichert wurde), kann eine kleinere Verzerrung hin zu ausgeführten Sprüngen vorliegen, da es sich beim letzten Sprung in der abgetasteten Verfolgungsspur immer um einen ausgeführten Sprung handelt.
  • In einem Schritt 150 kann jede ausgeschnittene Sprungverfolgungsspur inkrementell gespeichert werden, um ein Kantenprofil des Zielprogrammcodes zu erzeugen. Unter Bezugnahme auf 2 kann der EC 280 jede ausgeschnittene Sprungverfolgungsspur in einer Datenspeichereinheit (nicht gezeigt) inkrementell speichern. Der EC 280 kann dann das sich ergebende Profil auf Anforderung erzeugen, wenn oder nachdem der Programmbinärcode 200 abgeschlossen ist oder während der Laufzeit.
  • Gemäß dem offenbarten Kantenprofilerstellen wird die ursprüngliche Verfolgungsspur ausgeführter Sprünge T der TBT-Größe von ausgeführten Sprüngen in eine CBT-Größen-Sprungabtastung F umgewandelt, indem die letzte CBT-Größe solcher Sprünge berücksichtigt wird. Wenn somit die TBTF in gleichen Intervallen, z. B. von abgearbeiteten Sprüngen, abgetastet wird, kann man jedes Mal, wenn exakt die CBT-Größe solcher Sprünge abgetastet wird, ein einheitliches Kantenprofil erhalten. Man kann die komplette Verfolgungsspur aller Sprünge, die während der Ausführung abgearbeitet werden, als eine lange Zeichenkette S von (ausgeführten oder nicht ausgeführten) Sprüngen berücksichtigen. Ein Abtasten gemäß der Abtastrate (z. B. jede definierte Anzahl von Sprüngen) und Ansehen der letzten CBT-Größe von Sprüngen tastet S wirksam in festen Intervallen ab (d. h. hinsichtlich abgearbeiteter Sprünge). Somit kann die Wahrscheinlichkeit für einen Sprung, in einer abgetasteten Verfolgungsspur zu erscheinen, dieselbe sein, wie sein Anteil in S.
  • Ferner wird ein System offenbart. Das System kann einen Hardwareprozessor beinhalten. Der Hardwareprozessor kann gemäß dem Verfahren von 1 arbeiten und kann dem Hardwareprozessor von 2 ähneln. Der Hardwareprozessor kann eine TBTC und mindestens einen PMC beinhalten. Die TBTC kann ferner einen Puffer beinhalten. Die TBTC kann konfiguriert sein, während des Ausführens des Zielprogrammcodes in dem Puffer eine vordefinierte TBT-Größe von letzten ausgeführten Sprüngen geordnet und kontinuierlich zu speichern. Der PMC kann konfiguriert sein, während des Ausführens des Zielprogrammcodes jedes Vorkommen eines Hardwareereignisses zu zählen und jedes Mal, wenn die Zahl gleich einer Abtastrate ist, ein Abtasten der BTF auszulösen, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten. Die Verfolgungsspur ausgeführter Sprünge kann eine aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen beinhalten. Das System kann einen oder mehrere Hardwareprozessoren beinhalten, die konfiguriert sind, das Verfahren von 1 durchzuführen.
  • Der Hardwareprozessor kann konfiguriert sein, durch Ausführen dedizierter Software (d. h. einschließlich Programmcode, der hierin im Gegensatz zum Zielprogrammcode als Betriebsprogrammcode bezeichnet wird) eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes aufzubauen und eine vordefinierte CBT-Größe von letzten Sprüngen aus jeder vollen Sprungverfolgungsspur zu entnehmen, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten. Des Weiteren kann der Hardwareprozessor konfiguriert sein, durch Ausführen dedizierter Software jede ausgeschnittene Sprungverfolgungsspur inkrementell in einer Datenspeichereinheit zu speichern, um ein Kantenprofil des Zielprogrammcodes zu erzeugen. In manchen Ausführungsformen kann ein zusätzlicher separater Hardwareprozessor die dedizierte Software ausführen, um eine volle Sprungverfolgungsspur aufzubauen, eine ausgeschnittene Sprungverfolgungsspur und ein Kantenprofil zu erzeugen. In manchen Ausführungsformen kann das Aufbauen einer vollen Sprungverfolgungsspur einer ausgeschnittenen Sprungverfolgungsspur und eines Kantenprofils, wie vorstehend beschrieben, ebenso durch Hardware, wie beispielsweise den Hardwareprozessor, durchgeführt werden.
  • In manchen Ausführungsformen kann es sich bei dem Kantenprofil um ein Aufrufschaubildprofil handeln. Bei einem Aufrufschaubildprofil kann es sich um einen Teilsatz des Kantenprofils handeln, der nur Funktionsaufrufkanten beinhaltet. Ein Aufrufschaubildprofil kann die Basis für wichtige Optimierung auf Funktionsebene, wie Funktions-Inlining, darstellen. Da es sich um einen kleineren Teilsatz des allgemeinen Kantenprofils handelt, kann er mit höherer Frequenz abgetastet werden, um ein detaillierteres Aufrufprofil ohne zusätzlichen Aufwand zu erhalten.
  • Ein Aufrufschaubildprofil kann in einer einem Kantenprofil ähnlichen Weise, wie hierin vorstehend beschrieben, mit den erforderlichen Modifikationen erzeugt werden. Zum Beispiel kann in solchen Ausführungsformen die TBTF konfiguriert sein, nur direkte und indirekte Funktionsaufrufe zu speichern, und der PMC kann konfiguriert sein, alle direkten und indirekten Funktionsaufrufe zu zählen.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann ein computerlesbares Datenspeichermedium (oder -medien) mit darauf befindlichen computerlesbaren Programmanweisungen beinhalten, um einen Prozessor zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem computerlesbaren Datenspeichermedium kann es sich um eine gegenständliche Einheit handeln, die Anweisungen zur Verwendung durch eine Einheit zum Ausführen von Anweisungen festhalten und speichern kann. Bei dem computerlesbaren Datenspeichermedium kann es sich zum Beispiel, ohne auf diese beschränkt zu sein, um eine elektronische Datenspeichereinheit, eine magnetische Datenspeichereinheit, eine optische Datenspeichereinheit, eine elektromagnetische Datenspeichereinheit, eine Halbleiterdatenspeichereinheit (semiconductor storage device) oder eine beliebige geeignete Kombination des Vorhergehenden handeln. Eine nicht abschließende Liste von spezifischeren Beispielen des computerlesbaren Datenspeichermediums beinhaltet das Folgende: eine transportable Computerdiskette, eine Festplatte, einen Speicher mit wahlfreiem Zugriff (random access memory (RAM)), einen Nur-Lese-Speicher (read-only memory (ROM)), einen löschbaren programmierbaren Nur-Lese-Speicher (erasable programmable read-only memory (EPROM) oder Flash-Speicher), einen statischen Speicher mit wahlfreiem Zugriff (static random access memory (SRAM)), einen transportablen Compact-Disc-Nur-Lese-Speicher (compact disc read-only memory (CD-ROM)), eine „Digital Versatile Disk” (DVD), einen Speicherstick, eine Floppydiskette, eine mechanisch codierte Einheit, wie beispielsweise Lochkarten oder erhabene Strukturen in einer Rille mit darauf festgehaltenen Anweisungen, und jede geeignete Kombination des Vorhergehenden. Ein computerlesbares Datenspeichermedium, wie es hierin verwendet wird, ist nicht als flüchtige Signale per se aufzufassen, wie beispielsweise Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, sich durch einen Wellenleiter oder eine anderes Übertragungsmedium ausbreitende elektromagnetische Wellen (z. B. Lichtimpulse, die durch ein Lichtwellenleiterkabel laufen) oder durch einen Draht übertragene elektrische Signale.
  • Hierin beschriebene computerlesbare Programmanweisungen können von einem computerlesbaren Datenspeichermedium auf entsprechende Rechen-/Verarbeitungseinheiten oder über ein Netzwerk, zum Beispiel dem Internet, einem lokalen Netzwerk, einem Weitverkehrsnetzwerk und/oder einem kabellosen Netzwerk, auf einen externen Computer oder eine externe Datenspeichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenüberkragungsleiter, kabellose Übertragung, Reuter, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder eine Netzwerkschnittstelle in jeder Rechen-Verarbeitungseinheit empfängt computerlesbare Programmanweisungen vom Netzwerk und leitet die computerlesbaren Programmanweisungen zur Speicherung in einem computerlesbaren Datenspeichermedium innerhalb der entsprechenden Rechen-/Verarbeitungseinheit weiter.
  • Bei computerlesbaren Programmanweisungen zum Ausführen von Operationen der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, „Instruction-set-Architecture”(ISA)-Anweisungen, Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, Zustandseinstellungsdaten oder jeden Quellcode oder Objektcode handeln, der in irgendeiner Kombination aus einer oder mehreren Programmiersprachen geschrieben ist, einschließlich einer objektorientierten Programmiersprache, wie beispielsweise Smalltalk, C++ oder Ähnliches, und herkömmlicher prozeduraler Programmiersprachen, wie beispielsweise die Programmiersprache „C” oder ähnliche Programmiersprachen. Die computerlesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als ein eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In letzterem Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jede beliebige Art von Netzwerk, einschließlich ein lokales Netzwerk (local area network (LAN)) oder ein Weitverkehrsnetzwerk (wide area network (WAN)), verbunden sein, oder die Verbindung kann zu einem externen Computer (zum Beispiel mittels eines Internetdienstanbieters durch das Internet) hergestellt werden. In manchen Ausführungsformen können elektronische Schaltungen einschließlich zum Beispiel programmierbare Logikschaltungen, im Feld programmierbare Gatteranordnungen (field-programmable gate arrays (FPGA)), oder programmierbare Logikanordnungen (programmable logic arrays (PLA)) die computerlesbaren Programmanweisungen ausführen, indem Zustandsinformationen der computerlesbaren Programmanweisungen verwendet werden, um die elektronische Schaltung zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung werden hierin unter Bezugnahme auf Darstellungen von Ablaufplänen und/oder Blockschaubildern von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Darstellungen von Ablaufplänen und/oder der Blockschaubilder sowie Kombinationen von Blöcken in den Darstellungen von Ablaufplänen und/oder den Blockschaubildern durch computerlesbare Programmanweisungen ausgeführt werden können.
  • Diese computerlesbaren Programmanweisungen können einem Prozessor eines universellen Computers, eines zweckbestimmten Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine so zu erzeugen, dass die Anweisungen, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, ein Mittel zum Ausführen der im Block oder in den Blöcken des Ablaufplans und/oder Blockschaubildes angegebenen Funktionen/Handlungen erzeugen. Diese computerlesbaren Programmanweisungen können auch in einem computerlesbaren Datenspeichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten anleiten kann, auf eine bestimmte Weise zu funktionieren, sodass das computerlesbare Datenspeichermedium mit darin gespeicherten Anweisungen ein Herstellungsprodukt einschließlich Anweisungen aufweist, welche Aspekte der im Block oder in den Blöcken des Ablaufplans und/oder des Blockschaubildes angegebene Funktion/Handlung ausführen.
  • Die computerlesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um eine Reihe von auf dem Computer, der anderen programmierbaren Vorrichtung oder der anderen Einheit durchzuführenden Operationsschritten hervorzurufen, um einen computerimplementierten Prozess so zu erzeugen, dass die auf dem Computer, der anderen programmierbaren Vorrichtung oder der anderen Einheit ausgeführten Anweisungen die im Block oder in den Blöcken des Ablaufplans und/oder des Blockschaubildes angegebenen Funktionen/Handlungen ausführen.
  • Der Ablaufplan und die Blockschaubilder in den Figuren veranschaulichen die Architektur, Funktionalität und die Arbeitsweise möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block im Ablaufplan oder den Blockschaubildern für ein Modul, ein Segment oder einen Abschnitt von Anweisungen stehen, das oder der eine oder mehrere ausführbare Anweisungen zum Ausführen der angegebenen logischen Funktion oder Funktionen aufweist. In manchen alternativen Ausführungen können die im Block festgehaltenen Funktionen in einer anderen als der in den Figuren festgehaltenen Reihenfolge auftreten. Zum Beispiel können zwei aufeinander folgend gezeigte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal abhängig von der betreffenden Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es wird ebenfalls angemerkt, dass jeder Block der Blockschaubilder und/oder Darstellungen von Ablaufplänen und Kombinationen von Blöcken in den Blockschaubildern und/oder Darstellungen von Ablaufplänen durch zweckbestimmte hardwaregestützte Systeme ausgeführt werden kann, welche die angegebenen Funktionen oder Handlungen durchführen oder Kombinationen aus zweckbestimmter Hardware und Computeranweisungen ausführen.
  • Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Erfindung wurden zum Zwecke der Veranschaulichung vorgelegt, sind jedoch nicht als erschöpfend oder auf die offenbarten Ausführungsformen beschränkt aufzufassen. Viele Änderungen und Variationen sind für den Fachmann ersichtlich, ohne vom Umfang und Geist der beschriebenen Ausführungsformen abzuweichen. Die hierin verwendete Terminologie wurde gewählt, um die Grundgedanken der Ausführungsformen, die praktische Anwendung oder technischen Verbesserungen gegenüber auf dem Markt anzutreffenden Technologien am besten zu erklären oder um anderen Fachleuten ein Verständnis der hierein offenbarten Ausführungsformen zu ermöglichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • Chen et al., D. (kein Datum). „Taming Hardware Event Samples for FDO Compilation”. Verfügbar unter: „http://www.australianscience.com.au/research/google/36358.pdf” [Zugriff am 30. Okt. 2014] [0042]

Claims (12)

  1. Verfahren, aufweisend: Zählen jedes Vorkommens eines Hardwareereignisses durch einen Leistungsüberwachungszähler (Performance Monitoring Counter (PMC)) mindestens eines Hardwareprozessors während der Ausführung eines Zielprogrammcodes; geordnetes und fortlaufendes Speichern einer vordefinierten Größe einer Verfolgungsspur ausgeführter Sprünge (Taken Branch Trace (TBT) size) von letzten ausgeführten Sprüngen des Zielprogrammcodes während seiner Ausführung in einem Puffer einer Verfolgungseinrichtung für ausgeführte Sprünge (Taken Branch Trace Facility (TBTC)) des mindestens einen Hardwareprozessors; jedes Mal, wenn das Zählen gleich einer Abtastrate ist, Auslösen eines Abtastens des Puffers, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist; Aufbauen einer vollen Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes, wobei die volle Sprungverfolgungsspur alle abgeschlossenen Sprünge des Zielprogrammcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge aufweist; Entnehmen einer vordefinierten Größe einer ausgeschnittenen Sprungverfolgungsspur (Chopped Branch Trace (CBT) size) aus jeder vollen Sprungverfolgungsspur, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten; und inkrementelles Speichern jeder ausgeschnittenen Sprungverfolgungsspur, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.
  2. Verfahren nach Anspruch 1, wobei das Speichern der vordefinierten TBT-Größe von letzten ausgeführten Sprüngen in einer zyklischen Weise durchgeführt wird.
  3. Verfahren nach Anspruch 1, wobei: die Abtastrate variabel ist, die Abtastrate gleich einer vordefinierten aufsummierten Zahl mit einer zufällig gewählten Differenz ist, und die Werte der zufällig gewählten Differenz im Wesentlichen niedriger sind als der Wert der vordefinierten Zahl.
  4. Verfahren nach Anspruch 1, wobei das Zählen gleich der Abtastrate ist, sobald ein nicht ausgeführter Sprung abgeschlossen ist, und wobei das Verfahren ferner ein Anhängen des nicht ausgeführten Sprungs an die volle Sprungverfolgungsspur aufweist.
  5. Verfahren nach Anspruch 1, wobei es sich bei dem Kantenprofil um ein Aufrufschaubildprofil und bei dem Sprung um einen Funktionsaufruf handelt.
  6. Verfahren nach Anspruch 1, wobei das Vorkommen eines Hardwareereignisses ein Abschluss eines Sprungs des Zielprogrammcodes ist.
  7. Verfahren nach Anspruch 1, wobei das Vorkommen eines Hardwareereignisses ein Abschluss einer Anweisung des Zielprogrammcodes ist.
  8. Computerprogrammprodukt, das ein nichtflüchtiges computerlesbares Datenspeichermedium mit damit ausgebildetem Betriebsprogrammcode bereitstellt, wobei der Betriebsprogrammcode durch mindestens einen Hardwareprozessor ausführbar ist, wobei der mindestens eine Hardwareprozessor konfiguriert ist: jedes Vorkommen eines Hardwareereignisses während der Ausführung eines Zielprogrammcodes zu zählen; geordnet und fortlaufend eine vordefinierte TBT-Größe von letzten ausgeführten Sprüngen des Zielprogrammcodes während seiner Ausführung in einem Puffer zu speichern; und jedes Mal, wenn das Zählen gleich einer Abtastrate ist, ein Abtasten des Puffers auszulösen, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist; und wobei der Betriebsprogrammcode durch den mindestens einen Hardwareprozessor ausführbar ist, um: eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes aufzubauen, wobei die volle Sprungverfolgungsspur alle abgeschlossenen Sprünge des Zielprogrammcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge aufweist; eine vordefinierte CBT-Größe von letzten Sprüngen aus jeder vollen Sprungverfolgungsspur zu entnehmen, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten; und jede ausgeschnittene Sprungverfolgungsspur inkrementell zu speichern, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.
  9. Verfahren nach Anspruch 1, wobei die Abtastrate vordefiniert ist.
  10. Verfahren nach Anspruch 1, wobei das Vorkommen eines Hardwareereignisses aus einer Gruppe ausgewählt ist, bestehend aus: einem Abschluss eines Sprungs des Zielprogrammcodes und einem Abschluss einer Anweisung des Zielprogrammcodes.
  11. System, das mindestens einen Hardwareprozessor aufweist, wobei der mindestens eine Hardwareprozessor aufweist: eine Einrichtung für Spuren ausgeführter Sprünge (TBTC), die einen Puffer aufweist, wobei die TBTC konfiguriert ist, geordnet und kontinuierlich eine vordefinierte TBT-Größe von letzten ausgeführten Sprüngen von mehreren Sprüngen eines Zielprogrammcodes während seiner Ausführung in dem Speicher zu speichern; einen Leistungsüberwachungszähler (PMC) der konfiguriert ist, während der Ausführung des Zielprogrammcodes: a. jedes Vorkommen eines Hardwareereignisses zu zählen, und b. jedes Mal, wenn das Zählen gleich einer Abtastrate ist, ein Abtasten der BTF auszulösen, um eine Verfolgungsspur ausgeführter Sprünge zu erhalten, welche die aktuelle vordefinierte TBT-Größe von letzten ausgeführten Sprüngen aufweist; wobei der Hardwareprozessor konfiguriert ist, durch Ausführen eines Betriebsprogrammcodes: eine volle Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge auf Grundlage des Zielprogrammcodes aufzubauen, wobei die volle Sprungverfolgungsspur alle abgeschlossenen Sprünge des Programmcodes zwischen und einschließlich dem ersten und dem letzten ausgeführten Sprung der Verfolgungsspur ausgeführter Sprünge aufweist, eine vordefinierte CBT-Größe von letzten Sprüngen aus jeder vollen Sprungverfolgungsspur zu entnehmen, um eine ausgeschnittene Sprungverfolgungsspur für jede Verfolgungsspur ausgeführter Sprünge zu erhalten, und jede ausgeschnittene Sprungverfolgungsspur inkrementell in einer Datenspeichereinheit zu speichern, um ein Kantenprofil des Zielprogrammcodes zu erzeugen.
  12. System nach Anspruch 11, wobei der Puffer zyklisch ist.
DE102016103019.8A 2015-02-22 2016-02-22 Hardwaregestützte Kantenprofilerstellung Ceased DE102016103019A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/628,253 US9703667B2 (en) 2015-02-22 2015-02-22 Hardware-based edge profiling
US14/628,253 2015-02-22

Publications (1)

Publication Number Publication Date
DE102016103019A1 true DE102016103019A1 (de) 2016-08-25

Family

ID=56577719

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016103019.8A Ceased DE102016103019A1 (de) 2015-02-22 2016-02-22 Hardwaregestützte Kantenprofilerstellung

Country Status (3)

Country Link
US (1) US9703667B2 (de)
CN (1) CN105912378B (de)
DE (1) DE102016103019A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10466986B2 (en) * 2018-03-30 2019-11-05 Oracle International Corporation Optimized recompilation using hardware tracing
TWI819662B (zh) * 2022-06-16 2023-10-21 瑞昱半導體股份有限公司 系統剖析調校方法與電腦系統
CN114816536B (zh) * 2022-06-30 2022-09-20 飞腾信息技术有限公司 一种分支预测处理方法、装置、设备及存储介质
CN116662100B (zh) * 2022-09-27 2024-03-15 荣耀终端有限公司 数据处理方法和电子设备

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6470492B2 (en) * 1999-05-14 2002-10-22 Hewlett-Packard Company Low overhead speculative selection of hot traces in a caching dynamic translator
US6519766B1 (en) * 1999-06-15 2003-02-11 Isogon Corporation Computer program profiler
US7032217B2 (en) * 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
US6795964B2 (en) * 2001-06-18 2004-09-21 Hewlett-Packard Development Company, L.P. Edge profiling for executable program code having branches through stub code segments
JP4533682B2 (ja) * 2004-06-29 2010-09-01 株式会社東芝 トレース解析装置およびトレース解析方法
US7458065B2 (en) * 2004-09-21 2008-11-25 Intel Corporation Selection of spawning pairs for a speculative multithreaded processor
US7657875B2 (en) 2005-04-12 2010-02-02 International Business Machines Corporation System and method for collecting a plurality of metrics in a single profiling run of computer code
US20070074081A1 (en) * 2005-09-29 2007-03-29 Dewitt Jimmie E Jr Method and apparatus for adjusting profiling rates on systems with variable processor frequencies
US20080010635A1 (en) * 2006-07-07 2008-01-10 O'brien John Kevin Method, Apparatus, and Program Product for Improving Branch Prediction in a Processor Without Hardware Branch Prediction but Supporting Branch Hint Instruction
JP5082716B2 (ja) * 2007-09-20 2012-11-28 富士通セミコンダクター株式会社 プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US8214817B2 (en) 2007-10-09 2012-07-03 International Business Machines Corporation Detecting change in program behavior for adaptive code optimization
US8448140B2 (en) 2008-07-02 2013-05-21 Tokyo Institute Of Technology Execution time estimation method and device
JP5376509B2 (ja) * 2009-03-16 2013-12-25 スパンション エルエルシー 実行履歴トレース方法
US8489866B2 (en) * 2010-06-30 2013-07-16 International Business Machines Corporation Branch trace history compression
US8898646B2 (en) 2010-12-22 2014-11-25 Intel Corporation Method and apparatus for flexible, accurate, and/or efficient code profiling
US9104402B2 (en) * 2013-08-21 2015-08-11 Vmware, Inc. Branch trace compression
US9256515B2 (en) * 2013-08-21 2016-02-09 Vmware, Inc. Stack trace compression
TWI566090B (zh) * 2014-10-17 2017-01-11 Insyde Software Corp Debugging firmware / software to produce tracking systems and methods, recording media and computer program products

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Chen et al., D. (kein Datum). „Taming Hardware Event Samples for FDO Compilation". Verfügbar unter: „http://www.australianscience.com.au/research/google/36358.pdf" [Zugriff am 30. Okt. 2014]

Also Published As

Publication number Publication date
CN105912378A (zh) 2016-08-31
CN105912378B (zh) 2019-07-09
US9703667B2 (en) 2017-07-11
US20160246697A1 (en) 2016-08-25

Similar Documents

Publication Publication Date Title
DE102014116367A1 (de) Verwaltung von leistungsstufen von informationstechnologiesystemen
DE112013005882T5 (de) Ausführung eines Gegenverzweigungspfades auf Grundlage eines Zuverlässigkeitsschwellenwertes für eine Verzweigungsvorhersage
DE102016103019A1 (de) Hardwaregestützte Kantenprofilerstellung
DE112018004142T5 (de) Proaktive verringerung und/oder minderung eines spannungseinbruchs in einem prozessorkern
DE10050684A1 (de) Verfahren und System zur periodischen Ablaufverfolgung für die Echtzeitgenerierung von Segmenten von Aufrufstack-Bäumen
DE112021006232T5 (de) Proaktive anomalieerkennung
DE102019218138A1 (de) Ein proaktives und automatisiertes System und Verfahren davon zum Reparieren eines suboptimalen Betriebs einer Maschine
DE102011014830A1 (de) Verfahren und vorrichtung zum analysieren vonsoftware
DE112020005071B4 (de) Verfahren für eine datenschutzgerechte anomalie-erkennung im iot
DE112017004962T5 (de) Steuerflussintegrität
DE112020004116T5 (de) Dynamisches abändern der parallelität einer aufgabe in einer pipeline
DE102006041444B4 (de) Schaltungsanordnung und Verfahren zum Erfassen einer Ausführungszeit eines Befehls in einem Rechnersystem
DE112012005559T5 (de) Software-Installation
DE112017000937T5 (de) Persistente Datenflusserkennungen, die verteilte Anwendungen ermöglichen
DE112021000370T5 (de) Auf maschinellem lernen beruhende datenüberwachung
DE112021002883T5 (de) Automatisierte rückmeldung und kontinuierliches lernen zur abfrageoptimierung
DE112018003087T5 (de) On-chip-rauschunterdrückung oder -minderung der versorgungsspannung unter verwendung von lokalen detektionsschleifen in einem prozessorkern
DE112019005467T5 (de) System und verfahren zum erkennen und vorhersagen von mustern eines anomalen sensorverhaltens einer maschine
DE102012224362A1 (de) Anpassung einer Testhäufigkeit für die Ressourcenauslastung
DE102023100643A1 (de) Modelltraining für maschinelles lernen mit entrauschten daten und modellvorhersage mit rauschkorrektur
DE112011100168B4 (de) Erfassen von Diagnosedaten in einer Datenverarbeitungsumgebung
DE69531530T2 (de) Verfahren und Vorrichtung zur Überwachung von mobilen Fernsprechsystemen
DE112015004557B4 (de) Anforderungsüberwachen
DE112019001332T5 (de) Ermittlungsvorrichtung, fotoelektrischer Sensor mit mehreren optischen Achsen, Verfahren zur Steuerung einer Ermittlungsvorrichtung, Informationsverarbeitungsprogramm und Aufzeichnungsmedium
Bauer Automated Hybrid Time Series Forecasting: Design, Benchmarking, and Use Cases

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final