DE19963832A1 - Programmprofilierung - Google Patents

Programmprofilierung

Info

Publication number
DE19963832A1
DE19963832A1 DE19963832A DE19963832A DE19963832A1 DE 19963832 A1 DE19963832 A1 DE 19963832A1 DE 19963832 A DE19963832 A DE 19963832A DE 19963832 A DE19963832 A DE 19963832A DE 19963832 A1 DE19963832 A1 DE 19963832A1
Authority
DE
Germany
Prior art keywords
program
jump
memory
execution
target program
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.)
Withdrawn
Application number
DE19963832A
Other languages
English (en)
Inventor
Ulf Mikael Ronstroem
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.)
Telefonaktiebolaget LM Ericsson AB
Original Assignee
Telefonaktiebolaget LM Ericsson AB
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 Telefonaktiebolaget LM Ericsson AB filed Critical Telefonaktiebolaget LM Ericsson AB
Priority to DE19963832A priority Critical patent/DE19963832A1/de
Priority to US09/745,701 priority patent/US20020010913A1/en
Priority to PCT/EP2000/013295 priority patent/WO2001050242A2/en
Priority to AU23702/01A priority patent/AU2370201A/en
Priority to GB0217074A priority patent/GB2375415B/en
Publication of DE19963832A1 publication Critical patent/DE19963832A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • 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/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/3447Performance evaluation by modeling
    • 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
    • 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

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)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Zum Verbessern des gesamten Ausführungswirkungsgrads für das Ausführen einer virtuellen Maschine übermittelten Programms wird ein Programmprofilierungsverfahren für eine virtuelle Maschine vorgeschlagen, das mit einem Compilieren eines übermittelten Programms zum Erzeugen eines Zielprogramms beginnt (S10). Anschließend wird das Zielprogramm zum Erzeugen von Ausführungsstatistiken ausgeführt (S12), die in einem Sprungspeicher (28) gespeichert werden. Schließlich wird das Zielprogramm erneut combiliert (S22) unter Verwendung der in dem Sprungspeicher (28) gespeicherten Ausführungsstatistiken als Compilierungsunterstützung.

Description

