DE112020003634T5 - Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren - Google Patents

Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren Download PDF

Info

Publication number
DE112020003634T5
DE112020003634T5 DE112020003634.0T DE112020003634T DE112020003634T5 DE 112020003634 T5 DE112020003634 T5 DE 112020003634T5 DE 112020003634 T DE112020003634 T DE 112020003634T DE 112020003634 T5 DE112020003634 T5 DE 112020003634T5
Authority
DE
Germany
Prior art keywords
machine instructions
executable code
creating
level construct
computer
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.)
Pending
Application number
DE112020003634.0T
Other languages
English (en)
Inventor
Iain Alexander Ireland
Reid Copeland
Allan Kielstra
David Kevin Siegwart
Toshihiko Koju
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112020003634T5 publication Critical patent/DE112020003634T5/de
Pending legal-status Critical Current

Links

Images

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/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

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)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Ein Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten auf hoher Ebene weist das Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms auf, das ein Konstrukt auf hoher Ebene aufweist. Das Kompilieren weist das Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt auf hoher Ebene und das Speichern von Kompilierzeitinformationen zu dem Konstrukt auf hoher Ebene auf. Das Verfahren weist ferner das Optimieren des ersten ausführbaren Codes auf, das das Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung aufweist. Die Optimierung weist ferner das Erstellen eines zweiten ausführbaren Codes auf. Hierfür weist das Verfahren das Erstellen eines zweiten Satzes von Maschinenanweisungen zu dem Konstrukt auf hoher Ebene aus der Zwischensprachendarstellung auf. Wenn das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen übereinstimmen, wird der zweite Satz von Maschinenanweisungen in den zweiten ausführbaren Code aufgenommen, anderenfalls wird der erste Satz von Maschinenanweisungen aufgenommen.

