DE19963832A1 - Programmprofilierung - Google Patents
ProgrammprofilierungInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3447—Performance evaluation by modeling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3409—Recording 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.
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)
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)
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)
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 |
-
1999
- 1999-12-30 DE DE19963832A patent/DE19963832A1/de not_active Withdrawn
-
2000
- 2000-12-22 US US09/745,701 patent/US20020010913A1/en not_active Abandoned
- 2000-12-27 GB GB0217074A patent/GB2375415B/en not_active Expired - Fee Related
- 2000-12-27 WO PCT/EP2000/013295 patent/WO2001050242A2/en active Application Filing
- 2000-12-27 AU AU23702/01A patent/AU2370201A/en not_active Abandoned
Cited By (2)
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 |