Die vorliegende Erfindung betrifft ein Verfahren zum Profilieren von Programmen auf virtuellen Maschinen, ein dieses verwendendes Computersystem und ein hiermit verbundenes Computerprogrammprodukt.
Üblicherweise werden Programme in einer höheren Programmiersprache geschrieben, und Compiler übersetzen die Programme in einen Maschinencode, der auf einem bestimmten Prozessor ausgeführt wird, um eine bestimmte anwenderspezifische Anwendung zu realisieren.
Eine derartige Anwendung ist in Fig. 1 gezeigt, und sie betrifft eine Telekommunikationsvermittlung. Wie in Fig. 7 gezeigt, wird auf der Hardware-Ebene der Prozessor 100 in Kombination mit dem Speicher 102 verwendet. Im Hinblick auf die Vermittlungsfunktionalität kann eine geeignete Partitionierung des Speichers 102 ausgewählt werden, für eine einfache Handhabung von Meldungen und Signalen, die für eine weitere Verarbeitung übermittelt werden, z. B. durch Verwendung mehrerer Puffer jeweils mit einem vorgegebenen Prioritätspegel und unter erneuter Unterteilung in mehrere Register. Während Fig. 7 ein derartiges Beispiel für eine Hardware-Struktur zeigt, sind eine große Zahl von Modifikationen und Variationen allgemein den mit dem Stand der Technik Vertrauten bekannt und sie können ebenso zum Erzielen der gewünschten Funktionalität verwendet werden.
Wie in Fig. 7 ebenso gezeigt, ist oberhalb der Hardware-Ebene die gewünschte Funktionalität unter verwendet von Softwareprogrammen implementiert. Typischerweise wird die Funktionalität unter verwendet einer höheren Programmiersprache 104 codiert. Ein Compiler 106 überträgt diese Beschreibung der Funktionalität auf höherer Programmiersprache in einen Maschinencode 108, der schließlich auf dem Prozessor 100 ausgeführt wird.
Die Fig. 8 zeigt die Funktionalität der in Fig. 7 gezeigten Vermittlung auf einem höheren Abstraktionsniveau.
Die in Fig. 8 gezeigte Funktionalität betrifft die Verarbeitung von Meldungen - auf die im folgenden auch als Signale Bezug genommen wird -, die an die Vermittlung für eine weitere Verarbeitung hiervon übermittelt werden. Die Meldungen werden in dem Speicher 102 gespeichert, insbesondere im Puffer gemäß deren Prioritätspegel, und anschließend verarbeitet.
Hierfür zeigt die Fig. 8 das anfängliche Prüfen dieser Puffer gemäß dem Schritt S100. Zeigt dieser Schritt S100 an, dass Meldungen zu verarbeiten sind, so wird der Schritt S102 durchgeführt, um das Verarbeiten der übermittelten Meldungen gemäß ihrer jeweiligen Prioritätspegel zu planen. Hiernach erfolgt das tatsächliche Verarbeiten der Meldungen in einem Schritt S104.
Wie in Fig. 8 gezeigt, bilden die Schritte S102 und S104 eine innere Schleife, und sie werden iterativ solange wiederholt, bis eine vorgegebene Zahl von Meldungen verarbeitet ist, und diese Bedingung wird in dem Schritt S106 geprüft. Der Zweck dieser inneren Schleife besteht im Vermeiden einer zu häufigen Prüfung der empfangenen Meldungen.
Der weiter in Fig. 8 gezeigte Schritt S108 betrifft das Terminieren der Gesamtverarbeitung von Meldungen und Signalen.
Die Vermittlungsfunktionalität gemäß den Fig. 7 und 8 ist lediglich als ein Beispiel für den technischen Hintergrund der vorliegenden Erfindung zu verstehen. Nichts desto Trotz betont dieses Beispiel, dass ein sehr wirksames Ausführen der betroffenen Schritte im Hinblick auf Echtzeitanwendungen kritisch ist. Demnach ist die Frage, wie wirksam die höhere Programmiersprache in Maschinencode umgesetzt wird, von größter Wichtigkeit.
Zum Verbessern des Wirkungsgrads eines von einer höheren Programmiersprache abgeleiteten Maschinencodes durch Compilierung ist in EP 0 501 076 A2 ein System und Verfahren beschrieben, und zwar für eine umfassende nicht-invasive Prozeßprofilierung bei einem Prozessor zum Bereitstellen einer Rückkopplung an ein Programm für das Programm auf höherer Ebene gemäß den dynamischen Ausführungsdaten des Programms. Insbesondere wird ein Verfahren zum Profilieren von Code vorgeschlagen, das in einem Computersystem ausgeführt wird, das einen Prozessor enthält, sowie einen Programmzähler zum Registrieren der Adressen der Befehle, die durch den Prozessor ausgeführt und durch den Code erzeugt werden. Das Verfahren enthält das Abtasten der Adressen von dem Programmzähler in Zuordnung zu den Befehlen, das Erzeugen eines Frequenzzählwerts der abgetasteten Adressen und das Ableiten von Zählanzeigen für die Zeit, die durch den Prozessor beim Ausführen der Befehle gemäß den Adressen aufgewendet wird. In anderen Worten, betrifft die in EP 0 501 076 A2 beschriebene Vorgehensweise das Profilieren von Prozessorausführzeit in Computersystemen.
Ferner ist in EP 0 883 059 A2 ein Compiler beschrieben, der auf einen nicht-blockierenden Cachespeicher anwendbar ist, sowie ein Codeplanungsverfahren hierfür. Hier enthält der Compiler als Eingang eine Objektcode-Erzeugungseinheit zum Erzeugen eines Codes für ein Objektprogramm und ferner eine Codeplanungseinheit zum Durchführen eines Codeplanens für einen Objektcode zum Reduzieren der Cache-Fehlgriffstrafe auf der Grundlage des Analyseergebnis, das anhand des Eingangs und der Profildaten erhalten wird. Die Codeablaufplanungseinheit (Engl.: code scheduling unit) enthält eine Profildatenanalyseeinheit zum Detektieren einer Cache-Vielzugriffstrafe (Engl.: cache miss penalty), die in Profildaten vorliegt, sowie eine Codeablaufplanungs- Ausführungseinheit zum Erzeugen eines Dummy-Befehlscodes zum Absenken der Cache-Fehlzugriffsstrafe und zum Einfügen desselben in einen Maschinencode.
Demnach ist es bei verfügbaren Compilern erforderlich, zunächst das Programm in einem speziellen Modus zu compilieren, um Statistiken über die Programmausführung zu sammeln. Hierfür schreibt das in einem speziellen Modus compilierte Programm Profilinformation in spezielle Dateien, die anschließend durch den Compiler zum Verbessern der nächsten Version des compilierten Programms verwendet werden. Demnach sind diese Vorgehensweise in keiner Weise anwenderfreundlich und nur wenige mit dem Stand der Technik Vertrauten können dieses Verfahren zum Verbessern des Leistungsumfangs verwenden.
Neben den Optimierungsvorgehensweisen für Compiler, wie sie oben beschrieben sind, besteht eine andere Vorgehensweise darin, dass Programme nicht direkt in ausführbaren Maschinencode umgesetzt werden, sondern in einen Code für eine virtuelle Maschine übersetzt werden. Ein solches Beispiel ist ein Bytecode, der auf der Grundlage der Java- Programmiersprache erzeugt wird, die anschließend auf einer virtuellen Java-Maschine ausgeführt wird.
Virtuelle Maschinen - beispielsweise virtuelle Java-Maschinen - vereinfachen die Verwendung einer Profilierung für die Verbesserung des Programmleistungsvermögens und sind demnach anwenderfreundlicher. Die virtuelle Maschine beginnt das Ausführen des virtuellen Maschinencodes oder eines schnell ableitbaren Derivats dieses virtuellen Maschinencodes. Das Ausführen hiervon führt zu der Erzeugung von Profilierinformation, die anschließend durch dynamisches Compilieren einer optimierten Version des Programms verwendet werden kann. Hier enthält die optimierte Version in keiner Weise irgendeinen Maschinencode zum Sammeln von Profilierungsinformation.
Ein solches Beispiel ist die virtuelle (Engl.: hot spot) Java-Maschine, die eine dynamische Compiliertechnik in Kombination mit einem Interpretierer verwendet. Bei Beginn wird das vollständige Programm durch Interpretieren ausgeführt. Ein Interpretierer sammelt Ausführungsstatistiken, z. B. welche Teil eines Programms allgemein ausgeführt werden und welche Pfade des Programms normalerweise in diesen Teilen ausgeführt werden.
Anschließend beginnt der dynamische Compilierer mit dem Compilieren der allgemein gängigsten Teile unter verwendet der durch den Interpretierer erzeugten Ausführungsstatistiken. Dies ermöglicht das Verbessern des Wirkungsgrads des erzeugten compilierten Maschinencodes.
Jedoch kann das Erzeugen der Ausführungsstatistiken von der Implementierung des Interpretierers selbst abhängen, d. h. unterschiedliche Interpretierer können zu unterschiedlichen Ausführungsstatistiken führen, die wiederum nicht notwendigerweise in derselben Weise zu den Ausführungsstatistiken des compilierten Maschinencodes korreliert sein müssen.
Im Hinblick auf die obigen Ausführungen besteht das technische Problem der vorliegenden Erfindung in der Verbesserung des Gesamtausführungswirkungsgrads für das Ausführen eines einer virtuellen Maschine zugeführten Programms.
Gemäß der vorliegenden Erfindung wird dieses technische Problem durch ein Verfahren für eine Programmprofilierung bei einer virtuellen Berechnungsmaschine mit den Merkmalen des Patentanspruchs 1 gelöst.
Demnach wird gemäß der vorliegenden Erfindung vorgeschlagen, Programme, die einer virtuellen Maschine zugeführt werden, zu compilieren, um ein Zielprogramm zu erzeugen, das direkt beispielsweise auf einer standardisierten Hardware-Plattform laufen kann. Anschließend kann das erzeugte Zielprogramm zum Erzeugen von Ausführungsstatistiken ausgeführt werden. Gemäß der vorliegenden Erfindung wird diese Ausführungsstatistik in einem Sprungspeicher (Engl.: jump memory) gespeichert. Anschließend wird das Zielprogramm unter Verwendung der in dem Sprungspeicher gespeicherten Ausführungsformstatistiken als Compilerunterstützung erneut compiliert.
Demnach besteht eine der der vorliegenden Erfindung zugrundeliegenden Ideen in der Verwendung des Sprungspeichers zum Bereitstellen von Profilierungsinformation sowie von Information, die für Zwecke der Fehlerbeseitigung und des Testens nützlich ist. Die Kosten des fortlaufenden Schreibens in den Sprungspeicher sind gerechtfertigt, da die hier gespeicherte Information zum Unterstützen des nachfolgenden Compilierprozesses und der Fehlerbeseitigungszwecke verwendet wird.
Ein anderer wichtiger Aspekt der vorliegenden Erfindung besteht darin, dass es nicht erforderlich ist, das übermittelte Programm unter Verwendung eines langsameren Mechanismus wie beispielsweise eines interpretierten Codes auszuführen, um Statistik über die Zielprogrammausführung zu sammeln. Dies führt zu Vorteilen sowohl im Hinblick auf die tatsächlichen Ergebnisse für den Wirkungsgrad der Zielprogrammausführung als auch im Hinblick auf die Zielspeicherverwendung, da lediglich ein einzelnes Zielprogramm zum Ausführen des Programms verwendet wird.
Ein anderer wichtiger Aspekt der Erfindung besteht darin, dass es lediglich erforderlich ist, ein einzelnes Programm im Fall des Auftretens von Fehlern zu debuggen bzw. zu untersuchen. Im Gegensatz zu der Verwendung mehrerer Ausführungsmechanismen ist die Gesamtfehlerrate bei einer virtuellen Maschine geringer, da weniger Code weniger Fehler bedeutet.
Da zudem bei Beginn die virtuelle Maschine das Compilieren des übermittelten Programms ohne irgendwelche Ausführungsstatistiken beginnt, ist es möglich, die gesamte Anlaufzeit der virtuellen Maschine durch Verwendung von wenig Optimierungsschritten bei dem ersten Compilierungsschritt im Vergleich zu späteren Versionen des Zielprogramms zu verbessern.
Insgesamt ist es gemäß der vorliegenden Erfindung lediglich erforderlich, einen einzelnen Compilierungsprozeß zu verwenden, ohne der Anforderung, einen Interpretierer zu entwickeln und zu warten. Weiterhin besteht nicht die Anforderung, eine spezielle Version des compilierten Zielprogramms zum Erzeugen von Ausführungsstatistiken zu erzeugen.
Zudem kann der Sprungspeicher nicht nur als Compilerunterstützung, sondern auch für nachfolgende Fehlerbehebungsschritte verwendet werden. Weiterhin wird eine Erhöhung des Wirkungsgrads erzielt, da das Ausführen des übermittelten Programms auf einem compilierten Programm beruht, und zwar unmittelbar nach dem Start der virtuellen Maschine, ohne eine zwischengelagerte Interpretierung hiervon.
Demnach kombiniert die neue Lösung die Verwendung eines Sprungspeichers zum Ableiten von Information über die Programmausführung, zum Sammeln von Ausführungsstatistiken und zum Zuführen dieser Information zu einem Compiler. Die Anwendung dieses Konzepts bei einer virtuellen Maschine führt zu einer neuen Lösung, bei der der Sprungspeicher zum Ableiten von Statistiken über die Zielprogrammausführung verwendet wird. Demnach ist es nicht erforderlich, irgendeinen speziellen Modus des compilierten Programms zum Sammeln von Ausführungsstatistiken zu verwenden, wodurch die Zuverlässigkeit des Systems verbessert und der Ausführungswirkungsgrad erhöht ist, wenn Ausführungsstatistiken gesammelt werden, und zudem der Cachespeichereinsatz verbessert ist.
Gemäß einer bevorzugten Ausführungsform wird der Recompilierungsschritt mehrere Male zum Erzielen einer iterativen Verbesserung des Zielprogramms durchgeführt.
Demnach ermöglicht diese bevorzugte Ausführungsform das Bereitstellen einer neuen Version des Zielprogramms jedesmal dann, wenn für das Zielprogramm eine Optimierung erforderlich ist.
Gemäß einer anderen bevorzugten Ausführungsform der vorliegenden Erfindung wird geprüft, ob eine Recompilierung durchgeführt werden sollte, und zwar jedesmal dann, wenn ein Analyseintervall für die Analyse der gesammelten Ausführungsstatistiken verstrichen ist. Hier kann das Analyseintervall entweder als maximale Zahl der Schritte des Zielprogramms spezifiziert sein, die auszuführen sind, oder als Zeitintervall.
Diese bevorzugte Ausführungsform geht das Problem zum Sammeln der Information von dem Sprungspeicher und zum erneuten Senden derselben zu dem Compiler in der wirksamsten Weise an. In anderen Worten ausgedrückt, berücksichtigt diese bevorzugte Ausführungsform die Tatsache, dass der Compiler nicht alle ehemals in der virtuellen Maschine durchgeführten Sprünge benötigt, um das erzeugte Zielprogramm zu verbessern, und dass es ausreicht, die Daten in dem Sprungspeicher bei einem bestimmten Zeitintervall zu sammeln. Demnach wird nach jedem Analyseintervall von beispielsweise einer Millisekunde der Sprungspeicher ausgelesen, und der Inhalt hiervon wird zu dem Compiler gesendet, der dann die Analyse durchführt und ableitet, wann es erforderlich ist, ein übermitteltes Programm oder ein Programm-Modul erneut zu compilieren.
Gemäß einer anderen bevorzugten Ausführungsform der vorliegenden Erfindung wird der Schreibschritt in den Sprungspeicher lediglich ausgeführt, wenn eine zuvor festgelegte Sprungrate für einen bedingten oder nicht bedingten Sprung unterhalb eines bestimmten vorgegebenen Schwellwerts liegt.
Demnach ermöglicht diese bevorzugte Ausführungsform der vorliegenden Erfindung das Berücksichtigen der Tatsache, dass nach einer bestimmten Zahl von Optimierungsschritten üblicherweise die am meisten verwendeten Pfade in einem Programm eingerichtet sind und sich nicht ändern, so dass im Fall, dass eine hohe Sprungrate für einen bestimmten Programmschritt bereits vorerfaßt wird, keine weitere Information über die Anwendung für den Compilierungsprozeß in irgendeiner Weise erzeugt wird. Demnach wird das Schreiben derartiger Information in den Sprungspeicher vermieden, das lediglich unnötige Verarbeitungszeit erfordern würde, ohne dass es zu einem verbesserten nachfolgenden Compilierungsprozeß führen würde.
Gemäß einem weiteren Aspekt der vorliegenden Erfindung wird ein Computersystem bereitgestellt, das zum Ausführen einer Verarbeitung gemäß einer virtuellen Maschine für unterbreiteten Maschinencode angepaßt ist, enthaltend eine I/O-Schnittstellenvorrichtung, einen Speicher, einen Prozessor, derart, dass der Speicher Compiliersoftwarte speichert, die so angepaßt ist, dass sie ein iteratives Optimieren eines unterbreiteten Programms durch die folgenden Schritte ermöglicht: Compilieren des unterbreiteten Programms zum Erzeugen eines Zielprogramms; Ausführen des Zielprogramms zum Erzeugen von Ausführungsstatistiken, die in einem Sprungspeicher gespeichert werden; und erneutes Compilieren des Zielprogramms unter Verwendung der Ausführungsstatistiken, die in dem Sprungspeicher gespeichert sind, als Compilerunterstützung.
Dieses Computersystem ermöglicht das Erzielen derselben Vorteile, wie sie oben im Hinblick auf das Verfahren gemäß der vorliegenden Erfindung dargelegt sind.
Vorzugsweise enthält das Computersystem ferner einen Programmcode für eine virtuelle Maschine, der zum Ausführen eines Teils des unterbreiteten Programms durch Interpretieren anstelle einer Compilierung angepaßt ist.
Demnach ist es neben der optimierten Compilierung im Sinne der vorliegenden Erfindung auch möglich, das Ausführen des übermittelten Programms aufzuteilen, und zwar auf der Grundlage des Compilierens und des Interpretierens zum Erhöhen der Gesamtflexibilität.
Gemäß einer weiteren bevorzugten Ausführungsform der vorliegenden Erfindung wird ein Computerprogrammprodukt geschaffen, das direkt in den Speicher eines Computersystems ladbar ist, mit Softwarecodeabschnitten zum Durchführen der Schritte des erfindungsgemäßen Verfahrens dann, wenn das Produkt auf eine Prozessor des Computersystems abläuft.
Demnach ermöglicht die vorliegende Erfindung auch das Bereitstellen von Computerprodukten für die Verwendung in einem Computerprogramm oder einem Prozessor, der beispielsweise in einer Hardwareplattform enthalten ist, die eine virtuelle Maschine unterstützt.
Die Programme zum Definieren der Funktionen der vorliegenden Erfindung können einem Computer/Prozessor in zahlreichen Formen zugeführt werden, einschließlich - ohne hierauf beschränkt zu sein - auch permanent in einem nicht­ schreibbaren Speichermedium gespeicherter Information, z. B. Nurlesespeichereinrichtungen wie ROM oder eine CD ROM Disk, die durch Prozessoren oder Computer I/O Peripheriegeräte lesbar sind; ferner Information, die auf beschreibbaren Speichermedien gespeichert ist, z. B. Floppy Disks oder Festplatten; oder Information, die zu einem Computer/Prozessor über ein Kommunikationsmedium übertragen wird, beispielsweise einem Netz und/oder Telefonnetzen, über Modems oder andere Schnittstelleneinrichtungen. Es ist zu erkennen, dass jedes Medium - sofern es prozessorlesbare Befehle zum Implementieren des erfindungsgemäßen Konzepts aufweist - eine Ausführungsform der vorliegenden Erfindung darstellt.
Nachfolgend werden bevorzugte Ausführungsformen der vorliegenden Erfindung unter Bezug auf die Zeichnung beschrieben; es zeigen:
Fig. 1 ein schematisches Diagramm einer virtuellen Maschine gemäß der vorliegenden Erfindung;
Fig. 2 ein Flußdiagramm des Prozessors mit Compileroptimierung gemäß der vorliegenden Erfindung;
Fig. 3 ein Flußdiagramm für das Sammeln der Ausführungsstatistiken gemäß der vorliegenden Erfindung;
Fig. 4 ein Flußdiagramm für eine modifizierte Vorgehensweise zum Sammeln von Ausführungsstatistiken gemäß der vorliegenden Erfindung;
Fig. 5 ein Beispiel für das Anwenden des Compilieroptimierprozesses gemäß der vorliegenden Erfindung;
Fig. 6 ein Flußdiagramm für das Anwenden der in Fig. 1 gezeigten virtuellen Maschine in einer Telekommunikationsvermittlung;
Fig. 7 eine Telekommunikationsvermittlung als typisches Anwendungsbeispiel für Hard- und. Softwaresysteme gemäß dem Stand der Technik; und
Fig. 8 ein Flußdiagramm für den Betrieb der in Fig. 7 gezeigten Telekommunikationsvermittlung.
Die Fig. 1 zeigt ein schematisches Diagramm einer virtuellen Maschine gemäß der vorliegenden Erfindung. Die virtuelle Maschine, wie sie im folgenden diskutiert wird, ist jedoch lediglich als ein darstellendes Beispiel des virtuellen Maschinenkonzepts zu verstehen. Demnach läßt sich der optimierende Compilerprozeß gemäß der vorliegenden Erfindung auf jedwedge Art einer virtuellen Maschine anwenden, solange eine virtuelle Maschine nicht nur auf der Interpretierung von Programmcodes beruht, die der virtuellen Maschine zugeführt werden, sondern auch auf einer Compilierung derartiger übermittelten Programmcodes.
Wie in Fig. 1 gezeigt, ist die virtuelle Maschine aufbauend auf einer Hardware-Plattform implementiert, die einen Prozessor enthält, sowie einen Speicher und eine Eingabe/Ausgabe-Schnittstelle sowie Peripheriegeräte. Innerhalb des Rahmens der vorliegenden Erfindung ist die bestimmte Form der Verarbeitungseinheit, des Speichers, der Eingabe/Ausgabe-Einrichtung usw. als nicht einschränkend zu verstehen, so dass eine detaillierte Erläuterung hiervon nicht gegeben wird. Im Gegensatz hierzu wird jede Art von Hardware mit der Fähigkeit zum Unterstützen virtueller Maschinenkonzepte als vom Schutzbereich und Sinngehalt der vorliegenden Erfindung, wie nachfolgend dargelegt ist, umfaßt angesehen.
Wie in Fig. 1 auch gezeigt, enthält die virtuelle Maschine 10 einen Teil 14, der in Software implementiert ist. Dieser software-relevante Teil übernimmt die Funktionen, die für die virtuelle Maschine spezifisch sind. Auf ein derartiges Beispiel wird im folgenden als virtuelle Verarbeitung 16 Bezug genommen, und die virtuelle Verarbeitung steht im Zusammenhang mit dem Ausführen eines sogenannten virtuellen Maschinencodes.
Dieser virtuellen Maschinencode kann aus einem Programm abgeleitet werden, das zu der virtuellen Maschine übermittelt wird, beispielsweise durch Übersetzen des übermittelten Programms. Dies ermöglicht das Ausführen des extern zugeführten Programmcodes, der typischerweise für eine spezifische Hardware-Plattform optimiert ist, auf der Hardware-Plattform der virtuellen Maschine. In anderen Worten ausgedrückt, ermöglicht die virtuelle Maschine 10 die Verwendung zuvor entwickelter Programme oder Programm-Module auch auf neuen Hardware-Plattformen 12 ohne Durchsicht bereits bestehender Programme.
Wie in Fig. 1 ebenso gezeigt, enthält die virtuelle Maschine eine Speicherteil 18, der beispielsweise als Datenstruktur in der Software der virtuellen Maschine realisiert ist und für die Zwischenspeicherung extern zugeführter Programme oder Programm-Module angepaßt ist, sowie für weitere Information, die für das Ausführen der Software der virtuellen Maschine erforderlich ist.
Wird die virtuelle Maschine 10 bei einer Telekommunikationsvermittlung angewandt, wie nachfolgend detaillierter unter Bezug auf die Fig. 6 diskutiert, so können derartige Zwischendaten im Zusammenhang mit Meldungen oder Signalen stehen, die der Telekommunikationsvermittlung zugeführt werden und die im Zusammenhang mit den Signalpuffern und Registern stehen, die oben im Hinblick auf die Fig. 7 erörtert wurden. Jedoch ist dies lediglich als ein Anwendungsbeispiel der vorliegenden Erfindung zu verstehen, und es grenzt deren Schutzbereich nicht ein.
Wie in Fig. 1 gezeigt, enthält das Programm der virtuellen Maschine auch einen Eingabeprogramm-Handhabungsteil 20, der das Ausführen des in dem Speicherteil 18 gespeicherten Programms für die weiter Ausführung auf der virtuellen Maschine 10 vorbereitet. Hierbei enthält dieser Eingabeprogramm-Handhabungsteil 20 eine Modusauswahlvorrichtung 22, einen Interpretierer 24 und einen Compiler 26. Die Modusauswahlvorrichtung entscheidet, ob ein eingegebenes Programm durch Interpretieren oder Compilieren ausgeführt wird, und sie führt demnach selektiv das Eingabeprogramm entweder dem Interpretierer 24 oder dem Compilierer 26 zu. Obgleich in der Fig. 1 der Compilierer 26 im Zusammenhang mit der virtuellen Maschine dargestellt ist, ist zu erkennen, daß der Compilierer auch auf einer getrennten Maschine ablaufen kann.
Wie ebenso in Fig. 1 gezeigt, haben sowohl die virtuelle Verarbeitungseinheit 16 als auch der Eingabeprogramm- Handhabungsteil 20 Zugriff auf einen Sprungspeicher 28, um entweder ein Schreiben hierauf auszuführen oder von diesem Sprungspeicher zu lesen. Eine Option zum Implementieren des Sprungspeichers kann ein typischer Puffer mit einer Größe von beispielsweise 8 Kbyte sein. Ferner ist für den Betrieb des Sprungspeichers ein Zeiger vorgesehen, der zu dem zuletzt eingetragenen Eintrag in dem Sprungspeicher zeigt. Nach jeder Übermittlung eines Eintrags zu dem Sprungspeicher wird der Zeiger festgelegt und implementiert. Im Fall, dass der festgelegte Zeiger zu der letzten Sprungspeicherzelle des Sprungspeichers zeigt, wird der Zeiger nicht inkrementiert, sondern zu der ersten Speicherzelle des Sprungspeichers rüchgesetzt, wodurch der zyklische Sprungspeicher erzielt wird. Alternativ ist es möglich, ein einzelnes Bit für den Sprung in dem Sprungspeicher zu speichern, z. B. ein Bit 1 in dem Fall zu speichern, dass ein Zweig verfolgt wird, und ein Bit 0 in dem Fall zu speichern, dass ein Zweig nicht verfolgt wird.
Wie bereits oben dargestellt, kann betriebsgemäß ein Eingabeprogramm der virtuellen Maschine 10 über den Speicherteil 18 zugeführt werden. Anschließend liest der Eingabeprogramm-Handhabungsteil 20 das Eingabeprogramm und bestimmt in der Modusauswahlvorrichtung 22, ob dieses Eingabeprogramm zu unterpretieren oder durch Compilieren des Codes auszuführen ist. Im Fall des Interpretierens durch den Interpretierer 24 wird ein virtueller Speichercode erzeugt, der Eingangsdaten für die Verarbeitungseinheit des virtuellen Moduls 16 darstellt. Andernfalls erzeugt der Compilierer 26 Maschinencode, damit dieser direkt auf der Hardware-Plattform 12 ausgeführt wird.
Der in Fig. 1 gezeigte Sprungspeicher 28 gemäß der vorliegenden Erfindung ist zum Unterstützen einer Optimierung der Ausführungsform des Eingabeprogramms vorgesehen. Ferner erfolgt auch ein Bezug auf den Sprungspeicher 28 als Sprungadreßspeicher 28, und er kann auch für Zwecke der Fehlerbehebung und der Fehlerauffindung während dem Ausführen des Eingabeprogramms verwendet werden.
Insbesondere während dem Ausführen des Eingabeprogramms durch Interpretierer wird der virtuelle Maschinencode der Verarbeitungseinheit des virtuellen Moduls 16 zugeführt. Im Fall von Springen wird die betreffende Sprungstartadresse und/oder Sprungstoppadresse in den Sprungadreßspeicher 28 geschrieben. Hier ist zu erwähnen, dass jede Sprungstartadresse und/oder Sprungstoppadresse entweder der reelle Adreßtyp oder der logische Adreßtyp sein kann. Demnach ermöglicht dies das Erzielen einer Ausführungsstatistik für den ausgeführten virtuellen Speichercode zum nachfolgenden verbesserten Interpretieren.
Ferner werden im Fall der Compilierung während dem Ausführen des Maschinencodes auch Ausführungsstatistiken durch das Schreiben der Sprungstartadressen und/oder Sprungstoppadressen in den Sprungadreßspeicher 28 gesammelt.
Wie in Fig. 1 gezeigt, können die in dem Sprungadreßspeicher 28 gespeicherten Ausführungsstatistiken entweder durch die Verarbeitungseinheit des virtuellen Moduls 16 oder durch den Compiler zum Optimieren der Ausführung des übermittelten Eingabeprogramms verwendet werden. Weiterhin läßt sich die erzeugte Information für Fehlerbehebungszwecke verwenden.
Wie bereits oben dargelegt, besteht eine Idee der vorliegenden Erfindung in der Verwendung des Sprungadreßspeichers zum Bereitstellen von Ausführungsstatistiken als Profilierungsinformation sowie als Information, die für Fehlerbehebungs- und -testzwecke nützlich ist. Demnach sind die Kosten für das Schreiben in den Sprungadreßspeicher durch das Erzielen einer verbesserten Eingabeprogrammausführung gerechtfertigt.
Nachfolgend erfolgt eine detailliertere Beschreibung des Compilierens des Eingabeprogramms im Hinblick auf das in Fig. 2 gezeigte Flußdiagramm. Wie im folgenden detaillierter beschrieben, unterscheidet sich die vorliegende Erfindung gegenüber dem Stand der Technik dahingehend, dass der Compilierungsprozeß nicht durch eine vorangehende Interpretierer des Eingabeprogramms getriggert wird, wie bei dem dynamischen Compilieren, sondern auf ausführbaren Programmen basiert, die auf der Hardware-Plattform 12 ablaufen. Demnach wird die Optimierung durch Programme getriggert, die auf der Hardware-Plattform 12 der virtuellen Maschine 10 laufen und nicht durch Ergebnisse eines Interpretierungsprozesses wie bei dem oben beschriebenen dynamischen Compilierungsprozeß.
Demnach wird gemäß der vorliegenden Erfindung vorgeschlagen, zunächst in einem Schritt S10 das Eingabeprogramm zu compilieren. Dieser Compilierungsprozeß kann zu einem Maschinencode führen, der auf einem Standardprozessor, Mikrocomputer, firmeneigener Hardware, etc., abläuft, oder was auch immer geeignet sein mag. Demnach wird das übermittelte Eingabeprogramm auf ein Zielprogramm abgebildet. Dies ermöglicht das Verwenden zuvor entwickelter Programme oder Programm-Module auch auf neuen Plattformen und somit einen Schutz für die Investitionskosten in Software.
Wie auch in Fig. 2 gezeigt, wird das erzeugte Zielprogramm anschließend auf der Hardware-Plattform 12 während einem Schritt S12 ausgeführt, zum Erzeugen von Ausführungsstatistiken. Wie bereits oben erläutert, werden die Ausführungsstatistiken in den Sprungspeicher 28 geschrieben.
Ferner ist vorzusehen, dass das Erzeugen der Ausführungsstatistiken für ein bestimmtes Zeitintervall oder eine bestimmte Zahl von Schritten in dem Zielprogramm durchgeführt wird, und dass lediglich anschließend das Erzeugen der Ausführungsstatistiken unterbrochen wird, um ein bereits bestehendes Zielprogramm weiter zu optimieren.
In einem weiteren Schritt S16 wird bestimmt, ob das gesamte Ausführen des Eingabeprogramms abgeschlossen werden sollte oder nicht. Ist dies nicht der Fall, so folgt ein Schritt S18 zum Ausführen einer Analyse der generierten Ausführungsstatistiken. Diese Analyse S18 der Ausführungsstatistiken bildet die Basis für die Bestimmung nach Schritt S20, d. h. ob eine weitere Optimierung erforderlich ist oder nicht. Wird in dem Schritt S20 bestimmt, dass eine weitere Optimierung nicht erforderlich ist, so wird der Schritt S22 zum erneuten Compilieren des momentan vorliegenden Zielprogramms durchgeführt, bei Verwendung der Ausführungsstatistiken als Compilerunterstützung.
Wie in Fig. 2 gezeigt, wird der Recompilierungsschritt S22 mehrere Male zum Erzielen einer iterativen Verbesserung des Zielprogramms durchgeführt. Weiterhin wird ein Recompilierungsschritt S22 jedesmal dann durchgeführt, wenn ein Analyseintervall für die Analyse der erzeugten Ausführungsstatistiken verstrichen ist.
Die Fig. 3 zeigt ein Flußdiagramm für das Erzeugen der Ausführungsstatistiken gemäß dem in Fig. 2 gezeigten Schritt S12.
Wie in Fig. 3 gezeigt, wird in einem Schritt S12-1 der nächste Befehl des Zielprogramms, z. B. der nächste Schritt des Maschinencodes ausgeführt. In einem Schritt S12-2 wird dann bestimmt, ob der ausgeführte Befehl des Zielprogramms ein bedingter oder nichtbedingter Sprung des Zielprogramms ist. Wird diese Abfrage bejaht, so wird der Schritt S12-3 ausgeführt, um die Sprungstartadresse und/oder die Sprungstoppadresse in den Sprungadreßspeicher zu schreiben. Andernfalls wird der nächste Befehl des Zielprogramms unmittelbar ausgeführt, gemäß dem in Fig. 3 gezeigten Schritt S12-1.
Demnach ermöglicht das Speichern der Sprungstartadressen und/oder Sprungstoppadressen das Erzeugen von Information über die am meisten verwendeten Teile des Zielprogramms und ferner des hierin erfolgenden Programmablaufs, d. h. der relevantesten Pfade bei der Zielprogrammausführung. Wird diese Information dem Compilierer zugeführt, so kann sie zum Ausführen einer spezifischen Optimierung der relevantesten Teile des Zielprogramms verwendet werden. Demnach wird im Gegensatz zum Stand der Technik das Optimieren des Compilierungsprozesses nicht durch vorangehende Interpretierung der zu optimierenden Teile des Eingabeprogramms durchgeführt, sondern durch tatsächliches Compilieren der Eingabeteile und anschließendes Aufnehmen von Ausführungsstatistiken unter Verwendung eines generierten Zielprogramms, z. B. eines Maschinencodes, der auf einer kommerziell verfügbaren CPU oder einem kommerziell verfügbaren Prozessor abläuft.
Die Fig. 4 zeigt eine Modifikation für das Erzeugen der Ausführungsstatistiken, wie es in Fig. 3 gezeigt ist.
Insbesondere wird die Sprungstartadresse und/oder die Sprungstoppadresse lediglich in den Sprungadreßspeicher in dem Fall geschrieben, dass eine zuvor festgelegte Sprungrate für diesen bedingten oder unbedingten Sprung unterhalb eines vorgegebenen Schwellwerts liegt, gemäß dem Schritt S12-14. Diese Modifikation berücksichtigt die iterative Natur des Optimierungsprozesses, wie sie in Fig. 2 gezeigt ist. In anderen Worten ausgedrückt, nachdem eine bestimmte Zahl von Iterationen durchgeführt ist, ist klar, dass bestimmte Teile eines Zielprogramms wichtiger sind als andere. Demnach wird in einem Fall, in dem Sprungadressen im Hinblick auf diese Teile in den Sprungspeicher 28 geschrieben werden, keine tatsächliche Neuinformation erzeugt, sondern lediglich eine Bestätigung einer bereits bestehenden Kenntnis über Optimierungskriterien wiederholt. Demnach kann das Sammeln einer derartigen Information übersprungen werden, um unnötige Schreibvorgänge in den Sprungadreßspeicher zu vermeiden und demnach den unnötigen Verlust von Rechenzeitpunkt. Typische Werte für einen solchen Schwellwert liegen im Bereich von 50 bis 90%. Demnach werden lediglich diejenigen Sprünge, die nicht so oft ausgeführt werden, für die nachfolgende Optimierung berücksichtigt, wodurch ein reduzierter Aufwand für den Zugriff auf den Sprungadreßspeicher erzielt wird.
Es ist zu erwähnen, dass gemäß der vorliegenden Erfindung das Compilieren des Eingabeprogramms in das Zielprogramm entweder zu direkt ausführbarem Code führen kann, der auf der Hardware-Plattform 12 abläuft, oder zum Maschinencode, der Bibliotheksfunktionen verwendet. In dem letztgenannten Fall lädt die Verarbeitungseinheit der virtuellen Maschine 16 Bibliotheksfunktionen zum Ermöglichen der Ausführung des Zielprogramms.
Nachfolgend wird ein Beispiel für den Compilieroptimierungsprozeß für eine virtuelle Maschine gemäß der vorliegenden Erfindung im Hinblick auf das in Fig. 5 gezeigte Berechnungsflußdiagramm gegeben.
Diese Beispiel zeigt, dass, obgleich der Compilieroptimierungsprozeß oben unter Bezug auf eine virtuelle Maschine beschrieben wurde, er auch auf das allgemeine Compilieren von Quellprogrammen in Maschinencodes anwendbar ist, wie oben unter Bezug auf die Fig. 7 und 8 erläutert.
Die Fig. 5 zeigt ein Flußdiagramm für einen Teil eines Eingabeprogramms in der Form eines Quellcodes mit einer Beschreibung einer höheren Programmiersprache beispielsweise wie folgt:
Hierbei wird davon ausgegangen, dass diese Beschreibung auf jede beliebige Programmiersprache angepaßt werden kann, beispielsweise die Pascal-Sprache, die APL-Sprache, die C- Sprache, die C++-Sprache, oder welch andere Art einer geeigneten Sprache sich auch immer eignen möge.
Ferner erfolgt für die nachfolgende Erläuterung des Compiler- Optimierungsprozeß kein bestimmter Bezug auf irgendeinen spezifischen Maschinencode oder Assemblercode, sondern lediglich auf eine allgemein gehaltene Beschreibung des Compilierungsergebnis zum Vermeiden jedwedger Einschränkung des Schutzbereichs der vorliegenden Erfindung.
Bei Anwenden des Compilierungsoptimierungsprozesses auf das Konzept der virtuellen Maschine wird davon ausgegangen, daß die höhere Programmiersprache beispielsweise in einen ersten Maschinencode übertragen wird, der an eine erste Hardware angepaßt ist. Jedoch kann der Fall auftreten, bei dem dieser erzeugte Maschinencode, auf den ebenso als Eingabemaschinencode Bezug genommen wird, auf einer unterschiedlichen Hardware-Plattform ausgeführt werden muß, beispielsweise durch Hochrüsten bestehender Systeme. Demnach muß der Eingabemaschinencode in einen Zielmaschinencode für das nachfolgende Ausführen auf der unterschiedlichen Hardware-Plattform übertragen werden.
Demnach bedeutet Compilieren im Sinne der vorliegenden Erfindung entweder das Abbilden einer Beschreibung einer höheren Programmiersprache in einen ausführbaren Maschinencode oder das Compilieren von einem Eingabeprogramm in ein Zielprogramm, z. B. von einem Eingabemaschinencode in einen Zielmaschinencode gemäß dem Rechnerkonzept einer virtuellen Maschine.
Für den Zweck der Erläuterung wird davon ausgegangen, dass die Beschreibung der höheren Programmiersprache für den in Fig. 5 gezeigten Berechnungsprozeß zu einem Eingabemaschinencode wie folgt führt:
Demnach wird für den Zweck der Erläuterung davon ausgegangen, dass jeder Variablet der höheren Programmiersprache ein Register zugeordnet ist. Demnach entspricht der erste Schritt A = T1 der Berechnung dem Schritt 1000 des Eingabemaschinencodes, d. h. der Inhalt des Registers R_T1 wird in das Register R_A geschrieben; ferner entspricht der Rechenschritt B = T2.T3 den Schritten des Eingabemaschinencodes 1001 bis 1003, bei denen anfänglich der Inhalt des Registers R_T2 in das Multiplizierregister R_M geschrieben wird (1001), der anschließend mit dem Inhalt des Registers R_T3 multipliziert wird (1002), und das Ergebnis wird anschließend in das Register R_B geschrieben (1003). Hiernach folgt das Laden des Vergleichsregisters R_CMP mit dem Wert der Variablen A (1004); ist der Inhalt des Vergleichsregisters R_CMP nicht gleich dem Inhalt des Registers R_T3, so wird ein bedingter Sprung um drei Schritte ausgeführt (1005). Andernfalls wird der Berechnungsschritt C = T1 durchgeführt (1006). Anschließend wird ein unbedingter Sprung zu dem Rechenschritt P = 14 (1010) durchgeführt (1007). Andernfalls wird der zweite Zweig der IF/ELSE/ENDIF Anweisung ausgeführt (1008/1009).
Wie oben erläutert, kann die Anforderung bestehen, diesen Eingabemaschinencode auf einen unterschiedlichen Code abzubilden, auf den im folgenden als Zielprogramm oder Äquivalent-Maschinencode für den Zweck der Erklärung Bezug genommen wird; dieser kann wie folgt definiert sein:
Demnach erzielt der Zielmaschinencode dieselbe Funktionalität wie der Eingabemaschinencode, jedoch kann er beispielsweise auf einen unterschiedlichen Prozessor angepaßt sein und demnach eine unterschiedliche Senderdarstellung der Beschreibung auf höherer Programmiersprache für den in Fig. 5 dargestellten Prozeß verwenden.
Ein typisches Beispiel ist die vereinfachte Darstellung der Multiplikation in den Eingabemaschinencode (1001 bis 1003) gemäß einem zusammengefaßten Befehl in den Zielmaschinencode (1001). Diese modifizierte Syntax kann auch zu unterschiedlichen Sprungadressen führen, beispielsweise bei dem nicht bedingten Sprung nach dem Ausführen des ersten Zweigs der IF/ELSE/ENDIF Anweisung (1005) in dem Zielmaschinencode.
Nachfolgend wird die Anwendung des erfindungsgemäßen Compilierungsoptimierungsprozesses beschrieben. Hier ist zu erwähnen, dass dieser Optimierungsprozeß bereits auf das Übertragen der Beschreibung auf höherer Ebene in den Eingabemaschinencode angewendet werden kann oder äquivalent während dem Compilieren des Eingabemaschinencodes in den Zielmaschinencode.
Für den Zweck der Erläuterung wird nachfolgend die Anwendung des Compilierungsoptimierungsprozesses gemäß der vorliegenden Erfindung im Hinblick auf den Zielmaschinencode beschrieben. Zum Erzeugen einer Ausführungsstatistik ist es erforderlich, Schritte einzufügen, die ein Schreiben von Sprungstartadressen und/oder Sprungstoppadressen in den Sprungspeicher 28 durchführen. Hierzu wird eine Anweisung zum Durchführen eines Schreibvorgangs in den Sprungadreßspeicher WJAM (Engl.: write jump address momory) bei dem Zielmaschinencode eingefügt, wie im folgenden gezeigt:
Die Erläuterung dieses modifizierten Codes ist dieselbe wie sie oben erfolgte, mit dem einzigen Unterschied, daß der WJAM Befehl eingefügt ist. Diese Anweisung bewirkt zumindest ein Schreiben einer Sprungstartadresse und einer Sprungstoppadresse in den Sprungadreßspeicher nach dem Ausführen eines Sprungs optional auch des Typs des Sprungs, d. h. bedingt (Engl.: jump conditional, JC) oder nicht bedingt (Engl.: jump unconditional, JU). Diese Information kann anschließend zum Ableiten der Wahrscheinlichkeit der Ausführung bestimmter Programmpfade herangezogen werden, wie in Fig. 5 gezeigt.
Ein derartiges Beispiel besteht darin, dass hauptsächlich der rechte Zweig des Flußdiagramms ausgeführt wird (99,9%), während der linke Pfad hauptsächlich nicht verwendet wird (0,01%). In diesem Fall kann der Compiler Compilercodes zum Ausführen des rechten Pfads bereits vor der Ausführung der IF/ELSE/ENDIF Anweisung einfügen, wie für den folgenden optimierten Zielmaschinencode gezeigt:
Bei sicherer Kenntnis der Ausführungspfade läßt sich der Speicherzugriff zum Zugreifen auf die relevanten Variablen parallelisieren, derart, dass die Aktionen vor der Ausführung der IF/ELSE/ENDIF Anweisung durchgeführt werden.
Eine weitere Verbesserung besteht darin, dass die Zahl der Sprünge reduziert ist und demnach ebenso auch die Wahrscheinlichkeit eines Cache-Fehlzugriffs.
Jedoch ist es zu erkennen, dass dies lediglich ein Beispiel zum Darstellen der Ausführung ist, und dass alle andere Compilieroptimierungsschritte, die für den Fachmann allgemein bekannt sind, ebenso während dem Compilierungsoptimierungsprozeß herangezogen werden können. Da all diese Techniken dem Fachmann allgemein bekannt sind, erfolgt hier keine weitergehende Erläuterung hiervon.
Ferner ist zu erkennen, dass obgleich obere die Compilierungsoptimierungstechnik gemäß der vorliegenden Erfindung erläutert wurde - d. h., das Erzeugen von Ausführungsstatistiken unter Verwendung eines Sprungspeichers - sich diese Compilierungsoptimierungstechnik auch in Kombination mit einem Interpretierer des Eingabemaschinencodes aufbauend auf eine virtuellen Maschine verwenden läßt, wie in Fig. 1 gezeigt.
Ein derartiges Beispiel ist eine Telefonvermittlung, die aufbauend auf einer virtuellen Maschine realisiert ist, mit einer kombinierten Vorgehensweise zum Interpretierer/Compilieren zum Erhöhen der Flexibilität.
Zum Erzielen derselben Funktionalität, wie oben im Hinblick auf die Fig. 7 und 8 erläutert, ist der irr Fig. 8 gezeigte Prozeß, wie in Fig. 6 gezeigt, zu modifizieren. Diejenigen Teile der Ausführung, die identisch zu den zuvor im Hinblick auf die Fig. 8 erläuterten Schritte sind, sind anhand derselben Bezugszeichen bezeichnet, und eine wiederholte Erläuterung hiervon wird nachfolgend weggelassen.
Wie in Fig. 6 gezeigt, teilt der in der Telekommunikationsvermittlung und auf einer virtuelle Maschine laufende Prozeß das Verarbeiten von Meldungen/Signalen gemäß dem in Fig. 8 gezeigten Schritt 104 in zwei Schritte S104-1 und S104-2. Demnach wird anfänglich ein Ausführungsmodus, d. h. ein Interpretieren oder Compilieren, für jedes übermittelte Eingabemodul im Schritt S104-1 bestimmt. Anschließend erfolgt im Schritt S104-2 ein Verarbeiten der in dem Speicherteil 18 der virtuellen Maschine 10 gespeicherten Meldungen/Signale gemäß dem ausgewählten Modus. Demnach wird nicht nur eine hardware­ unabhängigere Realisierung der Telekommunikationsvermittlung erzielt, sondern auch eine Skalierbarkeit zwischen einfacher Implementierung und Optimierung im Hinblick auf Laufzeit und Wirkungsgrad.
Ferner wird anhand der oben gegebenen Beschreibung im Hinblick auf die vorliegende Erfindung deutlich, dass die vorliegende Erfindung auch ein Computerprogrammprodukt betrifft, das sich variabel in dem internen Speicher der Hardware-Plattform laden läßt, zum Durchführen der Schritte des erfindungsgemäßen Compilierungsoptimierungsprozesses dann, wenn das Produkt auf dem Prozessor der Hardware- Plattform abläuft. Weiterhin betrifft die Erfindung ebenso ein Prozessorprogrammprodukt, das auf einem prozessor­ verwendbaren Medium gespeichert ist und für eine Compilierungsoptimierung bereitgestellt wird, enthaltend eine prozessor-lesbare Programmvorrichtung zum Ausführen jedes der Schritte der erfindungsgemäßen Compilierungsoptimierung. Typischerweise sind derartige Medien beispielsweise Floppy- Disks, Festplatten, CD Disk, ROM, RAM, EPROM, EEPROM Chips, ein Magnetband, Bandkassetten mit integrierter Schaltung, ein ZIP Laufwerk oder ein Speichern auf der Grundlage eines Herunterladens aus dem Internet.
Die vorangehende Beschreibung der bevorzugten Ausführungsformen erfolgte für den Zweck der Darstellung und der Beschreibung. Sie ist nicht als erschöpfend anzusehen, oder dahingehend, dass sie die Erfindung auf die genau offenbarte Form einschränkt. Offensichtliche Modifikationen oder Variationen sind im Licht der obigen technischen Lehre möglich. Die Ausführungsformen wurden ausgewählt und beschrieben, um die beste Darstellung der Prinzipien der vorliegenden Erfindung zu erzielen, sowie von deren praktischen Anwendung, und ferner einen Fachmann in die Lage zu versetzen, die vorliegende Erfindung in zahlreichen Ausführungsformen anzuwenden, sowie mit zahlreichen Modifikationen, wie sie sich für den bestimmten betrachteten Anwendungsfall eignen. Sämtliche derartige Modifikationen und Variationen sind von dem Schutzbereich der Erfindung umfaßt, so wie er durch die angefügten Patentansprüche definiert ist.