Description

  • Technischer Bereich
  • Die vorliegende Offenbarung betrifft allgemein Computertechnologie und insbesondere Verfahren, Computerprogrammprodukte und Datenverarbeitungssysteme zur Verbesserung der Leistung eines ausführbaren Programmcodes.
  • HINTERGRUND
  • Computer-Software umfasst einen durch ein Datenverarbeitungssystem auszuführenden Satz von Anweisungen. Computer-Software liefert Anweisungen, die es einem Datenverarbeitungssystem ermöglichen, beispielsweise als Textverarbeitungsvorrichtung, Tabellenkalkulationsvorrichtung oder Internetbrowservorrichtung, Datenablage, etc. zu fungieren. Es existiert eine breite Vielfalt an unterschiedlichen Datenverarbeitungssystemen, die zur Nutzung von Computer-Software geeignet sind. Dementsprechend soll der Begriff „Datenverarbeitungssystem“ im hier verwendeten Sinne weit ausgelegt werden und kann Personalcomputer, Laptop-Computer, Palmtop-Computer, Handheld-Computer, Netzwerkcomputer, Server, Mainframes, Arbeitsplätze, Mobiltelefone und ähnliche drahtlose Vorrichtungen, persönliche digitale Assistenten und weitere elektronische Vorrichtungen einschließen, auf denen Computer-Software installiert werden kann. Die Bedeutung der Begriffe „Computer“, „Computer-Software“, „Computerprogramm“, „Computerprogrammmierung“, „Software“, „Software-Programm“ und verwandte Begriffe ist ähnlich weit auszulegen.
  • Im Allgemeinen wird moderne Computer-Software ursprünglich unter Verwendung syntaktischer Konstrukte, die für einen Programmierer als die in der Software verkörperten Anweisungen repräsentierend verständlich sind, in einer Computerprogrammmiersprache „auf hoher Ebene“ geschrieben. Computerprogrammmiersprachen auf hoher Ebene sind nützlich, da ihre syntaktischen Konstrukte Programmierern die Erstellung von Computer-Software erleichtern, weil sie Anweisungen nicht in einer Sprache zusammenstellen müssen, die von dem Datenverarbeitungssystem direkt verstanden würde. Das Schreiben von Anweisungen in einer derartigen Sprache wäre weit schwieriger, da derartige Sprachen wenig bis gar keine Ähnlichkeit mit irgendeiner menschlichen Sprache aufweisen.
  • In einer Computerprogrammmiersprache auf hoher Ebene geschriebene Anweisungen können jedoch von einem Datenverarbeitungssystem im Allgemeinen nicht direkt verstanden und implementiert werden. Daher wird ein in einer Computerprogrammmiersprache auf hoher Ebene geschriebenes Computerprogramm, bevor es von einem Datenverarbeitungssystem verwendet werden kann, zunächst in eine Sprache „kompiliert“, die von dem Zieldatenverarbeitungssystem verstanden wird. Das Kompilieren ist ein Prozess, der normalerweise von einem als „Compiler“ bezeichneten Computerprogramm ausgeführt wird, durch das die syntaktischen Konstrukte der Computerprogrammmiersprache auf hoher Ebene im Grunde in Anweisungen in einer Sprache übersetzt werden, die von dem Zieldatenverarbeitungssystem (möglicherweise über eine Zwischen-Software-Ebene) verstanden wird. Das Ergebnis des „Kompilierens“ oder „Kompilierrungsprozesses“ ist als „ausführbarer Code“ oder „Binärcode“ bekannt, womit der Computerprogrammmcode gemeint ist, der von dem Datenverarbeitungssystem entweder direkt oder über eine Zwischen-Software-Ebene ausgeführt werden kann, und die Anweisungen, die von dem Zieldatenverarbeitungssystem verstanden werden, werden als „Maschinenanweisungen“ bezeichnet
  • Computerprogrammmiersprachen auf hoher Ebene können als unter einen von zwei Hauptypen fallend betrachtet werden: statisch kompilierte Sprachen und dynamisch kompilierte Sprachen. Bei statisch kompilierten Sprachen wird der Kompilierrungsprozess ein einziges Mal ausgeführt, bevor ein Code ausgeführt wird, und das Ergebnis of der Kompilierrung ist ein ausführbarer Code, der von dem Datenverarbeitungssystem ohne jedwede Zwischen-Software-Ebene direkt implementiert werden kann. Statisch kompilierte Sprachen schließen C, C++, FORTRAN, PL/I, COBOL und Ada ein. Bei dynamisch kompilierten Sprachen wie Java™ wird der Quellencode zunächst zu einer Zwischenform kompiliert, die von einer Zwischen-Software-Ebene wie einer virtuellen Java-Maschine (JVM, Java virtual mashine) implementiert werden kann. Bei Java ist diese Zwischenform als „Bytecode“ bekannt. Typischerweise, jedoch nicht notwendigerweise, führt die Zwischen-Software-Ebene jedes Mal eine zusätzliche Kompilierrung aus, wenn das Computerprogramm abläuft, normalerweise um die Zwischenform des Quellencodes in einen ausführbaren Code zu übersetzen, der von dem Datenverarbeitungssystem direkt ausgeführt werden kann. Java und sämtliche Java-basierten Markenzeichen und Logos sind Warenzeichen oder eingetragene Warenzeichen von Oracle und/oder seinen Konzerngesellschaften.
  • Daher besteht in der Technik die Notwendigkeit, dem vorstehend angesprochenen Problem zu begegnen.
  • ZUSAMMENFASSUNG
  • Unter einem ersten Aspekt betrachtet wird durch die vorliegende Erfindung ein computerimplementiertes Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene bereitgestellt, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und das Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und das Optimieren des ersten ausführbaren Codes durch einen binären Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache) des Computerprogramms, wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; und Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung des Computerprogramms, wobei das Erstellen des zweiten ausführbaren Codes aufweist: Erstellen eines zweiten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene anhand der IL-Darstellung des Konstrukts hoher Ebene; Aufnehmen des zweiten Satzes von Maschinenanweisungen in den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, und Aufnehmen des ersten Satzes von Maschinenanweisungen in den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens nicht übereinstimmen.
  • Bei der Betrachtung unter einem weiteren Aspekt wird durch die vorliegende Erfindung ein System bereitgestellt, das aufweist: einen Speicher und einen Prozessor, der mit dem Speicher gekoppelt ist, wobei der Prozessor darauf ausgelegt ist, ein Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene auszuführen, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen binären Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache), wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung, wobei der zweite ausführbare Code einen zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene umfasst; Vergleichen des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen durch den binären Optimierer; und Ersetzen des ersten ausführbaren Codes durch den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen.
  • Bei der Betrachtung unter einem weiteren Aspekt wird durch die vorliegende Erfindung ein Computerprogrammprodukt zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene bereitgestellt, wobei das Computerprogrammprodukt ein computerlesbares Speichermedium aufweist, das von einer Verarbeitungsschaltung lesbar ist und in dem Anweisungen zur Ausführung durch die Verarbeitungsschaltung zum Ausführen eines Verfahrens zum Ausführen der erfindunggemäßen Schritte gespeichert sind.
  • Bei der Betrachtung unter einem weiteren Aspekt wird durch die vorliegende Erfindung ein Computerprogramm bereitgestellt, das auf einem computerlesbaren Medium gespeichert ist und in den internen Speicher eines digitalen Computers geladen werden kann und Software-Codeabschnitte zum Ausführen der erfindungsgemäßen Schritte bei der Ausführung des Programms auf einem Computer aufweist.
  • Bei der Betrachtung unter einem weiteren Aspekt wird durch die vorliegende Erfindung ein Computerprogrammprodukt bereitgestellt, das ein computerlesbares Speichermedium mit darauf realisierten Programmanweisungen aufweist, wobei die Programmanweisungen durch einen Computerprozessor zum Veranlassen des Computerprozessors zum Ausführen eines Verfahrens zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene ausführbar sind, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen binären Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache) des Computerprogramms, wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; und Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung des Computerprogramms, wobei das Erstellen des zweiten ausführbaren Codes aufweist: Erstellen eines zweiten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene anhand der IL-Darstellung des Konstrukts hoher Ebene; Aufnehmen des zweiten Satzes von Maschinenanweisungen in den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, und Aufnehmen des ersten Satzes von Maschinenanweisungen in den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens nicht übereinstimmen.
  • Bei der Betrachtung unter einem weiteren Aspekt wird durch die vorliegende Erfindung ein computerimplementiertes Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene bereitgestellt, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen binären Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache), wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung, wobei der zweite ausführbare Code einen zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene aufweist; und entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen: Erstellen eines dritten ausführbaren Codes, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und eine zusätzliche Funktion umfasst, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass die Eingabe aus einem vorgegebenen Satz von Eingaben stammt, die Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  • Bei der Betrachtung unter einem weiteren Aspekt wird durch die vorliegende Erfindung ein System bereitgestellt, das aufweist: einen Speicher und einen Prozessor, der mit dem Speicher gekoppelt ist, wobei der Prozessor darauf ausgelegt ist, ein Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene auszuführen, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache), wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung, wobei der zweite ausführbare Code einen zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene umfasst; und entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen: Erstellen eines dritten ausführbaren Codes, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und eine zusätzliche Funktion umfassst, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass die Eingabe aus einem vorgegebenen Satz von Eingaben stammt, die Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  • Gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung weist ein computerimplementiertes Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene das Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler auf. Das Computerprogramm weist ein Konstrukt hoher Ebene auf, und das Kompilieren weist das Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und das Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code auf. Das Verfahren weist ferner das Optimieren des ersten ausführbaren Codes durch einen binären Optimierer auf. Das Optimieren weist das Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache) des Computerprogramms auf. Die IL-Darstellung umfasst einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen. Das Optimieren weist ferner das Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung des Computerprogramms auf, wobei das Erstellen des zweiten ausführbaren Codes das Erstellen eines zweiten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene anhand der IL-Darstellung des Konstrukts hoher Ebene aufweist. Entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, wird der zweite Satz von Maschinenanweisungen in den zweiten ausführbaren Code aufgenommen. Alternativ wird entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens nicht übereinstimmen, der erste Satz von Maschinenanweisungen in den zweiten ausführbaren Code aufgenommen.
  • Bei einem oder mehreren Beispielen basiert die Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, auf einem Erfüllbarkeitslöser. Das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, weist das Erstellen eines Prüfvektors auf, der mehrere Überprüfungen aufweist, das Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind. Das Bestimmen weist ferner ein Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor auf, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
  • Das Ausführen einer Überprüfung in dem Prüfvektor weist das Erstellen einer ersten Wrapper-Funktion für den ersten Satz von Maschinenanweisungen und das Ausführen der ersten Wrapper-Funktion mit der auszuführenden Überprüfung entsprechenden Eingaben und das Erfassen eines ersten Satzes von Ausgaben auf. Ferner weist das Ausführen der Überprüfung das Erstellen einer zweiten Wrapper-Funktion für den zweiten Satz von Maschinenanweisungen und das Ausführen der zweiten Wrapper-Funktion mit den der auszuführenden Überprüfung entsprechenden Eingaben auf. Das Ausführen der Überprüfung weist ferner das Erfassen eines zweiten Satzes von Ausgaben auf. Bei einem oder mehreren Beispielen ist die erste Wrapper-Funktion in eine erste Ausnahmeroutine eingeschlossen, und die zweite Wrapper-Funktion ist in eine zweite Ausnahmeroutine eingeschlossen. Bei einem oder mehreren Beispielen wird die Übereinstimmung des Verhaltens anhand einer ersten Ausgabe einer Überprüfung, die eine Ausnahme bei dem ersten Satz von Maschinenanweisungen ist, und eine zweite Ausgabe dieser Überprüfung bestimmt, die diese Ausnahme bei dem zweiten Satz von Maschinenanweisungen ist.
  • Bei einem oder mehreren Beispielen weist das Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene das Speichern von Eingaben in die Überprüfung auf, die dem Konstrukt hoher Ebene entsprechen.
  • Bei einem oder mehreren Beispielen weisen die Kompilierzeitinformationen eine Kennung des Konstrukts hoher Ebene, einen Speicherplatz (Speicherplätze) des ersten Satzes von Maschinenanweisungen, einen Speicherplatz (Speicherplätze) der Eingaben und Ausgaben zu dem ersten Satz von Maschinenanweisungen auf.
  • Bei einem oder mehreren Beispielen ist der erste Compiler eine erste Variante eines Compilers, und eine zweite Variante dieses Compilers mit anderen Einstellungen als denen des ersten Compilers wird zum Erstellen des zweiten ausführbaren Codes verwendet.
  • Gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung weist ein Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene das Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler auf, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält. Das Kompilieren weist das Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und das Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code auf. Das Verfahren weist ferner das Optimieren des ersten ausführbaren Codes durch einen Optimierer auf. Das Optimieren weist das Konvertieren des ersten ausführbaren Codes in eine IL-Darstellung des Programms auf, die Konvertierung weist das Konvertieren des Konstrukts hoher Ebene in eine IL-Darstellung desselben basierend auf den Kompilierzeitinformationen auf. Das Optimieren weist das Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung des Programms auf, wobei der zweite ausführbare Code einen auf seiner IL-Darstellung basierenden zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene aufweist. Das Optimieren weist ferner entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen, ein Erstellen eines dritten ausführbaren Codes auf, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und einen zusätzliche Funktion aufweist, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass Eingabe aus einem vorgegebenen Satz von Eingaben stammt, die Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  • Bei einem oder mehreren Beispielen weist das Bestimmen, dass der erste Satz von Anweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, ein Erstellen eines Prüfvektors, der mehrere Überprüfungen aufweist, und ein Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Anweisungen und dem zweiten Satz von Maschinenanweisungen auf, die dem Konstrukt hoher Ebene zugeordnet sind. Die Ausgaben jeder der Überprüfungen in dem Prüfvektor werden verglichen, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Anweisungen bestimmt wird. Ferner weist ein Ausführen einer Überprüfung in dem Prüfvektor das Erstellen einer ersten Wrapper-Funktion für den ersten Satz von Maschinenanweisungen, das Ausführen der ersten Wrapper-Funktion mit der auszuführenden Überprüfung entsprechenden Eingaben und ein Erfassen eines ersten Satzes von Ausgaben auf. Ferner weist das Ausführen der Überprüfung ein Erstellen einer zweiten Wrapper-Funktion für den zweiten Satz von Maschinenanweisungen, das Ausführen der zweiten Wrapper-Funktion mit den der auszuführenden Überprüfung entsprechenden Eingaben und das Erfassen eines zweiten Satzes von Ausgaben auf.
  • Die vorstehend beschriebenen Merkmale können auch zumindest durch ein System, ein Computerprogrammprodukt und eine Maschine bereitgestellt werden.
  • Zusätzliche Merkmale und Vorteile werden durch die erfindungsgemäßen Techniken realisiert. Weitere Ausführungsformen und Aspekte der Erfindung werden hier im Einzelnen beschrieben und als Teil der beanspruchten Erfindung betrachtet. Zum besseren Verständnis der Erfindung einschließlich der Vorteile und Merkmale wird auf die Beschreibung und die Zeichnungen verwiesen.
  • Figurenliste
  • Der Gegenstand, der als die Erfindung betrachtet wird, ist im Besonderen ausgeführt und in den Ansprüchen am Ende der Beschreibung eindeutig beansprucht. Die vorstehenden und weitere Merkmale und Vorteile der Erfindung gehen aus der folgenden genauen Beschreibung in Verbindung mit den beiliegenden Zeichnungen hervor, wobei:
    • 1 eine Cloud-Computing-Umgebung gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt; und
    • 2 Abstraktionsmodellebenen einer Cloud-Computer-Umgebung gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 3 ein Blockdiagramm darstellt, das ein beispielhaftes Computerverarbeitungssystem darstellt, das zum Implementieren einer oder mehrerer Ausführungsformen der vorliegenden Erfindung genutzt werden kann;
    • 4 ein Blockdiagramm eines Optimierungssystems gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt;
    • 5 ein Ablaufdiagramm eines Verfahrens zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene unter Verwendung von Prüfvektoren gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt; und
    • 6 ein Ablaufdiagramm eines Verfahrens zur Bestimmung, welcher ausführbare Code in das zweite ausführbare Programm aufgenommen werden soll, gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung darstellt.
  • Die hier gezeigten Diagramme sind veranschaulichend. Zahlreiche Abänderungen des Diagramms oder der darin beschriebenen Verfahrensschritte sind möglich, ohne dass vom Umfang der Erfindung abgewichen würde. Die Vorgänge können beispielsweise in einer anderen Reihenfolge ausgeführt werden, oder Vorgänge können hinzugefügt, weggelassen oder modifiziert werden. Ebenso beschreiben der Begriff „gekoppelt“ und Varianten desselben das Vorhandensein eines Kommunikationspfads zwischen zwei Elementen und impliziert keine direkte Verbindung zwischen den Elementen ohne dazwischenliegende Elemente/Verbindungen zwischen ihnen. Sämtliche dieser Varianten werden als Teil der Beschreibung betrachtet.
  • In den beiliegenden Figuren und der folgenden genauen Beschreibung der offenbarten Ausführungsformen sind die unterschiedlichen in den Figuren dargestellten Elemente mit zwei- oder dreistelligen Bezugszeichen versehen. Von wenigen Ausnahmen abgesehen, entsprechen die am weitesten links befindliche(n) Stelle(n) jedes Bezugszeichens der Figur, in der das Element erstmals dargestellt ist.
  • GENAUE BESCHREIBUNG
  • Unterschiedliche Ausführungsformen der Erfindung werden hier unter Bezugnahme auf die zugehörigen Zeichnungen beschrieben. Alternative Ausführungsformen der Erfindung können entwickelt werden, ohne das vom Umfang dieser Erfindung abgewichen würde. Verschiedene Verbindungen und Positionsbeziehungen (z.B. über, unter, neben, etc.) zwischen Elementen sind in der folgenden Beschreibung und in den Zeichnungen angegeben. Diese Verbindungen und/oder Positionsbeziehungen können, soweit nichts anderes angegeben ist, direkt oder indirekt sein, und die vorliegende Erfindung soll in dieser Hinsicht nicht einschränkend sein. Dementsprechend kann eine Kopplung von Einheiten entweder eine direkte oder eine indirekte Kopplung bezeichnen, und eine Positionsbeziehung zwischen Einheiten kann eine direkte oder eine indirekte Positionsbeziehung sein. Darüber hinaus können die unterschiedlichen hier beschriebenen Aufgaben und Prozessschritte in eine umfassendere Prozedur oder einen umfassenderen Prozess mit zusätzlichen Schritten oder Funktionalitäten eingebunden sein, die hier nicht im Einzelnen beschrieben sind.
  • Die folgenden Definitionen und Abkürzungen sind auf die Interpretation der Ansprüche und der Beschreibung anzuwenden. Im hier verwendeten Sinne sollen die Begriffe „aufweisen“, „weist auf“, „umfassen“ „umfasst“, „einschließen“, „schließt ein“, „enthalten“ oder „enthält“ oder jede andere Variante dieser ein nicht exklusives Einschließen abdecken. So sind beispielsweise eine Zusammensetzung, ein Gemisch, ein Prozess, ein Verfahren, ein Erzeugnis oder eine Vorrichtung, die eine Liste an Elementen aufweisen, nicht notwendigerweise auf nur diese Elemente beschränkt, sondern können weitere Elemente aufweisen, die nicht ausdrücklich aufgeführt oder einer derartigen Zusammensetzung, einem derartigen Gemisch, einem derartigen Prozess, einem derartigen Verfahren, einem derartigen Erzeugnis oder einer derartigen Vorrichtung inhärent sind.
  • Zudem wird der Begriff „beispielhaft“ hier in der der Bedeutung von „als Beispiel, Einzelfall oder Veranschaulichung dienend“ verwendet. Keine hier als „beispielhaft“ beschriebene Ausführungsform oder Konstruktion ist notwendigerweise als bevorzugt oder gegenüber anderen Ausführungsformen oder Konstruktionen vorteilhaft auszulegen. Die Begriffe „zumindest ein“ und „ein oder mehrere“ sind als jede ganze Zahl einschließend zu verstehen, die größer oder gleich eins ist, d.h. eins, zwei, drei, vier, etc. Der Begriff „mehrere“ ist als jede ganze Zahl einschließend zu verstehen, die größer oder gleich zwei ist, d.h. zwei, drei, vier, fünf, etc. Der Begriff „Verbindung“ kann sowohl eine indirekte „Verbindung“ als auch direkte „Verbindung“ umfassen.
  • Die Begriffe „etwa“, „im Wesentlichen“, „ca.“ und Varianten dieser sollen den entsprechend den zum Zeitpunkt der Einreichung der Anmeldung verfügbaren Arbeitsmitteln mit einer Messung der speziellen Größe einhergehenden Grad an Abweichung einbeziehen. So kann beispielsweise „etwa“ einen Bereich von ±8 % oder 5 % oder 2 % eines angegebenen Wertes einschließen.
  • Der Kürze halber können herkömmliche Techniken, die mit der Herstellung und Nutzung von Aspekten der Erfindung im Zusammenhang stehen, hier im Einzelnen beschrieben sein, müssen dies aber nicht. Insbesondere sind unterschiedliche Aspekte von Computersystemen und spezifischen Computerprogrammen zur Implementierung der unterschiedlichen hier beschriebenen technischen Merkmale allgemein bekannt. Dementsprechend werden der Kürze halber viele herkömmliche Einzelheiten der Implementierung hier nur kurz erwähnt oder vollständig weggelassen, ohne die allgemein bekannten Einzelheiten der Systeme und/oder Prozesse aufzuführen.
  • Eine oder mehrere Ausführungsformen der vorliegenden Erfindung können unter Verwendung von Cloud-Computing implementiert werden. Dessen ungeachtet versteht sich vorab, dass die Implementierung der hier vorgetragenen Lehren, obwohl diese Offenbarung eine genaue Beschreibung zu Cloud-Computing einschließt, nicht auf eine Cloud-Computing-Umgebung beschränkt ist. Vielmehr können Ausführungsformen der vorliegenden Erfindung in Verbindung mit jedem anderen heute bekannten oder künftig entwickelten Typ von Computerumgebung implementiert werden.
  • Cloud-Computing ist ein Modell von Dienstleistung, das einen bequemen, bedarfsgerechten Netzwerkzugriff auf einen geteilten Pool konfigurierbarer Computerressourcen (z.B. Netzwerke, Netzwerkbandbreite, Server, Verarbeitung, Speicherplatz, Speicherkapazität, Anwendungen, virtuelle Maschinen und Dienste) ermöglicht, die mit minimalem Verwaltungsaufwand oder minimaler Interaktion mit einem Anbieter des Diensts schnell bereitgestellt und freigegeben werden können. Dieses Cloud-Modell kann mindestens fünf Produkteigenschaften, mindestens drei Dienstmodelle und mindestens vier Bereitstellungsmodelle aufweisen.
  • Die Produkteigenschaften sind wie folgt:
    • On-Demand Self-Service: Ein Cloud-Nutzer kann ohne die Notwendigkeit einer menschlichen Interaktion mit dem Dienstanbieter einseitig automatisch bedarfsgerecht Computerkapazitäten wie Server-Zeit und Netzspeicher beschaffen.
    • Broad Network Access: Die Kapazitäten sind über ein Netzwerk verfügbar, und es wird über Standardmechanismen auf sie zugegriffen, die die Nutzung durch heterogene Thin- oder Thick-Client-Plattformen (z.B. Mobiltelefone, Laptops und PDAs) unterstützen.
    • Ressourcen-Pooling: Die Computerressourcen des Anbieters werden unter Verwendung eines Multi-Tenant-Modells mit unterschiedlichen, bedarfsgerecht dynamisch zugewiesenen und neu zugewiesenen physischen und virtuellen Ressourcen gebündelt, um einer Vielzahl an Konsumenten zu dienen. Es besteht dahingehend ein Eindruck von Ortsunabhängigkeit, dass der Konsument im Allgemeinen weder Kontrolle über noch Kenntnis von dem genauen Standort der bereitgestellten Ressourcen hat, aber dennoch in der Lage sein kann, einen Standort auf einer höheren Abstraktionsebene (z.B. Land, Bundesstaat oder Datenzentrum) zu spezifizieren.
    • Rapid Elasticity: Die Kapazitäten können für ein schnelles Scale-Out schnell und elastisch, in einigen Fällen automatisch bereitgestellt und für ein schnelles Scale-In schnell freigegeben werden. Dem Konsumenten erscheinen die zur Bereitstellung verfügbaren Kapazitäten häufig unbegrenzt, und sie können jederzeit in jeder Menge erworben werden.
    • Measured Service: Cloud-Systeme steuern und optimieren durch den Einsatz einer Messfunktion auf einer für den Typ von Dienst (z.B. Speichern, Verarbeitung, Bandbreite und aktive Nutzerkonten) geeigneten Abstraktionsebene automatisch die Ressourcennutzung. Die Ressourcenauslastung kann überwacht, gesteuert und gemeldet werden, wodurch sowohl für den Anbieter als auch für den Konsumenten des genutzten Dienstes Transparenz geschaffen wird.
    • Software as a Service (SaaS): Die dem Konsumenten zur Verfügung gestellte Kapazität ist die Nutzung der Anwendungen des Anbieters, die in einer Cloud-Infrastruktur ausgeführt werden. Auf die Anwendungen kann von unterschiedlichen Kundenvorrichtungen über eine Thin-Client-Schnittstelle wie einen Web-Browser zugegriffen werden (z.B. internetbasierte E-Mail). Der Konsument verwaltet oder steuert die zugrundeliegende Cloud-Infrastruktur einschließlich Netzwerk, Server, Betriebssysteme, Speicher oder sogar individuelle Anwendungskapazitäten nicht, mit der möglichen Ausnahme von begrenzten benutzerspezifischen Anwendungskonfigurationseinstellungen.
    • Platform as a Service (PaaS): Die dem Konsumenten zur Verfügung gestellte Kapazität ist die Nutzung von dem Konsumenten erstellter oder erworbener Anwendungen, die unter Verwendung von vom Anbieter unterstützten Programmiersprachen und Dienstprogrammen erstellt wurden, in der Cloud-Infrastruktur. Der Konsument verwaltet oder steuert die zugrundeliegende Cloud-Infrastruktur einschließlich Netzwerke, Server, Betriebssysteme, oder Speicher nicht, hat jedoch die Kontrolle über die genutzten Anwendungen und möglicherweise die Anwendung hostende Umgebungskonfigurationen.
    • Infrastructure as a Service (laaS): Die dem Konsumenten zur Verfügung gestellte Kapazität ist die Bereitstellung von Verarbeitung, Speicher, Netzwerken und weiteren grundlegenden Computerressourcen, wobei der Konsument beliebige Software nutzen und ausführen kann, die Betriebssysteme und Anwendungen einschließen kann. Der Konsument verwaltet oder steuert die zugrundeliegende Cloud-Infrastruktur nicht, hat jedoch die Kontrolle über Betriebssysteme, Speicher, genutzte Anwendungen und möglicherweise eingeschränkte Kontrolle über ausgewähte Netzwerkkomponenten (z.B. Host-Firewalls).
  • Die Bereitstellungsmodelle sind wie folgt:
    • Private Cloud: Die Cloud-Infrastruktur wird ausschließlich für eine Organisation betrieben. Sie kann von der Organisation oder einem Dritten verwaltet werden und sich auf dem eigenen Gelände oder außerhalb desselben befinden.
    • Gemeinschafts-Cloud: Die Cloud-Infrastruktur wird von mehreren Organisationen geteilt und unterstützt eine bestimmte Gemeinschaft mit geteilten Anliegen (z.B. Zielsetzung, Sicherheitserfordernisse, Strategie und Konformitätserwägungen). Sie kann von den Organisationen oder einem Dritten verwaltet werden und sich auf dem eigenen Gelände oder außerhalb desselben befinden.
    • Öffentliche Cloud: Die Cloud-Infrastruktur wird der allgemeinen Öffentlichkeit oder einer großen Branchengruppe zur Verfügung gestellt und befindet sich im Eigentum einer Organisation, die Cloud-Dienste verkauft.
    • Hybrid-Cloud: Die Cloud-Infrastruktur ist eine Zusammenstellung von zwei oder mehr (privaten, Gemeinschafts- oder öffentlichen) Clouds, die eigenständige Einheiten bleiben, aber durch standardisierte oder geschützte Technologie miteinander verbunden sind, die eine Übertragbarkeit von Daten und Anwendungen ermöglicht (z.B. Cloud Bursting zum Lastenausgleich unter Clouds).
  • Eine Cloud-Computing-Umgebung ist dienstorientiert mit einem Schwerpunkt auf Staatenlosigkeit, geringer Kopplung, modularem Aufbau und semantischer Interoperabilität. Im Herzen des Cloud-Computing befindet sich eine Infrastruktur, die ein Netzwerk miteinander verbundener Knoten umfasst.
  • Wird nun auf 1 Bezug genommen, ist eine veranschaulichende Cloud-Computing-Umgebung 50 dargestellt. Wie gezeigt, weist die Cloud-Computing-Umgebung 50 einen oder mehrere Cloud-Computing-Knoten 10 auf, mit denen von Cloud-Nutzern verwendete lokale Computervorrichtungen wie beispielsweise ein Personal Digital Assistant (PDA) oder ein Mobiltelefon 54A, ein Desktop-Computer 54B, ein Laptop-Computer 54C und/oder ein anderes Computersystem oder eine andere Vorrichtung kommunizieren können. Die Knoten 10 können miteinander kommunizieren. Sie können (nicht gezeigt) in einem oder mehreren Netzwerke wie privaten, Gemeinschafts-, öffentlichen oder Hybrid-Clouds, wie vorstehend beschrieben, oder einer Kombination dieser physisch oder virtuell gruppiert sein. Dies ermöglicht der Cloud-Computing-Umgebung 50, Infrastruktur, Plattformen und/oder Software als Dienste anzubieten, für die ein Cloud-Nutzer keine Ressourcen auf einer lokalen Computervorrichtung halten muss. Es versteht sich, dass die in 1 gezeigten Typen von Computervorrichtungen 54A - 54C nur Veranschaulichungszwecken dienen sollen und dass Rechnerknoten 10 und eine Cloud-Computing-Umgebung 50 über jeden Typ von Netzwerk und/oder über ein Netzwerk ansteuerbarer Verbindung (z.B. unter Verwendung eines Web-Browsers) mit jedem Typ von computerisierter Vorrichtung kommunizieren können.
  • Wird nun auf 2 Bezug genommen, ist ein Satz von einer Cloud-Computing-Umgebung 50 bereitgestellter funktionaler Abstraktionsebenen gezeigt. Es versteht sich vorab, dass die in 2 gezeigten Komponenten, Ebenen und Funktionen nur Veranschaulichungszwecken dienen sollen und Ausführungsformen der Erfindung nicht darauf beschränkt sind. Wie dargestellt, sind die folgenden Ebenen und entsprechenden Funktionen vorgesehen: Eine Hardware- und Software-Ebene 60 umfasst Hardware- und Software-Komponenten. Beispiele von Hardware-Komponenten umfassen: Mainframes 61, RISC-architekturbasierte Server (RISC: reduced instruction set computer, Computer mit verringertem Anweisungssatz) 62, Server 63, Blade-Server 64, Speichervorrichtungen 65 und Netzwerke und Netzwerkkomponenten 66. Bei einigen Ausführungsformen umfassen Software-Komponenten Netzwerkanwendungs-Server-Software 67 und Datenbank-Software 68. Eine Viertualisierungsebene 70 bildet eine Abstraktionsebene, zu der die folgenden Beispiele virtueller Einheiten genannt werden können: virtuelle Server 71, virtuelle Speicher 72, virtuelle Netzwerke 73, darunter virtuelle private Netzwerke, virtuelle Anwendungen und Betriebssysteme 74 und virtuelle Clients 75.
  • Bei einem Beispiel kann eine Verwaltungsebene 80 die nachstehend beschriebenen Funktionen beisteuern. Eine Resourcenbereitstellung 81 bietet eine dynamische Vergabe von Computerressourcen und anderen Ressourcen, die zum Ausführen von Aufgaben innerhalb der Cloud-Computing-Umgebung genutzt werden. Messung und Bepreisung 82 bietet eine Kostennachverfolgung bei der Nutzung von Ressourcen innerhalb der Cloud-Computing-Umgebung und eine Abrechnung oder Rechnungsstellung für den Verbrauch dieser Ressourcen. Bei einem Beispiel können diese Ressourcen Anwendungs-Software-Lizenzen einschließen. Die Sicherheit bietet eine Identitätsverifizierung für Cloud-Nutzer und -Aufgabenstellungen sowie Schutz für Daten und andere Ressourcen. Ein Benutzerportal 83 gewährt Konsumenten und Systemadministratoren Zugriff auf die Cloud-Computing-Umgebung. Eine Verwaltung auf Dienstebene 84 sorgt für eine derartige Cloud-Computing-Ressourcen-Zuweisung und -Verwaltung, dass erforderliche Dienstqualitäten eingehalten werden. SLA-Planung und Erfüllung (SLA: service level agreement, Dienstqualitätsvereinbarung) 85 sorgt für die vorherige Ausgestaltung und Bereitstellung von Cloud-Computerressourcen, an denen gemäß einem SLA ein künftiger Bedarf vorauszusehen ist.
  • Die Arbeitslastebene 90 bietet Beispiele einer Funktionalität, für die die Cloud-Computing-Umgebung genutzt werden kann. Beispiele von Arbeitslasten und Funktionen, die von dieser Ebene zur Verfügung gestellt werden können, umfassen: Zuordnung und Navigation 91, Software-Entwicklung und Lebenszyklusverwaltung 92, Bereitstellung von Bildung in Form virtueller Klassenzimmer 93, Datenanalyseverarbeitung 94, Transaktionsverarbeitung 95 und eine Lernmodellverarbeitung 96 zum Ausführen eines Kompilierens von Anweisungen in einer höheren Programmiersprache.
  • Wird auf 3 Bezug genommen, ist dort eine Ausführungsform of eines gemeinhin als Computersystem 100 bezeichneten Datenverarbeitungssystems gezeigt, das zur Implementierung der vorliegenden Lehren über ein Kommunikationsnetzwerk mit einem oder mehreren Knoten 10 der Cloud-Computing-Umgebung 50 kommuniziert. Das Computersystem 100 weist eine oder mehrere Zentraleinheiten (Prozessoren) 121 a, 121 b, 121c, etc. auf (die kollektiv oder gattungsmäßig als Prozessor(en) 121 bezeichnet werden). Bei einer oder mehreren Ausführungsformen kann jeder Prozessor 121 einen RISC-Mikroprocessor (RISC: reduced instruction set computer, Computer mit verringertem Anweisungssatz) umfassen. Die Prozessoren 121 sind über einen Systembus 133 mit einem Systemspeicher (einem RAM) 134 und verschiedenen weiteren Komponenten gekoppelt. Ein Festspeicher (ROM, read only memory) 122 ist mit dem Systembus 133 gekoppelt und kann ein Basis-Eingabe-/Ausgabe-System (BIOS: basic input/output system) aufweisen, das bestimmte grundlegende Funktionen des Computersystems 100 steuert.
  • 3 stellt ferner einen Eingabe/Ausgabe-Adapter (E-/A-Adapter) 127 und einen Netzadapter 126 dar, die mit dem Systembus 133 gekoppelt sind. Der E-/A-Adapter 127 kann ein kleiner Computersystem-Schnittstellenadapter (SCSI-Adapter) sein, der mit einer Festplatte 123 und/oder einem Bandspeicherlaufwerk 125 oder einer anderen, ähnlichen Komponente kommuniziert. Der E-/A-Adapter 127, die Festplatte 123 und die Bandspeichervorrichtung 125 werden hier kollektiv als Massenspeicher 124 bezeichnet.
  • Das Betriebssystem 140 zur Ausführung auf dem Verarbeitungssystem 100 kann in dem Massenspeicher 124 gespeichert sein. Das Betriebssystem 140 kann jedoch auch in RAM 134 des Computersystems 100 gespeichert sein. Betriebssysteme gemäß Ausführungsformen der vorliegenden Erfindung umfassen beispielsweise UNIX™, Linux™, Microsoft XP™, AIX™ und IBMs i5/OS™.
  • Ein Netzadapter 126 verbindet den Bus 133 mit einem externen Netzwerk 136, das dem Computersystem 100 das Kommunizieren mit weiteren derarigen Systemen ermöglicht. Ein Bildschirm (z.B. ein Anzeigemonitor) 135 ist über einen Bildschirmadapter 132, der einen Grafikadapter zur Verbesserung der Leistung von grafikintensiven Anwendungen und einen Video-Controller umfassen kann, an den Systembus 133 angeschlossen. Bei einer Ausführungsform können die Adapter 127, 126 und 132 an einen oder mehrere E-/A-Busse angeschlossen sein, die über eine (nicht gezeigte) Zwischenbusbrücke mit dem Systembus 133 verbunden sind. Geeignete E-/A-Busse zum Anschließen von Peripheriegeräten wie Festplattencontrollern, Netzadaptern und Grafikadaptern umfassen typischerweise gemeinsame Protokolle wie Peripheral Component Interconnect (PCI). Zusätzliche Eingabe-/Ausgabe-Vorrichtungen sind als über einen Benutzerschnittstellenadapter 128 und einen Bildschirmadapter 132 mit dem Systembus 133 verbunden dargestellt. Eine Tastatur 129, eine Maus 130 und ein Lautsprecher 131 sind jeweils über den Benutzerschnittstellenadapter 128, der beispielsweise einen Super-E-/A-Chip umfassen kann, der mehrere Vorrichtungsadapter in einer einzigen integrierten Schaltung integriert, mit dem Bus 133 verbunden.
  • Bei beispielhaften Ausführungsformen weist das Computersystem 100 eine Grafikverarbeitungseinheit 141 auf. Die Grafikverarbeitungseinheit 141 ist eine spezialisierte elektronische Schaltung, die auf die Manipulation und Anpassung von Speicher zur Beschleunigung der Erzeugung von Bildern in einem für die Ausgabe an eine Anzeige vorgesehenen Bildpuffer ausgelegt ist. Im Allgemeinen ist die Grafikverarbeitungseinheit 141 sehr effizient bei der Manipulation der Computergrafik- und Bildverarbeitung und weist eine hoch parallele Struktur auf, die sie bei Algorithmen, bei denen die Verarbeitung großer Blöcke von Daten parallel erfolgt, effektiver als Allzweck-CPUs macht.
  • Somit weist das Computersystem 100 in der Konfiguration gemäß 3 Verarbeitungskapazität in Form von Prozessoren 121, Speicherkapazität, die ein RAM 134 und einen Massenspeicher 124 aufweist, Eingabeeinrichtungen wie die Tastatur 129 und die Maus 130 und Ausgabekapazität auf, die einen Lautsprecher 131 und einen Bildschirm 135 aufweist. Bei einer Ausführungsform ist das Betriebssystem zur Koordination der Funktionen der unterschiedlichen in 3 gezeigten Komponenten kollektiv in einem Teil des RAM 134 und des Massenspeichers 124 gespeichert.
  • Wie hier beschrieben, wird bei statisch kompilierten Programmen ein Computerprogramm kompiliert, bevor der resultierende ausführbare Code ausgeführt wird. Bei statisch kompilierten Sprachen ist ein technisches Problem, dass ein Compiler-Programm zum Zeitpunkt des Kompilierens des Computerprogramms nicht über die Informationen verfügt, die nur während einer Laufzeit (d.h. beim Ausführen des Computerprogramms) erfasst werden können und die erhebliche Auswirkungen auf die Effizienz des Computerprogramms haben können. Ein zusätzliches technisches Problem ist, dass dem Compiler-Programm das spezielle Datenverarbeitungssystem nicht bekannt sein kann, auf dem der resultierende ausführbare Code ausgeführt wird, und dass es daher den ausführbaren Code nicht an die Hardware-Eigenschaften des Datenverarbeitungssystems anpassen kann, auf dem er ausgeführt wird. Um derartigen technischen Problemen zu begegnen und den ausführbaren Code effizient zu gestalten, wird das Computerprogramm bei einer Veränderung des Datenverarbeitungssystems, dass zum Ausführen des ausführbaren Codes verwendet werden soll, mit einem Recompiler neu kompiliert.
  • Ein technisches Problem bei diesem Ansatz ist, dass sich der zum erneuten Kompilieren des Computerprogramms verwendete Compiler ebenfalls verändert haben kann, um von Hardware und anderen Veränderungen an dem nun verwendeten Datenverarbeitungssystem zu profitieren. Ferner kann die verwendete Programmiersprache wie die Sprache COBOL Fälle undefinierten Verhaltens aufzeigen. So können beispielsweise insbesondere bei einer Sprache wie COBOL in einer Version eines Compilern verwendete Datentypen fehlerhafte Daten aufzeigen, die der Spezifikation der gleichen Datentypen in einer anderen Version nicht entsprechen. Ferner ist das Problem, dass erkennbare Probleme aufgrund dieser fehlerhaften Daten aufgrund der speziellen Auswahlmöglichkeiten der älteren Compilerversionen bei der Erstellung des maschinennahen Codes unabsichtlich verdeckt/verschleiert werden können. Wenn eine neue Compilerversion einen Code erstellt, der davon ausgeht, dass der Spezifikation gefolgt wird, kommen diese Probleme aufgrund der fehlerhaften Daten an die Oberfläche.
  • Es ist darauf hinzuweisen, dass dies bei Sprachen kein Problem darstellen muss, bei denen binäre Werte verwendet werden, so das jedes Bitmuster einem Wert entspricht. So schließen beispielsweise übliche Datentypen, die in COBOL verwendet werden, die Typen „packed decimal“ und „zoned decimal“ ein. Diese BCD-Typen (BCD: binary coded decimal, binär codierte Dezimalzahl) zeigen ein Spektrum ungültiger Codierungen auf. Das spezifische Programmverhalten bei einer ungültigen Codierung ist durch die Sprache nicht explizit festgelegt und ein Produkt der spezifischen ungültigen Codierung und der genauen Sequenz von Maschinenanweisungen, die von dem Compiler erzeugt werden, der an diesen ungültigen Daten arbeitet. In der vorliegenden Beschreibung werden die Ausführungsformen der vorliegenden Erfindung bezogen auf die Sprache COBOL beschrieben, die Ausführungsformen der vorliegenden Erfindung sind jedoch auch auf andere Programmiersprachen anwendbar.
  • Im Falle von COBOL ist aufgrund eines derartigen undefinierten Verhaltens von Datentypen das erneute Kompilieren eines Programms mit einem neueren Compiler riskanter als bei den meisten Sprachen. Das Ergebnis eines undefinierten Verhaltens ist nicht vorhersehbar und kann von Compiler zu Compiler oder unter Compileroptimierungniveaus bei dem gleichen Compiler unterschiedlich sein. Das Neukompilieren eines Programms, das ein undefiniertes Verhalten enthält, kann einen ausführbaren Code ergeben, der zu einer anderen Ausführung als der alte ausführbare Code führt, der von einem älteren Compiler (oder sogar dem selben Compiler, aber bei der Ausführung in einer anderen Umgebung oder bei der Nutzung anderer Compiler-Optionen wie dem Compileroptimierungsniveau oder einer anderen Compileroption) erstellt wurde. Als typische Beispiele möglicher fehlerhafter Daten in Sprachen wie COBOL stelle man sich einen Quellencode vor, in dem die höheren vier Bits jedes Byte in Zoned-Decimal-Datenelementen nicht ordnungsgemäß initialisiert sind. Entsprechend der Sprachspezifikation sollten diese vier Bits 0xF sein, und bei signierten Elementen sollten die vier Bits in dem am wenigsten signifikanten Byte ein gültiger Zeichencode 0xA → 0xF sein. Eine weitere Möglichkeit schließt die unkorrekte Einstellung des Zeichencodes in Packed- oder Zoned-Decimal-Datenelementen ein. Ein weiteres potentielles Problem ergibt sich daraus, dass die komplementären Datenelemente der binären Zwei in COBOL mit einer festgelegten Anzahl an Dezimalstellen angegeben werden. Daher ist es möglich, ein binäres Element durch die Aufnahme von mehr binären Bits als tatsächlich durch die angegebene Anzahl an Dezimalstellen dargestellt werden können absichtlich oder versehentlich ,überzubevölkern‘. Ein weiteres Beispiel ist, die oberen vier Bits des signifikantesten Byte in einem geraden Packed-Decimal-Datenelement nicht zu löschen (oder unbeabsichtigt einzustellen). Bei präzisen geraden Packed-Decimal-Elementen muss nur die Hälfte des signifikantesten Byte all ihre Stellen darstellen, und daher sollten die oberen vier Bits dieses Byte gemäß der Sprachspezifikation auf null gesetzt sein. Zahlreiche weitere Beispiele sind möglich.
  • Um derartigen technischen Problemen zu begegnen, wird ein hier als binärer Optimierer bezeichnetes Binär-zu-Binär-Optimierungsprogramm verwendet, das auch als Binärkonverter bezeichnet werden kann. Der binäre Optimierer konvertiert alte binäre Module in dem kompilierten ausführbaren Code (einschließlich alter Versionen/älterer Optimierungsniveaus) in eine andere Form und optimiert die binären Module in dieser Form unter Verwendung von unterschiedlicher (z.B. neuerer) Compiler-Technologie. Es ist darauf hinzuweisen, dass „Konvertieren“ in diesem Fall nicht bedeutet, den Binärcode in den Quellencode zurückzuversetzen. Vielmehr dekonstruiert und analysiert ein Binärkonverter oder binärer Optimierer den ursprüglichen Binärcode (von einer älteren Versionen und/oder nidrigeren Optimierungsniveaus), um ihn in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache) des Programms zu konvertieren, somit, um ihn unter Verwendung neuer Optimierungs- und Kompilierrungstechnologie zu optimieren und dann neue binäre Module zu erstellen. Da der binäre Optimierer den kompilierten ausführbaren Binärcode als Eingabe verwendet, wird angenommen, dass die optimierte Version selbst in Fällen eines undefinierten Verhaltens das gleiche Verhalten aufzeigt. Dieser Ansatz ist jedoch auf ältere Versionen von Compilern beschränkt. Neuere Versionen des Compilers verwenden aggressivere Optimierungen, wodurch das Anlysieren des Binärcodes äußerst schwierig wird.
  • So könnte beispielsweise die Erstellung spezialisierter Inline-Ersetzungen von Konstrukten hoher Ebene erwogen werden. Ein „Konstrukt auf hoher Ebene“ bzw. „Konstrukt hoher Ebene“ ist ein Befehl oder eine Anweisung in einer Sprache auf hoher Ebene oder in einer Maschinensprache wie dem IBMⓇ z/Architecture®-Anweisungssatz, die komplex genug sind, dass ihre ausführbare Darstellung eine komplexe Codesequenz mehrerer Maschinenanweisungen auf unterer Ebene wäre. Beispiele von Konstrukten hoher Ebene sind: INSPECT in der Sprache COBOL und ED, EDMK in dem IBM z/Architecture-Anweisungssatz. In mehreren Fällen erstellen neuere Versionen eines COBOL-Compilers anstelle einer allgemeineren, jedoch weniger effizienten Verarbeitung mit einem Laufzeitbibliothekenaufruf oder einer langsameren Anweisungssequenz spezialisierte Codesequenzen zur Darstellung von Konstrukten hoher Ebene. So kann beispielsweise in COBOL der Befehl „INSPECT“ Strings suchen und umwandeln. In früheren Versionen von COBOL wurden nicht triviale INSPECT-Befehle normalerweise durch Aufrufen einer COBOL-Laufzeitroutine ausgeführt. In neueren Versionen werden inline schnellere Implementierungen in dem ausführbaren Binärcode selbst erstellt. Anders als die Laufzeitroutine, die jede mögliche Version von INSPECT verarbeiten musste, können die Inline-Kopien auf die spezifische Version spezialisiert sein, die auszuführen ist. Ähnlich können Umwandlungen aus numerisch editierten in numerische Datentypen mit spezialisierten Codesequenzen schneller als mit den allgemeinen Hardware-Anweisungen ED und EDMK ausgeführt werden, die früher verwendet wurden. Die Anweisungen ED und EDMK erhalten ein Muster als Eingabe und müssen jedes mögliche Muster verarbeiten. Es geht schneller, eine Sequenz zu erstellen, die auf das spezifische Muster spezialisiert ist, das in dem ausführbaren Code verwendet wird. IBM und z/Architecture sind weltweit unter zahlreichen Gerichtsbarkeiten eingetragene Warenzeichen der International Business Machines Corporation.
  • Beim Kompilieren mit neueren, effizienteren Compilern werden derartige den Konstrukten hoher Ebene entsprechende Operationen typischerweise auf einer hoher Ebene dargestellt, wobei das Programm compileroptimiert wird, und nur bei der Codeerstellung in eine maschinennahe spezialisierte Sequenz umgewandelt. Dies ermöglicht Compileroptimierungen die Nutzung von Informationen zur Semantik des Konstrukts hoher Ebene.
  • Die für diese Konstrukte hoher Ebene erstellten Codesequenzen können abhängig von den Einzelheiten des Konstrukts hoher Ebene erhebliche Unterschiede aufweisen. Die Ermittlung des Anwendungsbereichs und Zwecks einer derartigen Codesequenz allein anhand des kompilierten Binärformats ist ein untragbar schwieriges technisches Problem. Die Kapazität binärer Optimierer gemäß dem Stand der Technik, eine entsprechende IL-Darstellung wiederherzustellen, ist begrenzt. Derartige binäre Optimierer können einen Code konvertieren, der durch eine ältere Version eines Compilers kompiliert wurde, bei dem der erste ausführbare Code leicht in eine IL-Darstellung konvertiert werden kann und bei dem der Compiler nicht nicht aktiv weiterentwickelt wird. In derartigen Fällen kann der binäre Optimierer das Konstrukt hoher Ebene optimieren, da die IL-Darstellung des Konstrukts hoher Ebene leicht zu bestimmen ist und keinen Veränderungen unterliegt. Dies gilt jedoch nicht für Compiler, die sich in der Entwicklung befinden und somit neue Compileroptimierungstechnologie nutzen. Dies kann (selbst bei bestehenden Konstrukten hoher Ebene wie INSPECT oder bei einem numerischen Editieren) zur Erstellung von mehr oder unterschiedlichen Typen dieser Sequenzen führen.
  • Eine oder mehrere Ausführungsformen der vorliegenden Erfindung begegnen derartigen technischen Problemen und erleichtern die Optimierung eines durch neuere Versionen des Compilers kompilierten Codes durch einen binären Optimierer gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung. Dies ermöglicht diesem binären Optimierer die Erstellung neuer, effizienterer Codesequenzen. Dies erfolgt ohne die Notwendigkeit von Veränderungen an dem binären Optimierer bei jeder Modifikation des Compilers zur Erstellung einer neuartigen Codesequenz und erleichtert die Beibehaltung des bisherigen Verhaltens des binären Optimierers.
  • 4 stellt ein Blockdiagramm eines Optimierungssystems gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung dar. Im hier verwendeten Sinne umfasst das „Kompilieren eines Computerprogramms“ das Erstellen eines ausführbaren Binärcodes, d.h. von Maschinenanweisungen, die von einem Prozessor ausgeführt werden können, anhand eines Computerprogramms in einer Quellensprache. Ebenso bezeichnet im hier verwendeten Sinne das „Optimieren eines ausführbaren Codes“ das Optimieren eines Computerprogramms aus dem ausführbaren Binärcode durch Erstellen eines neuen ausführbaren Binärcodes, das das Konvertieren des ersten ausführbaren Binärcodes in eine IL-Darstellung umfasst. Es ist darauf hinzuweisen, dass eine IL im hier verwendeten Sinne jede Sprache sein kann, in der das Programm dargestellt werden kann. So kann eine IL beispielsweise eine interne Sprache sein, sie könnte die Quellensprache des Computerprogramms sein, sie könnte die Quellensprache mit internen Angaben sein, sie könnte eine andere binäre Sprache oder jeder andere Typ von Darstellung sein. All dies sind Beispiele einer Zwischenstufe zwischen dem ersten ausführbaren Code und dem zweiten ausführbaren Code, wobei der zweite ausführbare Code eine Optimierung des ersten ausführbaren Codes darstellt.
  • In dem dargestellten Szenario wird ein Computerprogramm 410 zur Erstellung eines ersten ausführbaren Binärcodes 430 durch einen Compiler 420 kompiliert. Das Computerprogramm 410 kann eines oder mehrere Konstrukte hoher Ebene 412 enthalten. Es versteht sich, dass das Programm 410, obwohl nur ein Konstrukt 412 dargestellt ist, ein oder mehrere Konstrukte 412 enthalten kann.
  • Ein binärer Optimierer 440 wird verwendet, wenn der Code beispielsweise für neue Hardware optimiert werden soll. Der binäre Optimierer 440 kann eine Umwandlung des ausführbaren Codes 430 und weiterhin eine Optimierung und endgültige Codeerstellung zur Erstellung eines zweiten ausführbaren Codes 470 ausführen. Es ist darauf hinzuweisen, dass der binäre Optimierer 440 bei einem oder mehreren Beispielen für andere Möglichkeiten wie die Erstellung eine IL-Darstellung (oder sogar einer Quellendarstellung) des ersten ausführbaren Codes 430 verwendet werden kann, wobei die Darstellung zur endgültigen Codeerstellung (oder für zusätzliche Optimierungen auf niedrigerer Ebene) an einen (nicht gezeigten) zweiten Compiler weitergegeben wird. So ist beispielsweise der zweite Compiler ein neuerer Compiler als der Compiler 420. Alternativ ist der zweite Compiler eine Variante des Compilers 420, der andere Einstellungen wie das verwendete Optimierungsniveau verwendet.
  • Der binäre Optimierer 440 empfängt den ersten ausführbaren Code 430 als Eingabe und wandelt den ausführbaren Code 430 zur Ausgabe einer IL-Darstellung 450 des Computerprogramms um. Der binäre Optimierer 440 optimiert dann zur Erstellung eines zweiten ausführbaren Binärcodes 470 die IL-Darstellung 450 des Computerprogramms. Dies bedeutet, dass der Compiler 420 den ersten ausführbaren Code 430 erzeugt, der zusätzliche Kompilierzeitinformationen enthalten kann, die weiter beschrieben werden, und der binäre Optimierer 440 den ersten ausführbaren Code 430 und die Kompilierzeitinformationen gebraucht. Sämtliche von dem Compiler 420 gespeicherten Kompilierzeitinformationen dienen dem Zweck der Optimierung der Erstellung des optimierten zweiten ausführbaren Codes 470.
  • Wie bereits beschrieben, ist die Analyse des ersten ausführbaren Binärcodes 430 mit unterschiedlichen Versionen des Compilers 420, insbesondere neuerer Compiler-Technologie, aufgrund von Laufzeitdirektiven, die eine derartige Analyse zu einem beweglichen Ziel machen können, eine technische Herausforderung. Gegenwärtige binäre Optimierer gemäß dem Stand der Technik können den ausführbaren Binärcode 430 nicht in eine IL-Darstellung 450 konvertieren und können infolgedessen das Konstrukt 412 hoher Ebene nicht aus seiner ausführbaren Darstellung konvertieren, die der Compiler 420 typischerweise erstellt.
  • Zur Lösung dieses technischen Problems und zum Ermöglichen der Verwendung des binären Optimierers 440 an mit derartigen (z.B. neueren) Compilern kompilierten Programmen erleichtern eine oder mehrere Ausführungsformen der vorliegenden Erfindung, wie bereits erwähnt, die Aufnahme zusätzlicher Kompilierzeitinformationen in den kompilierten ausführbaren Binärcode 430. Diese zusätzlichen Informationen können zum Kommunizieren von Informationen zur Bedeutung des Programms 410 verwendet werden.
  • Bei einer oder mehreren Ausführungsformen der vorliegenden Erfindung nimmt der Compiler 420 Kompilierzeitinformationen zu jedem Konstrukt 412 hoher Ebene in dem Programm 410 in den ersten ausführbaren Code 430 auf, um dem binären Optimierer 440 das Konvertieren dieses Konstrukts 412 in eine IL-Darstellung desselben, die in die IL-Darstellung 450 des Programms aufgenommen wird, das Optimieren der IL-Darstellung des Konstrukts hoher Ebene und die Erstellung einer neuen Anweisungssequenz zu dem Konstrukt hoher Ebene zur potentiellen Aufnahme in den zweiten ausführbaren Code 470 zu ermöglichen.
  • Aufgrund der Optimierung ist es möglich, dass die neu optimierten Anweisungen bei einigen Eingaben nicht das gleiche Verhalten wie die alten Anweisungen aufzeigen. Um dem zu begegnen, verwenden eine oder mehrere Ausführungsformen der vorliegenden Erfindung Prüfvektoren: einen Satz automatisch erstellter Eingaben zum Vergleichen des Verhaltens der neuen und der alten Anweisungssequenz, die zu dem Konstrukt hoher Ebene erstellt werden. Wenn die zwei Sequenzen bei jeder Eingabe in den Prüfvektor die gleiche Ausgabe ergeben, wird angenommen, dass es sicher ist, die neuen Anweisungen zu dem Konstrukt hoher Ebene in den zweiten ausführbaren Code 470 aufzunehmen. Da ferner das Verhalten der neuen Anweisungssequenz bei der Optimierung mit dem der alten Sequenz verglichen wird, erhält der optimierte Code (470) in Bezug auf das Konstrukt hoher Ebene Fehler-für-Fehler-Kompatibilität.
  • 5 stellt ein Ablaufdiagramm eines Verfahrens zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene unter Verwendung von Prüfvektoren gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung dar. Das Verfahren umfasst in 510 das Kompilieren des Programms 410 unter Verwendung des Compilers 420. Die Kompilierrung schließt in 512 die Ausgabe von Kompilierzeitinformationen zu jeder Inline-Ersetzung eines Konstrukts 412 hoher Ebene in dem Programm 410 ein. Die Informationen umfassen eine Identifikation des ersetzten Konstrukts 412 hoher Ebene. Beispielsweise, „Editieren-und-markieren“ oder „Auf Übereinstimmung überprüfen“. Die Informationen weisen ferner einen Speicherplatz (Speicherplätze) des bei der Inline-Ersetzung in dem ersten ausführbaren Code 430 erstellten Satzes von Anweisungen auf. Aufgrund von Optimierungen wie einer Anweisungsplanung, die von dem Compiler 420 ausgeführt werden, können diese Anweisungen keinen zusammenhängenden Bereich bilden.
  • Die Kompilierzeitinformationen weisen ferner für jede Eingabe in das Konstrukt 412 hoher Ebene Informationen darüber auf, wo die Eingabe zu finden ist. So könnte sich beispielsweise ein in eine Editier-und-Markier-Operation eingegebener Wert in einem Register oder in einem Speicher befinden. Die Informationen weisen ferner für jede Ausgabe des Konstrukts hoher Ebene Informationen darüber auf, wo die Ausgabe platziert wird, beispielsweise in Registern oder in einem Speicher. Der Speicher und/oder das Register, aus dem die Eingabe/Ausgabe gelesen wird / in den bzw. das sie geschrieben wird, werden jeweils unter Verwendung einer Speicheradresse oder einer Registeradresse identifiziert. Die Informationen werden in dem ausführbaren Binärcode 430 gespeichert.
  • Der erste ausführbare Code 430 wird unter Verwendung des Compilers 420 erstellt und kann zur Ausführung verwendet werden, bis in 520 entschieden wird, dass der Code unter Verwendung des binären Optimierers 440 optimiert werden soll. So wird beispielsweise entschieden, dass der Code optimiert werden soll, sobald ein neuerer binärer Optimierer oder neuere Hardware verfügbar ist, obwohl die Optimierung aus verschiedenen anderen Gründen ausgeführt werden kann. Der binäre Optimierer 440 konvertiert den ersten ausführbaren Code 430 in 530 in eine IL-Darstellung 450 des Programms. Bei der Konvertierung unter Verwendung der ausgegebenen Kompilierzeitinformationen, die in dem ausführbaren Binärcode 430 gespeichert sind, erstellt der binäre Optimierer 440 in 532 das Konstrukt 412 hoher Ebene in einer IL-Darstellung desselben.
  • Die Maschinenanweisungen, die zu dem Konstrukt 412 hoher Ebene erstellt wurden, werden in der IL-Darstellung 450 nicht explizit dargestellt. Das Standardverhalten des binären Optimierers 440 ist typischerweise, jede ursprünglich eingegebene Maschinenanweisung zu ihrer Optimierung als entsprechende Struktur in der IL-Darstellung 450 darzustellen. Bei den Konstrukten höherer Ebene (wie Inspect und Numeric Editing), die hier besprochen werden, ist diese Art des Erstellens der IL-Darstellung 450 des Konstrukts hoher Ebene jedoch zu verindern. Eine derartige Darstellung kann es für den binären Optimierer 440 sehr schwierig oder unmöglich machen, die gesamte Operation höherer Ebene zu bestimmen, die über eine Reihe dieser eingegebenen Anweisungen ausgeführt wird. Wenn Informationen zu derartigen Operationen höherer Ebene über eine Folge eingegebener Anweisungen in dem Binärcode 430 vorhanden sind, wählt der binäre Optimierer 440 daher eine ähnliche IL-Darstellung hoher Ebene zum Einkapseln der ausgeführten Operation höherer Ebene.
  • Ferner wird der binäre Optimierer 440 zur Optimierung des Programms 410 in 540 zur Erstellung neuer optimierter Anweisungen zu dem Konstrukt 412 hoher Ebene anhand der IL-Darstellung 450 des Konstrukts 412 hoher Ebene verwendet. Die neuen Anweisungen sind mit den Anweisungen zu vergleichen, die von dem Compiler 420 erstellt wurden.
  • An diesem Punkt sind zu jedem Konstrukt 412 hoher Ebene basierend auf den Kompilierzeitinformationen in dem ersten ausführbaren Binärcode 430 und auf Informationen aus der Beendigung von Schritt 540 die folgenden Informationen verfügbar. Die Kompilierzeitinformationen weisen die Kennung des Konstrukts 412 hoher Ebene, den Speicherplatz (die Speicherplätze) der von dem Compiler 420 zu dem Konstrukt 412 hoher Ebene erstellten alten Anweisungen und den Speicherplatz (die Speicherplätze) der Eingaben und Ausgaben für die alten Anweisungen durch den Compiler 420 auf; die Informationen aus der Beendigung des Schritts 540 weisen die von dem binären Optimierer 440 zu dem Konstrukt 412 hoher Ebene erstellten neuen Anweisungen und den Speicherplatz (die Speicherplätze) der Eingaben und Ausgaben für die neuen Anweisungen durch den binären Optimierer 440 auf.
  • Das Verfahren weist ferner die Verwendung der Kompilierzeitinformationen zur Erstellung von zwei Wrapper-Funktionen auf, beispielsweise F_neu und F_ait, zu jedem Konstrukt 412 hoher Ebene in 550. Es versteht sich, dass „F_neu“ und „F-alt“ beispielhafte Namen sind und dass bei anderen Beispielen andere Namen/Kennungen verwendet werden können. Die Erstellung der Wrapper-Funktionen weist ein Konfigurieren von Eingabe- und Ausgabeparametern und Anweisungen auf, die Teil der Wrapper-Funktionen sind, in 552. Die Eingaben in die Funktionen sind die Eingaben in das Konstrukt 412 hoher Ebene. Die von diesen Funktionen zurückgemeldeten Werte sind die Ausgaben des Konstrukts 412 hoher Ebene. Intern wird jede Funktion als Kopie der alten Anweisungen für F_alt und der neuen Anweisungen für F_neu implementiert, wobei jeweils die alten Anweisungen diejenigen des Compilers 420 und die neuen Anweisungen die des binären Optimierers 440 sind.
  • Ferner wird in 560 für jeden Typ von Konstrukt 412 hoher Ebene eine Prozedur zur Erstellung eines Prüfvektors festgelegt. Ein Prüfvektor ist eine Liste von Überprüfungen, die das Verhalten der von dem Compiler 420 und dem binären Optimierer 440 erstellten Codesequenzen vergleichen. Die Prüfvektoren enthalten sowohl gültige als auch ungültige Eingaben in die Konstrukte hoher Ebene. Die Prüfvektoren können optional beschränkt sein, um bestimmte ungültige Eingaben zu vermeiden, wenn der binäre Optimierer 440 (durch Überprüfen vorhergehender Operationen) bestimmt, dass die ungültige Eingabe diesen Punkt nicht erreichen kann. Der Prüfvektor kann entsprechend dem Typ des Konstrukts 512 hoher Ebene einen vorgegebenen Satz von Überprüfungen einschließen, wobei der Typ des Konstrukts 412 hoher Ebene anhand der Kennung aus den Kompilierzeitinformationen bestimmt wird.
  • Bei jeder Überprüfung in dem Prüfvektor in 570 werden die Wrapper-Funktionen F_neu und F_alt ausgeführt und entsprechende Ausgaben erfasst. Die Ausgaben der beiden Wrapper-Funktionen werden in 580 verglichen, um zu bestimmen, welche Anweisungen für das Konstrukt 412 hoher Ebene in den zweiten ausführbaren Code 470 aufgenommen werden sollen. Gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung ist die Ausführung von F_neu und F_alt in eine Ausnahmeroutine zum Erfassen der Ausgaben gehüllt. Eine ungültige Eingabe in die Wrapper-Funktionen kann eine Hardware-Ausnahme verursachen. Dies ist akzeptabel, solange die alten Anweisungen und die neuen Anweisungen die gleiche Hardware-Ausnahme verursachen. Der Prüfvektor wird verwendet, um sicherzustellen, dass das Verhalten der alten Anweisungen und der neuen Anweisungen im Wesentlichen identisch ist.
  • Anhand eines Vergleichs der Ausgaben der Überprüfungen für das Konstrukt 412 hoher Ebene wird bestimmt, welche Anweisungen zu diesem Konstrukt 412 hoher Ebene in den zweiten ausführbaren Code 470 aufgenommen werden sollen. Ferner werden bei dem Verfahren, wenn die Ausgaben nicht übereinstimmen, selbst wenn eine einzige Ausgabe des Prüfvektors nicht übereinstimmt, in 580 die Anweisungen zu dem Konstrukt 412 hoher Ebene bestimmt, die in den zweiten ausführbaren Binärcode 470 aufgenommen werden sollen. Wenn die neuen Anweisungen und die alten Anweisungen nicht die gleiche Ausgabe liefern, gibt es mehrere Optionen. Welche dieser Optionen aus diesen Optionen ausgewählt wird, basiert auf mehreren Faktoren, wie weiter beschrieben wird. Stimmen die Anweisungen für jedes Konstrukt hoher Ebene basierend auf dieser Auswahl hinsichtlich des Verhaltens einmal mit den entsprechenden Anweisungen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Programm 430 überein, erstellt der binäre Optimierer 440 in 590 das zweite ausführbare Programm 470, das die entsprechenden Anweisungen zu jedem ausgewählten Konstrukt hoher Ebene enthält, und gibt dieses aus.
  • 6 stellt ein Ablaufdiagramm eines Verfahrens zur Bestimmung, welche Anweisungen zu dem Konstrukt 412 hoher Ebene in das zweite ausführbare Programm 470 aufgenommen werden sollen, gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung dar. Wenn F_neu und F_alt die gleiche Ausgabe für jede Eingabe in dem Prüfvektor at 610 ergeben, werden in 620 die neuen Anweisungen in das zweite ausführbare binäre Programm 470 aufgenommen.
  • Bei einer oder mehreren Ausführungsformen der vorliegenden Erfindung kann, wenn die neuen Anweisungen zu dem Konstrukt 412 hoher Ebene hinsichtlich des Verhaltens nicht mit den alten Anweisungen übereinstimmen, ein Benutzer in 630 aufgefordert werden, auszuwählen, welche Anweisungen in das zweite ausführbare Programm 470 aufgenommen werden sollen. Gemäß einer oder mehreren Ausführungsformen der vorliegenden Erfindung wird eine Option für die Auswahl, welche Anweisungen in das zweite ausführbare Programm 470 aufgenommen werden sollen,wenn ein derartiger Fall eintritt, für den Optimierer 440 eingestellt, bevor er ausgeführt wird. Alternativ oder zusätzlich werden bei einer oder mehreren Ausführungsformen der vorliegenden Erfindung, wenn bei den neuen Anweisungen zu dem Konstrukt 412 hoher Ebene die Ergebnisse der Überprüfung nicht übereinstimmen, in 630 die ursprünglichen Anweisungen von dem Compiler 420 in den zweiten ausführbaren Code ausgegeben. Dies kann das Standardverhalten der in 630 ausgeführten Auswahl sein. Bei einem oder mehreren Beispielen werden die Überprüfungen aus dem Prüfvektor erneut ausgeführt, um sicherzustellen, dass die Verhalten übereinstimmen.
  • Alternativ oder zusätzlich wird die Auswahl auf der Grundlage der Leistungssteigerung durch die neuen Anweisungen erleichtert. Wenn die erwartete Leistungssteigerung durch die neue Codesequenz des Konstrukts 412 hoher Ebene beispielsweise im Vergleich zu der der alten Codesequenz ausreichend groß ist, kann der Benutzer eine aggressivere Option wählen. Hierbei kann eine ausreichend große Leistungssteigerung anhand der Ausführungsdauer, der Computerressourcenauslastung oder jeder anderen Metrik festgestellt werden. Wenn der Vergleich einer derartigen Metrik für den alten Code und den neuen Code zumindest zu einer vorgegebenen Schwellenverbesserung führt, kann angenommen werden, dass neue Code eine ausreichend große Leistungssteigerung aufzeigt. So kann beispielsweise hinsichtlich der Ausführungsdauer bei einer Verbesserung der Ausführungsdauer um mindestens 10 %, 25 %, 50 % oder jedes andere derartige Verhältnis (oder bei einem anderen Typ von Schwellenwert) angenommen werden, dass der neue Code eine ausreichend große Leistungssteigerung aufzeigt, und der neue Code kann (selbst bei anderem Verhalten) von dem Benutzer ausgewählt werden.
  • Alternativ oder zusätzlich kann der binäre Optimierer 440, wenn die neue Codesequenz nur bei (bestimmten Typen von) ungültigen Daten ein anderes Ergebnis ergibt und die Kosten einer Laufzeitüberprüfung zur Erfassung dieser (Typen von) ungültigen Daten geringer als die Leistungssteigerung durch die neue Codesequenz sind, von der Laufzeitüberprüfung überwacht einen neuen (dritten) ausführbaren Binärcode erstellen, der sowohl die alten als auch die neuen Codesequenzen enthält. Ist die Überprüfung erfolgreich, wird die neue Codesequenz verwendet. Schlägt die Überprüfung fehl, wird die alte Codesequenz verwendet. Dadurch wird eine eine Gesamtleistungssteigerung erbracht, während gleichzeitig nach wie vor identische Ergebnisse gewährleistet sind.
  • Ferner wird bei einer oder mehreren Ausführungsformen der vorliegenden Erfindung anstelle der Verwendung des Prüfvektors die Übereinstimmung des neuen Codes zu dem Konstrukt 412 hoher Ebene und des alten Codes zu diesem Konstrukt 412 hoher Ebene unter Verwendung eines Boole'schen SAT-Solver (SATsolver, satisfiability solver, Erfüllbarkeitslöser) oder eines anderen derartigen Dienstprogramms bestimmt. Da die Übereinstimmungsüberprüfung als Teil der Optimierung durch den binären Optimierer 440 ausgeführt wird und der SAT-Solver beträchtliche Zeit benötigen kann, kann die Optimierung unter Verwendung des binären Optimierers 440 im Vergleich zu der vorstehend beschriebenen Verwendung des Prüfvektors als zu zeitaufwendig betrachtet werden.
  • Weiterhin kann bei einem oder mehreren Beispielen, wenn die Kompilierzeitinformationen aus irgendeinem Grund nicht in dem ersten ausführbaren Code 430 vorhanden sind, ein anderes Dienstprogramm (wie ein (nicht gezeigter) echter Decompiler, der den ersten ausführbaren Code 430 in den Quellencode zurückkonvertiert) oder der binäre Optimierer 440 die Operationen höherer Ebene analysieren und erkennen und anschließend mit dem hier beschriebenen Prüfvektoransatz fortfahren.
  • Dementsprechend stellen eine oder mehrere Ausführungsformen der vorliegenden Erfindung praktische Anwendungen zur Verbesserung der Optimierung eines statisch kompilierten Codes für Sprachen wie COBOL bereit. Die eine oder die mehreren Ausführungsformen der vorliegenden Erfindung bieten dementsprechend eine Verbesserung der Computertechnologie, insbesondere von Compilern und Optimierern. Eine oder mehrere Ausführungsformen der vorliegenden Erfindung erleichtern die Verifizierung der Optimierung von Konstrukten hoher Ebene unter Verwendung von Prüfvektoren.
  • Die Verifizierung weist beispielsweise das Kompilieren eines Programms unter Verwendung eines intelligenten binärfähigen Compilers auf. Der „intelligente binärfähige“ Compiler gibt Informationen zu jeder Inline-Ersetzung, die ein Konstrukt hoher Ebene umfasst, das in dem erstellten Binärcode ersetzt wird, aus und speichert sie. Die Informationen, die gespeichert werden, umfassen die Identifikation eines durch die Inline-Ersetzung erstellten Satzes von Anweisungen. Die Informationen weisen ferner für jede Eingabe in ein Konstrukt hoher Ebene Informationen darüber auf, wo sich eine oder mehrere einzugebende Eingabeparameter befinden. So kann beispielsweise ein Speicherplatz eines Eingabeparameters als Speicherplatzadresse in einem Speicher, Speicherplatz in einer Datei oder jeder andere derartige Bezug bereitgestellt werden. Die Informationen weisen ferner zu jeder Ausgabe des Konstrukts hoher Ebene Informationen dazu auf, wo die Ausgabe platziert wird. So kann beispielsweise ein Speicherplatz der Ausgabe als Speicherplatzadresse in einem Speicher, Speicherplatz in einer Datei oder jeder andere derartige Bezug bereitgestellt werden, an denen eine oder mehrere Ausgabeparameter gespeichert sind.
  • Das Optimieren des Programms, das den erstellten Code (die alten Anweisungen) enthält, durch einen Optimierer (wie den binären Optimierer) weist ein Konvertieren des erstellten (binären) Codes in eine IL-Darstellung auf. Der erstellte Code kann eine oder mehrere Anweisungen zu einem in dem Quellencode des Programms verwendeten Konstrukt hoher Ebene aufweisen. Ferner wird als Reaktion auf die Optimierung des Programms ein weiterer ausführbarer Binärcode (neue Anweisungen) erstellt, der einen berichtigten Satz von Anweisungen zu dem Konstrukt hoher Ebene enthalten kann. Bei einem oder mehreren Beispielen enthalten die Kompilierzeitinformationen eine Kennung des Konstrukts hoher Ebene, einen Speicherplatz (Speicherplätze) der alten Anweisungen, den Speicherplatz (die Speicherplätze) der Eingaben und Ausgaben für alte Anweisungen.
  • Die Verifizierung weist ferner die Erstellung der Wrapper-Funktionen F_neu und F_alt für jedes Konstrukt hoher Ebene durch den Computer auf, wobei die Eingaben in diese Funktionen die Eingaben in das Konstrukt hoher Ebene sind, und die von diesen Funktionen zurückgemeldeten Werte die Ausgaben des Konstrukts hoher Ebene sind. Bei einer oder mehreren Ausführungsformen der vorliegenden Erfindung wird eine Prozedur zur Erstellung eines Prüfvektors erstellt, der eine Liste von Überprüfungen aufweist, die darauf ausgelegt sind, das Verhalten der alten Anweisungen und der neuen Anweisungen zu vergleichen, wobei der Prüfvektor gültige und ungültige Eingaben aufweist. Jede der Funktionen F_neu und F_alt wird zur Erfassung jeweiliger Ausgaben für jede Überprüfung in dem Prüfvektor ausgeführt, wobei die Überprüfung als Teil der Optimierung des Programms erfolgt. Als Reaktion auf eine Bestimmung, dass die Funktionen F_neu und F_alt eine übereinstimmende Ausgabe für jede Eingabe in den Prüfvektor ergeben, durch den Computer wird eine Anzeige geliefert, dass das Verwenden der neuen Anweisungen in dem optimierten Programm sicher ist (d.h. mit dem alten Verhalten übereinstimmt). Als Reaktion auf eine Bestimmung, dass die Funktionen F_neu und F_alt nicht für jede Eingabe in den Prüfvektor die gleiche Ausgabe liefern, durch den Computer kann der Computer eine Auswahl aus einem Satz vorgegebener Optionen erleichtern.
  • Die vorliegenden Erfindung kann ein System, ein Verfahren und/oder ein Computerprogrammprodukt sein. Das Computerprogrammprodukt kann ein computerlesbares Speichermedium (oder -medien) mit darauf gespeicherten computerlesbaren Programmanweisungen zum Veranlassen eines Prozessors zum Ausführen von Aspekten der vorliegenden Erfindung einschließen.
  • Das computerlesbare Speichermedium kann eine konkrete Vorrichtung sein, die Anweisungen zur Verwendung durch eine Anweisungsausführungsvorrichtung halten und speichern kann. Das computerlesbare Speichermedium kann beispielsweise eine elektronische Speichervorrichtung, eine magnetische Speichervorrichtung, eine optische Speichervorrichtung, eine elektromagnetische Speichervorrichtung, eine Halbleiter-Speichervorrichtung oder jede geeignete Kombination der vorstehenden sein, ist jedoch nicht darauf beschränkt. Eine nicht erschöpfende Liste spezifischerer Beispiele des computerlesbaren Speichermediums umfasst die folgenden: eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (ein RAM), einen Festspeicher (ein ROM), einen löschbaren programmierbaren Festspeicher (ein EPROM oder einen Flash-Speicher), einen statischen Direktzugriffsspeicher (ein SRAM), einen tragbaren Compact-Disc-Festspeicher (eine CD-ROM), eine digitale, vielseitig einsetzbare Platte (eine DVD, digital versatile disk), einen Speicherstick, eine Diskette, eine mechanisch codierte Vorrichtung wie Lochkarten oder erhabene Strukturen in einer Nut mit darauf aufgezeichneten Anweisungen und jede geeignete Kombination der Vorstehenden. Ein computerlesbares Speichermedium im hier verwendeten Sinne darf nicht als flüchtige Signale per se wie Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich über einen Wellenleiter oder andere Sendemedien ausbreiten (z.B. Lichtimpulse, die ein Glasfaserkabel durchlaufen) oder über ein Kabel gesendete elektrische Signale aufgefasst werden.
  • Die hier beschriebenen computerlesbaren Programmanweisungen können von einem computerlesbaren Speichermedium auf jeweilige Rechen-Nerarbeitungsvorrichtungen oder über ein Netzwerk, beispielsweise das Internet, ein lokales Netzwerk, ein Weitbereichsnetzwerk und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichervorrichtung heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, optische Übertragungsfasern, eine drahtlose Übertragung, Router, Firewalls, Schalter, Netzkopplercomputer und/oder Edge-Server umfassen. Eine Netzadapterkarte oder eine Netzschnittstelle in jeder Rechen-Nerarbeitungsvorrichtung empfängt computerlesbare Programmanweisungen aus dem Netzwerk und leitet die computerlesbaren Programmanweisungen zur Speicherung auf einem computerlesbaren Speichermedium in der jeweiligen Rechen-Nerarbeitungsvorrichtung weiter.
  • Computerlesbare Programmanweisungen zum Ausführen von Operationen gemäß der vorliegenden Erfindung können Assembler-Anweisungen, Befehlssatzarchitekturanweisungen (ISA-Anweisungen, ISA: instruction set architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten, oder entweder ein Quellencode oder ein Objektcode sein, der in einer beliebigen Kombination einer oder mehrerer Programmiersprachen geschrieben ist, darunter einer objektorientierten Programmiersprache wie Smalltalk, C++ oder dergleichen und herkömmlichen prozeduralen Programmiersprachen wie der Programmiersprache „C“ oder ähnlichen Programmiersprachen. Die computerlesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als unabhängiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernten Computer oder vollständig auf dem entfernten Computer oder Server ausgeführt werden. Bei dem zuletzt genannten Szenario kann der entfernte Computer über jeden Typ von Netzwerk einschließlich eines lokalen Netzwerks (LAN) oder eines Weitbereichsnetzwerks (WAN) mit dem Computer des Benutzers verbunden sein, oder die Verbindung zu einem externen Computer kann (beispielsweise über das Internet unter Verwendung eines Internetdienstanbieters) hergestellt werden. Bei einigen Ausführungsformen können elektronische Schaltkreise, darunter beispielsweise programmierbare Logikschaltkreise, feldprogrammierbare Gatteranordnungen (FPGA) oder programmierbare Logikanordnungen (PLA), die computerlesbaren Programmanweisungen durch die Nutzung von Zustandsinformationen der computerlesbaren Programmanweisungen zur Personalisierung der elektronischen Schaltkreise zum Ausführen von Aspekten der vorliegenden Erfindung ausführen.
  • Aspekte der vorliegenden Erfindung sind hier unter Bezugnahme auf Ablaufdiagrammdarstellungen und/oder Blockdiagramme von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Ablaufdiagrammdarstellungen und/oder Blockdiagramme und Kombinationen von Blöcken in den Ablaufdiagrammdarstellungen und/oder Blockdiagrammen durch computerlesbare Programmanweisungen implementiert werden können.
  • Diese computerlesbaren Programmanweisungen können einem Prozessor eines Allzweckcomputers, eines Computers mit besonderer Zweckbestimmung oder einer anderen programmierbaren Datenverarbeitungsvorrichtung zur Erzeugung einer Maschine zugänglich gemacht werden, so dass die Anweisungen, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, eine Einrichtung zur Implementierung der in dem bzw. den Ablaufdiagramm - und/oder Blockdiagramm-Block oder -Blöcken spezifizierten Funktionen/Vorgänge schaffen. Diese computerlesbaren Programmanweisungen können auch in einem computerlesbaren Speichermedium gespeichert werden, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Vorrichtungen anweisen kann, auf eine bestimmte Weise zu arbeiten, so dass das computerlesbare Speichermedium, in dem Anweisungen gespeichert sind, ein Fertigungserzeugnis umfasst, das Anweisungen einschließt, durch die Aspekte der Funktion/des Vorgangs implementiert werden, die bzw. der in dem bzw. den Ablaufdiagramm- und/oder Blockdiagramm-Block oder -Blöcken spezifiziert ist.
  • Die computerlesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Vorrichtung geladen werden, um zur Erzeugung eines computerimplementierten Prozesses die Ausführung einer Folge von Verfahrensschritten auf dem Computer, der anderen programmierbaren Vorrichtung oder sonstigen Vorrichtung zu veranlassen, so dass die Anweisungen, die auf dem Computer, der anderen programmierbaren Vorrichtung oder der sonstigen Vorrichtung ausgeführt werden, die in dem bzw. den Ablaufdiagramm- und/oder Blockdiagramm-Block oder -Blöcken spezifizierten Funktionen/Vorgänge implementieren.
  • Das Ablaufdiagramm und die Blockdiagramme in den Figuren zeigen die Architektur, den Funktionsumfang und die Funktionsweise möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß unterschiedlichen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block in dem Ablaufdiagramm oder den Blockdiagrammen ein Modul, ein Segment oder einen Anteil von Anweisungen repräsentieren, das bzw. der eine oder mehrere ausführbare Anweisungen zur Implementierung der spezifizierten logischen Funktion(en) umfasst. Bei einigen alternativen Implementierungen können die in den Blöcken aufgeführten Funktionen außerhalb der in den Figuren festgehaltenen Reihenfolge auftauchen. So können abhängig von dem beteiligten Funktionsumfang beispielsweise zwei als aufeinanderfolgend dargestellte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können gelegentlich in umgekehrter Reihenfolge ausgeführt werden. Es wird auch daraufhingewiesen, dass jeder Block der Blockdiagramme und/oder der Ablaufdiagrammdarstellung und Kombinationen von Blöcken der Blockdiagramme und/oder der Ablaufdiagrammdarstellung durch hardwarebasierte Systeme mit besonderer Zweckbestimmung implementiert werden können, die die spezifizierten Funktionen oder Vorgänge ausführen oder Kombinationen von Spezialhardware und Computeranweisungen durchführen.
  • Die Beschreibungen der unterschiedlichen Ausführungsformen der vorliegenden Erfindung erfolgten zu Veranschaulichungszwecken, sollen jedoch nicht erschöpfend sein oder auf die beschriebenen Ausführungsformen beschränkt werden. Für Fachleute mit durchschnittlichen Fachkenntnissen sind zahlreiche Modifikationen und Varianten ersichtlich, ohne dass vom Umfang der beschriebenen Ausführungsformen abgewichen würde. Die hier verwendete Terminologie wurde zur bestmöglichen Erläuterung der Prinzipien der Ausführungsformen, der praktischen Anwendung oder der technischen Verbesserung gegenüber auf dem Markt zu findenden Technologien oder zum Ermöglichen des Verständnisses der hier beschriebenen Ausführungsformen durch andere Fachleute mit durchschnittlichen Fachkenntnissen gewählt.

Claims (28)

  1. Computerimplementiertes Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen binären Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache) des Computerprogramms, wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; und Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung des Computerprogramms, wobei das Erstellen des zweiten ausführbaren Codes aufweist: Erstellen eines zweiten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene anhand der IL-Darstellung des Konstrukts hoher Ebene; Aufnehmen des zweiten Satzes von Maschinenanweisungen in den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, und Aufnehmen des ersten Satzes von Maschinenanweisungen in den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens nicht übereinstimmen.
  2. Computerimplementiertes Verfahren nach Anspruch 1, wobei die Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, auf einem Erfüllbarkeitslöser basiert.
  3. Computerimplementiertes Verfahren nach einem der vorhergehenden Ansprüche, wobei das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, aufweist: Erstellen eines Prüfvektors, der mehrere Überprüfungen aufweist; Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind; und Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
  4. Computerimplementiertes Verfahren nach Anspruch 3, wobei das Ausführen einer Überprüfung in dem Prüfvektor aufweist: Erstellen einer ersten Wrapper-Funktion für den ersten Satz von Maschinenanweisungen; Ausführen der ersten Wrapper-Funktion mit der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines ersten Satzes von Ausgaben; Erstellen einer zweiten Wrapper-Funktion für den zweiten Satz von Maschinenanweisungen und Ausführen der zweiten Wrapper-Funktion mit den der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines zweiten Satzes von Ausgaben.
  5. Computerimplementiertes Verfahren nach Anspruch 4, wobei die erste Wrapper-Funktion in eine erste Ausnahmeroutine eingeschlossen ist und die zweite Wrapper-Funktion in eine zweite Ausnahmeroutine eingeschlossen ist.
  6. Computerimplementiertes Verfahren nach einem der Ansprüche 3 bis 5, wobei die Übereinstimmung des Verhaltens anhand einer ersten Ausgabe einer Überprüfung, die eine Ausnahme bei dem ersten Satz von Maschinenanweisungen ist, und einer zweiten Ausgabe dieser Überprüfung bestimmt wird, die diese Ausnahme bei dem zweiten Satz von Maschinenanweisungen ist.
  7. Computerimplementiertes Verfahren nach einem der vorhergehenden Ansprüche, wobei die Kompilierzeitinformationen eine Kennung des Konstrukts hoher Ebene, einen Speicherplatz (Speicherplätze) des ersten Satzes von Maschinenanweisungen, einen Speicherplatz (Speicherplätze) von Eingaben und Ausgaben zu dem ersten Satz von Maschinenanweisungen aufweisen.
  8. Computerimplementiertes Verfahren nach einem der vorhergehenden Ansprüche, wobei der Compiler eine erste Variante eines Compilers ist und eine zweite Variante dieses Compilers mit anderen Einstellungen als denen der ersten Variante des Compilers zum Erstellen des zweiten ausführbaren Codes verwendet wird.
  9. Computerimplementiertes Verfahren nach einem der vorhergehenden Ansprüche, wobei entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen; das Verfahren aufweist: ein Erstellen eines dritten ausführbaren Codes, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und eine zusätzliche Funktion aufweist, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass Eingabe aus einem vorgegebenen Satz von Eingaben stammt, die Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  10. Verfahren nach Anspruch 9, wobei das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, aufweist: Erstellen eines Prüfvektors, der mehrere Überprüfungen aufweist; Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind; und Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
  11. Computerimplementiertes Verfahren nach Anspruch 10, wobei das Ausführen einer Überprüfung in dem Prüfvektor aufweist: Erstellen einer ersten Wrapper-Funktion für den ersten Satz von Maschinenanweisungen; Ausführen der ersten Wrapper-Funktion mit der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines ersten Satzes von Ausgaben; Erstellen einer zweiten Wrapper-Funktion für den zweiten Satz von Maschinenanweisungen und Ausführen der zweiten Wrapper-Funktion mit den der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines zweiten Satzes von Ausgaben.
  12. System, das aufweist: einen Speicher und einen Prozessor, der mit dem Speicher gekoppelt ist, wobei der Prozessor dafür ausgelegt ist, ein Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene auszuführen, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen binären Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache), wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung, wobei der zweite ausführbare Code einen zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene aufweist; Vergleichen des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen durch den binären Optimierer und Ersetzen des ersten ausführbaren Codes durch den zweiten ausführbaren Code entsprechend einer Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen.
  13. System nach Anspruch 12, wobei die Bestimmung, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, auf einem Erfüllbarkeitslöser basiert.
  14. System nach Anspruch 12 oder 13, wobei das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, aufweist: Erstellen eines Prüfvektors, der mehrere Überprüfungen aufweist; Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind; und Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
  15. System nach Anspruch 14, wobei das Ausführen einer Überprüfung in dem Prüfvektor aufweist: Erstellen einer ersten Wrapper-Funktion für den ersten Satz von Maschinenanweisungen; Ausführen der ersten Wrapper-Funktion mit der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines ersten Satzes von Ausgaben; Erstellen einer zweiten Wrapper-Funktion für den zweiten Satz von Maschinenanweisungen und Ausführen der zweiten Wrapper-Funktion mit den der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines zweiten Satzes von Ausgaben.
  16. System nach Anspruch 15, wobei die erste Wrapper-Funktion in eine erste Ausnahmeroutine eingeschlossen ist und die zweite Wrapper-Funktion in eine zweite Ausnahmeroutine eingeschlossen ist.
  17. System nach einem der Ansprüche 14 bis 16, wobei die Übereinstimmung des Verhaltens anhand einer ersten Ausgabe einer Überprüfung, die eine Ausnahme bei dem ersten Satz von Maschinenanweisungen ist, und einer zweiten Ausgabe dieser Überprüfung bestimmt wird, die diese Ausnahme bei dem zweiten Satz von Maschinenanweisungen ist.
  18. System nach einem der Ansprüche 12 bis 17, wobei die Kompilierzeitinformationen eine Kennung des Konstrukts hoher Ebene, einen Speicherplatz (Speicherplätze) des ersten Satzes von Maschinenanweisungen, einen Speicherplatz (Speicherplätze) von Eingaben und Ausgaben zu dem ersten Satz von Maschinenanweisungen aufweisen.
  19. System nach einem der Ansprüche 12 bis 18, wobei der Compiler eine erste Variante eines Compilers ist und eine zweite Variante dieses Compilers mit anderen Einstellungen als denen der ersten Variante des Compilers zum Erstellen des zweiten ausführbaren Codes verwendet wird.
  20. System nach einem der Ansprüche 12 bis 19, wobei entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen; das Verfahren aufweist: ein Erstellen eines dritten ausführbaren Codes, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und eine zusätzliche Funktion aufweist, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass Eingabe aus einem vorgegebenen Satz von Eingaben stammt, die Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  21. System nach Anspruch 20, wobei das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, aufweist: Erstellen eines Prüfvektors, der mehrere Überprüfungen umfasst; Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind; und Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
  22. Computerprogrammprodukt zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene, wobei das Computerprogrammprodukt aufweist: ein computerlesbares Speichermedium, das von einer Verarbeitungsschaltung lesbar ist und in dem Anweisungen zur Ausführung durch die Verarbeitungsschaltung zum Ausführen eines Verfahrens nach einem der Ansprüche 1 bis 11 gespeichert sind.
  23. Computerprogramm, das auf einem computerlesbaren Medium und gespeichert ist und in den internen Speicher eines digitalen Computers geladen werden kann und Software-Codeabschnitte zum Ausführen des Verfahrens nach einem der Ansprüche 1 bis 11 bei der Ausführung des Programms auf einem Computer aufweist.
  24. Computerimplementiertes Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache), wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung, wobei der zweite ausführbare Code einen zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene aufweist; und entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen: Erstellen eines dritten ausführbaren Codes, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und eine zusätzliche Funktion aufweist, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass die Eingabe aus einem vorgegebenen Satz von Eingaben stammt, eine Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  25. Computerimplementiertes Verfahren nach Anspruch 24, wobei das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, aufweist: Erstellen eines Prüfvektors, der mehrere Überprüfungen aufweist; Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind; und Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
  26. Computerimplementiertes Verfahren nach Anspruch 25, wobei das Ausführen einer Überprüfung in dem Prüfvektor aufweist: Erstellen einer ersten Wrapper-Funktion für den ersten Satz von Maschinenanweisungen; Ausführen der ersten Wrapper-Funktion mit der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines ersten Satzes von Ausgaben; Erstellen einer zweiten Wrapper-Funktion für den zweiten Satz von Maschinenanweisungen und Ausführen der zweiten Wrapper-Funktion mit den der auszuführenden Überprüfung entsprechenden Eingaben und Erfassen eines zweiten Satzes von Ausgaben.
  27. System, das aufweist: einen Speicher und einen Prozessor, der mit dem Speicher gekoppelt ist, wobei der Prozessor darauf ausgelegt ist, ein Verfahren zur automatischen Verifizierung der Optimierung von Konstrukten hoher Ebene auszuführen, wobei das Verfahren aufweist: Erstellen eines ersten ausführbaren Codes durch Kompilieren eines Computerprogramms durch einen Compiler, wobei das Computerprogramm ein Konstrukt hoher Ebene enthält, und das Kompilieren aufweist: Erstellen eines ersten Satzes von Maschinenanweisungen zu dem Konstrukt hoher Ebene und Speichern von Kompilierzeitinformationen zu dem Konstrukt hoher Ebene in dem ersten ausführbaren Code und Optimieren des ersten ausführbaren Codes durch einen Optimierer, wobei das Optimieren aufweist: Konvertieren des ersten ausführbaren Codes in eine Zwischensprachendarstellung (IL-Darstellung, IL: intermediate language, Zwischensprache), wobei die IL-Darstellung einen auf den Kompilierzeitinformationen basierenden, dem Konstrukt hoher Ebene entsprechenden Satz von IL-Anweisungen aufweist; Erstellen eines zweiten ausführbaren Codes anhand der IL-Darstellung, wobei der zweite ausführbare Code einen zweiten Satz von Maschinenanweisungen zu dem Konstrukt hoher Ebene aufweist; und entsprechend einer Bestimmung, dass das Verhalten des ersten Satzes von Maschinenanweisungen und des zweiten Satzes von Maschinenanweisungen bei einem Satz von Eingaben nicht übereinstimmen: Erstellen eines dritten ausführbaren Codes, der den ersten Satz von Maschinenanweisungen, den zweiten Satz von Maschinenanweisungen und eine zusätzliche Funktion aufweist, die eine Eingabe in das Konstrukt hoher Ebene überprüft und als Reaktion darauf, dass die Eingabe aus einem vorgegebenen Satz von Eingaben stammt, die Ausführung des ersten Satzes von Maschinenanweisungen veranlasst und anderenfalls die Ausführung des zweiten Satzes von Maschinenanweisungen veranlasst.
  28. System nach Anspruch 27, wobei das Bestimmen, dass der erste Satz von Maschinenanweisungen und der zweite Satz von Maschinenanweisungen hinsichtlich des Verhaltens übereinstimmen, aufweist: Erstellen eines Prüfvektors, der mehrere Überprüfungen umfasst; Ausführen jeder Überprüfung in dem Prüfvektor an dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen, die dem Konstrukt hoher Ebene zugeordnet sind; und Vergleichen der Ausgaben jeder der Überprüfungen in dem Prüfvektor, wobei die Übereinstimmung des Verhaltens anhand der Übereinstimmung jeder der Ausgaben bei dem ersten Satz von Maschinenanweisungen und dem zweiten Satz von Maschinenanweisungen bestimmt wird.