Claims (12)

1. Programmprofilierungsverfahren für eine virtuelle Maschine, enthaltend die Schritte:
  • a) Compilieren eines übermittelten Programms zum Erzeugen eines Zielprogramms (S10);
  • b) Ausführen des Zielprogramms zum Erzeugen von Ausführungsstatistiken, die in einem Sprungspeicher (28) gespeichert werden; und
  • c) erneutes Compilieren des Zielprogramms (S22) unter Verwendung der in dem Sprungspeicher (28) gespeicherten Ausführungsstatistiken als Compilierungsunterstützung.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass der Schritt zum erneuten Compilieren (S22) mehrere Male zum Erzielen einer iterativen Verbesserung des Zielprogramms durchgeführt wird.
3. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass der Schritt zum erneuten Compilieren (S22) jedesmal dann ausgeführt wird, wenn ein Analyseintervall für die Analyse der erzeugten Ausführungsstatistiken verstrichen ist.
4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass das Erzeugen der Ausführungsstatistiken (S12) folgende Teilschritte enthält:
  • a) Ausführen der nächsten in dem Zielprogramm auszuführenden Befehls (S12-1);
  • b) Bewerten dieses nächsten Befehls zum Bestimmen, ob er zu einem bedingten oder unbedingten Sprung führt (S12-2); und
  • c) Schreiben der Sprungstartadresse und/oder Sprungstoppadresse in den Sprungspeicher in dem Fall eines Sprungs (S12-3).
5. Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass der Schritt zum Schreiben der Sprungstartadresse und/oder Sprungstoppadresse in den Sprungspeicher (28) lediglich in dem Fall ausgeführt wird, dass eine zuvor bestimmte Sprungrate für diesen bedingten oder nichtbedingten Sprung unterhalb eines bestimmten vorbestimmten Schwellwerts liegt (S12-4).
6. Verfahren nach Anspruch 5, dadurch gekennzeichnet, dass der vorbestimmte Schwellwert in dem Bereich von 50 bis 90% liegt.
7. Computersystem zum Ausführen einer Verarbeitung eines übermittelten Maschinencodes gemäß einer virtuellen Maschine, enthaltend:
  • a) eine I/O Schnittstellenvorrichtung (12),
  • b) einen Speicher (12),
  • c) einen Prozessor (12), derart, dass
  • d) der Speicher Compilierungssoftware mit der Fähigkeit zum Erzielen einer iterativen Optimierung eines übermittelten Programms durch die folgenden Schritte speichert:
  • e) Compilieren des übermittelten Programms zum Erzeugen eines Zielprogramms (S10);
  • f) Ausführen des Zielprogramms zum Erzeugen von Ausführungsstatistiken, die in einem Sprungspeicher gespeichert werden (S12); und
  • g) erneutes Compilieren des Zielprogramms unter Verwendung der in dem Sprungspeicher gespeicherten Ausführungsstatistiken als Compilierungsunterstützung (S22).
8. Computersystem nach Anspruch 7, dadurch gekennzeichnet, dass der Sprungspeicher (28) zum Speichern von Sprungstartadressen und/oder Sprungstoppadressen ausgebildet ist.
9. Computersystem nach Anspruch 7, dadurch gekennzeichnet, dass der Speicher ferner ein Interpretierungsprogramm einer virtuellen Maschine (24) zum Ausführen des übermittelten Programms durch Interpretierer speichert.
10. Computersystem nach Anspruch 7, dadurch gekennzeichnet, dass ein Bestimmen des Ausführungsmodus für das übermittelte Programm in einem Modusauswahlmodul (22) durchgeführt wird.
11. Computerprogrammprodukt, das direkt in den Speicher eines Computersystems ladbar ist, mit Software- Codeabschnitten zum Durchführen der Schritte gemäß einem der Patentansprüche 1 bis 6 dann, wenn das Produkt auf einem Prozessor des Computersystems läuft.
12. Prozessorprogrammprodukt, das in einem prozessor­ anwendbaren Medium gespeichert ist und für den zweck einer Compileroptimierung und einer virtuellen Maschine bereitgestellt ist, enthaltend:
  • a) ein prozessor-lesbares Programm zum Compilieren eines übermittelten Programms zum Erzeugen eines Zielprogramms;
  • b) ein prozessor-lesbares Programm zum Ausführen des Zielprogramms zum Erzeugen von Ausführungsstatistiken; und
  • c) ein prozessor-lesbares Programm zum erzeugen Compilieren des Zielprogramms unter Verwendung der Ausführungsstatistiken als Compilierungsunterstützung.