DE112020003634.0T 2019-07-31 2020-07-24 Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren Pending DE112020003634T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/527,362 US10776255B1 (en) 2019-07-31 2019-07-31 Automatic verification of optimization of high level constructs using test vectors
US16/527,362 2019-07-31
PCT/IB2020/057017 WO2021019401A1 (en) 2019-07-31 2020-07-24 Automatic verification of optimization of high level constructs using test vectors

Publications (1)

Publication Number Publication Date
DE112020003634T5 true DE112020003634T5 (de) 2022-06-09

Family

ID=72425773

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020003634.0T Pending DE112020003634T5 (de) 2019-07-31 2020-07-24 Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren

Country Status (6)

Country Link
US (1) US10776255B1 (de)
JP (1) JP7410269B2 (de)
CN (1) CN114174983B (de)
DE (1) DE112020003634T5 (de)
GB (1) GB2604237B (de)
WO (1) WO2021019401A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11886848B2 (en) 2022-05-25 2024-01-30 International Business Machines Corporation Binary translation using raw binary code with compiler produced metadata

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4057938B2 (ja) 2003-03-26 2008-03-05 株式会社東芝 コンパイラ、コンパイル方法、及びプログラム開発ツール
US20060031820A1 (en) * 2004-08-09 2006-02-09 Aizhong Li Method for program transformation and apparatus for COBOL to Java program transformation
US7624384B2 (en) * 2004-11-30 2009-11-24 Intel Corporation Apparatus, system, and method of dynamic binary translation with translation reuse
US8103674B2 (en) 2007-12-21 2012-01-24 Microsoft Corporation E-matching for SMT solvers
US8381175B2 (en) * 2010-03-16 2013-02-19 Microsoft Corporation Low-level code rewriter verification
US8832672B2 (en) * 2011-01-28 2014-09-09 International Business Machines Corporation Ensuring register availability for dynamic binary optimization
CN102622260B (zh) * 2012-02-27 2014-12-10 中国科学院计算技术研究所 一种在线迭代编译的优化方法和优化系统
US8959495B2 (en) * 2012-09-14 2015-02-17 Oracle International Corporation Unifying static and dynamic compiler optimizations in source-code bases
JP5967618B2 (ja) * 2013-04-17 2016-08-10 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 二進化十進数型変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにそのコンピュータ及びコンピュータ・プログラム
JP5988444B2 (ja) 2014-02-14 2016-09-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
US10261889B2 (en) * 2014-06-25 2019-04-16 Microsoft Technology Licensing, Llc Techniques for edit-and-continue and enhanced optimized debugging on optimized code
US9442707B2 (en) * 2014-06-25 2016-09-13 Microsoft Technology Licensing, Llc Incremental whole program compilation of code
US9563536B1 (en) * 2015-10-19 2017-02-07 International Business Machines Corporation Performance neutral isolation of runtime discrepancies in binary code
US9715377B1 (en) 2016-01-04 2017-07-25 International Business Machines Corporation Behavior based code recompilation triggering scheme
EP3427148B1 (de) * 2016-03-11 2022-01-12 LZLabs GmbH Lademodulkompilator
US10579498B2 (en) * 2016-07-31 2020-03-03 Microsoft Technology Licensing, Llc. Debugging tool for a JIT compiler
US10809985B2 (en) 2017-03-09 2020-10-20 Microsoft Technology Licensing, Llc Instrumenting program code
US10514909B2 (en) * 2017-03-29 2019-12-24 Technion Research & Development Foundation Limited Similarity of binaries
US10339837B1 (en) * 2018-06-01 2019-07-02 Polyverse Corporation Distribution of scrambled binary output using a randomized compiler