DE19963832A 1999-12-30 1999-12-30 Programmprofilierung Withdrawn DE19963832A1 (de)

Priority Applications (5)

Application Number Priority Date Filing Date Title
DE19963832A DE19963832A1 (de) 1999-12-30 1999-12-30 Programmprofilierung
US09/745,701 US20020010913A1 (en) 1999-12-30 2000-12-22 Program profiling
PCT/EP2000/013295 WO2001050242A2 (en) 1999-12-30 2000-12-27 Program profiling
AU23702/01A AU2370201A (en) 1999-12-30 2000-12-27 Program profiling
GB0217074A GB2375415B (en) 1999-12-30 2000-12-27 Program profiling

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE19963832A DE19963832A1 (de) 1999-12-30 1999-12-30 Programmprofilierung

Publications (1)

Publication Number Publication Date
DE19963832A1 true DE19963832A1 (de) 2001-07-05

Family

ID=7935033

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19963832A Withdrawn DE19963832A1 (de) 1999-12-30 1999-12-30 Programmprofilierung

Country Status (5)

Country Link
US (1) US20020010913A1 (de)
AU (1) AU2370201A (de)
DE (1) DE19963832A1 (de)
GB (1) GB2375415B (de)
WO (1) WO2001050242A2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102004014885A1 (de) * 2004-03-26 2005-11-03 Giesecke & Devrient Gmbh Verfahren zur Optimierung eines Programms eines tragbaren Datenträgers

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6971091B1 (en) * 2000-11-01 2005-11-29 International Business Machines Corporation System and method for adaptively optimizing program execution by sampling at selected program points
US20030101336A1 (en) * 2001-11-28 2003-05-29 Sun Microsystems, Inc. Technique for associating instructions with execution events
US20050125784A1 (en) * 2003-11-13 2005-06-09 Rhode Island Board Of Governors For Higher Education Hardware environment for low-overhead profiling
US8065665B1 (en) 2004-02-28 2011-11-22 Oracle America, Inc. Method and apparatus for correlating profile data
US7827543B1 (en) 2004-02-28 2010-11-02 Oracle America, Inc. Method and apparatus for profiling data addresses
US7735073B1 (en) 2004-02-28 2010-06-08 Oracle International Corporation Method and apparatus for data object profiling
US7707554B1 (en) 2004-04-21 2010-04-27 Oracle America, Inc. Associating data source information with runtime events
US7168070B2 (en) * 2004-05-25 2007-01-23 International Business Machines Corporation Aggregate bandwidth through management using insertion of reset instructions for cache-to-cache data transfer
US8006235B2 (en) * 2007-06-11 2011-08-23 Microsoft Corporation Profiler management
US8601445B2 (en) 2007-06-13 2013-12-03 Microsoft Corporation Detaching profilers
JP6319818B2 (ja) * 2014-02-19 2018-05-09 株式会社Fuji 対基板作業システム及び対基板作業システムの部品の装着順を管理する方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452457A (en) * 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
US5787285A (en) * 1995-08-15 1998-07-28 International Business Machines Corporation Apparatus and method for optimizing applications for multiple operational environments or modes
US6301652B1 (en) * 1996-01-31 2001-10-09 International Business Machines Corporation Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
US5881276A (en) * 1996-07-30 1999-03-09 Intel Corporation Manipulation of protected pages to reduce conditional statements
US5915114A (en) * 1997-02-14 1999-06-22 Hewlett-Packard Company Dynamic trace driven object code optimizer
US6154857A (en) * 1997-04-08 2000-11-28 Advanced Micro Devices, Inc. Microprocessor-based device incorporating a cache for capturing software performance profiling data
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6148437A (en) * 1998-05-04 2000-11-14 Hewlett-Packard Company System and method for jump-evaluated trace designation
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6233678B1 (en) * 1998-11-05 2001-05-15 Hewlett-Packard Company Method and apparatus for profiling of non-instrumented programs and dynamic processing of profile data
US6351844B1 (en) * 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6353924B1 (en) * 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102004014885A1 (de) * 2004-03-26 2005-11-03 Giesecke & Devrient Gmbh Verfahren zur Optimierung eines Programms eines tragbaren Datenträgers
DE102004014885B4 (de) * 2004-03-26 2016-04-14 Giesecke & Devrient Gmbh Verfahren zur Optimierung eines Programms eines tragbaren Datenträgers