Also Published As

Publication number Publication date
CN114174983A (zh) 2022-03-11
JP2022542007A (ja) 2022-09-29
GB2604237B (en) 2023-03-22
JP7410269B2 (ja) 2024-01-09
WO2021019401A1 (en) 2021-02-04
US10776255B1 (en) 2020-09-15
CN114174983B (zh) 2022-10-11
GB2604237A (en) 2022-08-31

Similar Documents

Publication Publication Date Title
Gao et al. Estimating GPU memory consumption of deep learning models
US10296307B2 (en) Method and system for template extraction based on source code similarity
DE102017217971B4 (de) Ermöglichen von Debugging von serverlosen Anwendungen mittels Graph-Rewriting
DE112018002984T5 (de) Konformitätsbewusste Laufzeiterzeugung auf Grundlage von Anwendungsmustern und Risikobeurteilung
Kazman et al. View extraction and view fusion in architectural understanding
DE112018003584B4 (de) Vorhersagen eines inhaltsverzeichnis-zeigerwerts in reaktion auf ein verzweigen auf eine subroutine
DE112012003714T5 (de) Kompilieren von Code für eine erweiterte binäre Anwendungsschnittstelle (Application binary interface (ABI)) mit Entschlüsselungszeit-Anweisungsoptimierung
DE102016214786A1 (de) Anwendungsprofiling-Jobmanagement-System, -Programm und -Verfahren
DE112012003780T5 (de) Verknüpfen von Code für eine erweiterte binäre Anwendungsschnittstelle (Application binary Interface (ABI)) mit Entschlüsselungszeit-Anweisungsoptimierung
DE102019003851A1 (de) Systeme und Verfahren zum automatischen Realisieren von Modellen zu Co-Simulation
DE112018004660T5 (de) Verwenden von kommentaren zum bereitstellen von optimierungen
DE102012217315A1 (de) Verwenden von nativen Routinen an Stelle von emulierten Routinen in einer emulierten Anwendung
DE102016110195A1 (de) Erzeugen von Code in statisch typisierten Programmiersprachen für eine dynamisch typisierte array-basierte Sprache
DE112020000805T5 (de) Kontrolle für „ziffernvalidierungsüberprüfung“ in anweisungsausführung
DE112017005015T5 (de) Verarbeiten von gleichgeordneten Aufrufen (SIBLING CALLS)
Allen et al. Staged points-to analysis for large code bases
DE102022129946A1 (de) Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur
DE102018208267A1 (de) Technologie zum verwenden von steuerabhängigkeitsgraphen für das konvertieren von steuerflussprogrammen in datenflussprogramme
Harzenetter et al. Automated generation of management workflows for applications based on deployment models
US10146530B1 (en) Simulating and evaluating code branch merge
DE112021005927T5 (de) Patchen von arbeitsabläufen
DE112021004940T5 (de) Erneutes Laden einer aktualisierten, gemeinsam genutzten Bibliothek, ohne die Ausführung einer Anwendung zu stoppen
DE112020003634T5 (de) Automatische verifizierung der optimierung von konstrukten auf hoher ebene unter verwendung von prüfvektoren
DE112021003274T5 (de) Ressourcenzuordnung zum optimieren von hyperparametern bei umfangreichen deep-learning-arbeitslasten
DE202015009280U1 (de) Integrierte domänenspezifische Sprachen als erstklassige Codeartefakte

Legal Events

Date Code Title Description
R012 Request for examination validly filed