Also Published As

Publication number Publication date
US20020010913A1 (en) 2002-01-24
WO2001050242A2 (en) 2001-07-12
GB0217074D0 (en) 2002-08-28
WO2001050242A3 (en) 2002-04-04
GB2375415B (en) 2004-06-30
AU2370201A (en) 2001-07-16
GB2375415A (en) 2002-11-13

Similar Documents

Publication Publication Date Title
DE69216020T2 (de) Verbessertes fehlersuchsystem und -verfahren, besonders für die fehlersuche in einer multi-architekturumgebung
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE19945992B4 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE69909945T2 (de) Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen
DE60010420T2 (de) Automatisches Regressionstesten von Arbeitsplatz-Software
DE60130840T2 (de) Vorrichtung und Verfahren zur Katalogisierung von symbolischen Daten zur Verwendung bei der Leistungsanalyse von Computerprogrammen
DE69932371T2 (de) Verschiebbare Instrumentationskennzeichen für die Prüfung und die Fehlerbeseitigung eines Computerprogramms
DE69127025T2 (de) Fehlererkennung und -beseitigung in einem Datenverarbeitungssystem
DE68926726T2 (de) Zur Aufgabenautomatisierung und Kommandoerzeugung passendes Rechnersystem und -methode
DE3687842T2 (de) Verfahren und Gerät zum Software-Austesten.
DE69924857T2 (de) Programm-kode-umwandlung
DE60021066T2 (de) Prüfung eines Softwarepakets
DE69634315T2 (de) Verfahren und Gerät zur Verwendung eines Ladebefehls der keinen Fehler verursacht
DE19928980A1 (de) Codeerzeugung für einen Bytecode-Compiler
US5937191A (en) Determining and reporting data accessing activity of a program
DE69905776T2 (de) Sprachenverarbeitungsverfahren mit geringem Aufwand und Speicherbedarf bei der Profildatensammlung
DE19963832A1 (de) Programmprofilierung
DE69026208T2 (de) Verfahren zur Erkennung möglicher Fehler einer Programmierung in Assembler Sprache mit Erfassung offensichtlicher Inkonsistenz mit einer vorhergehenden Operation
DE602006000728T2 (de) Unterstützung dynamisch typisierter Sprachen in typisierten Assemblersprachen
DE112018002316T5 (de) Codeabdeckungsverfolgung für ein mikrocontroller-programm
DE19600428C2 (de) Vorrichtung und Verfahren zum Reduzieren eines durch einen Prozeß verwendeten tatsächlichen Arbeitssatzes eines Prozesses in einem Computersystem mit virtuellem Speicher
DE68924507T2 (de) Verfahren und Gerät zur Markierung von Emulationsanalysezuständen.
US6735774B1 (en) Method and apparatus for system call management
DE69219420T2 (de) Verfahren und gerät zur rechnercode-verarbeitung in einem codeübersetzer
DE102019008598A1 (de) Identifikation und Visualisierung von Assoziationen zwischen Code, der von einem Modell generiert ist, und Quellen, welche die Codegeneration beeinflussen

Legal Events

Date Code Title Description
8141 Disposal/no request for examination