DE112011104830T5 - Ein Verfahren zum Sicherstellen der Programmkorrektheit unter Verwendung von feingranularem spekulativem Hardwareausführen - Google Patents

Ein Verfahren zum Sicherstellen der Programmkorrektheit unter Verwendung von feingranularem spekulativem Hardwareausführen Download PDF

Info

Publication number
DE112011104830T5
DE112011104830T5 DE112011104830T DE112011104830T DE112011104830T5 DE 112011104830 T5 DE112011104830 T5 DE 112011104830T5 DE 112011104830 T DE112011104830 T DE 112011104830T DE 112011104830 T DE112011104830 T DE 112011104830T DE 112011104830 T5 DE112011104830 T5 DE 112011104830T5
Authority
DE
Germany
Prior art keywords
program
main
hardware thread
thread
speculative
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE112011104830T
Other languages
English (en)
Inventor
Robert W. Wisniewski
Dan Tsafrir
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 DE112011104830T5 publication Critical patent/DE112011104830T5/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1489Generic software techniques for error detection or fault masking through recovery blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms

Landscapes

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

Abstract

Ein Verfahren zum Prüfen der Programmkorrektheit kann ein Ausführen eines Programms auf einem Haupt-Hardware-Thread in einem spekulativen Ausführungsmodus in einem Hardwareausführungskontext auf einem Chip mit einer Vielzahl von Hardwareausführungskontexten beinhalten. In diesem Modus wird der Zustand des Haupt-Hardware-Thread nicht an den Hauptspeicher übergeben. Korrektheitsprüfungen durch eine Vielzahl von Helfer-Threads werden parallel zum Haupt-Hardware-Thread ausgeführt. Jeder Helfer-Thread wird auf dem Chip in einem separaten Hardwareausführungskontext parallel mit dem Haupt-Hardware-Thread ausgeführt. Die Korrektheitsprüfungen ermitteln einen sicheren Punkt im Programm, bis zu dem durch den Haupt-Hardware-Thread ausgeführte Operationen korrekt sind. Sobald der Haupt-Hardware-Thread den sicheren Punkt erreicht, wird der Ausführungsmodus des Haupt-Hardware-Thread in „nicht-spekulativ” geändert. Die Laufzeitumgebung veranlasst dann den Haupt-Thread, erneut in den spekulativen Ausführungsmodus einzutreten.

Description

  • GEBIET
  • Die vorliegende Anmeldung betrifft allgemein Computerarchitektur und genauer das Hardwareprozessorausführen.
  • HINTERGRUND
  • Unverwaltete Sprachen wie C und C++ sind inhärent anfällig für speicherbezogene Fehler, die aufgrund von Programmierfehlern auftreten. Solche Fehler verursachen zahlreiche Programmfehler (bugs), die schwierig zu erkennen sind, und sie machen Anwendungen verletzlich für zerstörerische Angriffe, die es zum Beispiel feindlichen Parteien ermöglichen können, das gesamte System unrechtmäßig zu übernehmen. Daher stellen Speicherfehler ein ernstes Problem während der Entwicklung einer Anwendung und während deren Produktion dar.
  • Es gibt vielfältige kostenlose und kommerzielle Werkzeuge, die Speicherfehler erkennen, während Anwendungen ausgeführt werden. Zu Beispielen solcher Werkzeuge zählen: Insure++ von der ParasoftTM Corporation in Kalifornien, U.S.A., Purify of Rational von der International Business Machines Corporation, Armonk, New York, und das Open-Source Projekt Valgrind. Bestehende Werkzeuge überprüfen zum Beispiel, dass Leseoperationen nur an bereits initialisierten Speichern durchgeführt werden und dass Schreiboperationen nur innerhalb von gültigen Bereichen auftreten. Einige Werkzeuge bringen jedoch einen erheblichen Aufwand mit sich und werden daher üblicherweise nur während der Entwicklung und nicht bei der Produktion verwendet, so dass potenziell noch unentdeckte Fehler zurückbleiben.
  • Verwaltete Sprachen wie Java, C# und Perl verwenden einen ähnlichen integrierten Mechanismus für das Prüfen auf Speicherfehler; sie leiden daher unter ähnlichem Aufwand. Sowohl verwaltete als auch unverwaltete Sprachen können von einem höheren Grad an Sicherheit/Korrektheitsprüfungen profitieren, wie beispielsweise der „taint mode” von Perl, der alle Variablenzuweisungen verfolgt, um sicherzustellen, dass berechtigte Anwendungen nicht unbeabsichtigt von Eingaben betroffen sind, die unter Umständen durch einen nicht berechtigten Benutzer vorgenommen wurden. Diese Prüfungen bringen gleichermaßen einen Nachteil in Form von Aufwand mit sich.
  • Die Erfinder der vorliegenden Offenbarung haben erkannt, dass ein Weg, den Aufwand zu verbessern, darin liegt, dass mehrere parallel arbeitende Tasks auf potenzielle Fehler hin prüfen. Die Erfinder der vorliegenden Offenbarung haben zudem erkannt, dass Bedarf nach einem Mechanismus besteht, der ein schnelles Auftreten der Fehlererkennung auf feingranulare Weise und mit geringem Aufwand ermöglicht.
  • KURZZUSAMMENFASSUNG
  • Ein Verfahren zum Prüfen der Programmkorrektheit kann in einem Aspekt ein Ausführen eines Programms in einem Haupt-Hardware-Thread in einem spekulativen Ausführungsmodus beinhalten, in dem der Zustand des Haupt-Hardware-Thread nicht an den Hauptspeicher übergeben wird. Der Haupt-Hardware-Thread kann in einem Hardwareausführungskontext auf einem Computersystem ausgeführt werden, das einen Computerchip mit einer Vielzahl von Hardwareausführungskontexten besitzt. Das Verfahren kann zudem ein Ausführen von Korrektheitsprüfungen durch eine Vielzahl von Helfer-Threads beinhalten. Jeder Helfer-Thread kann in einem separaten Hardwareausführungskontext auf dem Chip parallel mit dem Haupt-Hardware-Thread ausgeführt werden. Die Korrektheitsprüfungen können einen sicheren Punkt im Programm ermitteln, bis zu dem durch den Haupt-Hardware-Thread ausgeführte Operationen korrekt sind. Das Verfahren kann weiterhin ein Ändern des Ausführungsmodus des Haupt-Hardware-Thread am sicheren Punkt in „nicht-spekulativ” beinhalten.
  • In einem weiteren Aspekt kann das Verfahren zum Prüfen der Programmkorrektheit nach dem Herausnehmen des Ausführungsmodus des Haupt-Hardware-Thread aus seinem spekulativen Ausführungsmodus weiterhin ein Übergeben aller Zustände des Haupt-Hardware-Thread an den Hauptspeicher beinhalten. In noch einem weiteren Aspekt kann das Verfahren weiterhin ein Zurückändern des Haupt-Hardware-Thread in den spekulativen Ausführungsmodus und ein Fortsetzen des Ausführens von Korrektheitsprüfungen durch die Vielzahl von Helfer-Threads bis zum Erreichen eines nächsten sicheren Punktes beinhalten, wobei der Ausführungsmodus des Haupt-Hardware-Thread in „nicht-spekulativ” geändert wird.
  • Ein System zum Prüfen der Programmkorrektheit kann in einem Aspekt eine Vielzahl von Hardwareausführungskontexten auf einem Computerchip enthalten. Ein Haupt-Hardware-Thread kann ein Programm in einem ersten Hardwareausführungskontext der Vielzahl von Hardwareausführungskontexten in einem spekulativen Ausführungsmodus ausführen, wobei der Zustand des Haupt-Hardware-Thread nicht an den Hauptspeicher übergeben wird. Eine Vielzahl von Helfer-Threads kann ein Prüfen auf Programmkorrektheit in einem oder mehreren zweiten Hardwareausführungskontexten der Vielzahl von Hardwareausführungskontexten ausführen, wobei die Vielzahl von Helfer-Threads in der Lage ist, einen sicheren Punkt im Programm zu ermitteln, bis zu dem durch den Haupt-Hardware-Thread ausgeführte Operationen korrekt sind. Der Ausführungsmodus des Haupt-Hardware-Thread wird am sicheren Punkt in „nicht-spekulativ” geändert.
  • Das System kann in einem weiteren Aspekt zudem eine Speicherhierarchie enthalten, die mindestens einen lokal zum Chip und dem Hauptspeicher angeordneten Cachespeicher enthält, wobei der Zustand des Haupt-Hardware-Thread während der spekulativen Ausführung im Cachespeicher gespeichert wird und dem Hauptspeicher erst übergeben wird, nachdem der Ausführungsmodus des Haupt-Hardware-Thread in „nicht-spekulativ” geändert wurde. In noch einem weiteren Aspekt wird der Ausführungsmodus des Haupt-Hardware-Thread in den spekulativen Ausführungsmodus zurückgeändert und die Vielzahl von Helfer-Threads fährt mit dem Ausführen korrekten Prüfens fort, bis der nächste sichere Punkt ermittelt wird.
  • Ein computerlesbares Speichermedium, das ein Programm von durch eine Maschine ausführbaren Anweisungen zum Ausführen eines oder mehrerer hierin beschriebener Verfahren speichert, kann ebenfalls bereitgestellt werden.
  • Weitere Merkmale sowie der Aufbau und die Funktionsweise vielfältiger Ausführungsformen werden nachstehend unter Bezugnahme auf die angehängten Zeichnungen im Detail beschrieben. In den Zeichnungen bezeichnen gleiche Bezugszeichen identische oder in der Funktion ähnliche Elemente.
  • KURZBESCHREIBUNG DER MEHREREN ZEICHNUNGSANSICHTEN
  • 1 veranschaulicht ein Verfahren für spekulatives Hardwareausführen in einer Ausführungsform der vorliegenden Offenbarung.
  • 2 zeigt ein Blockschaubild, das ein System für feingranulares spekulatives Hardwareausführen für ein Prüfen der Programmkorrektheit in einer Ausführungsform der vorliegenden Offenbarung veranschaulicht.
  • 3 veranschaulicht einen Haupt-Thread und einen Helfer-Thread, die parallel ausgeführt werden. Der Haupt-Thread führt einen Codeblock aus, bis ein sicherer Punkt spekulativ erreicht wird.
  • DETAILLIERTE BESCHREIBUNG
  • In einer Ausführungsform wird ein Mechanismus beschrieben, der spekulatives Ausführen verwendet, um die Auswirkungen der Korrektheitsprüfungen auf die Leistung zu verringern. Der Mechanismus der vorliegenden Offenbarung kann in einer Ausführungsform die Auswirkungen des Aufwands durch Prüfen auf Speicherfehler verringern, indem Hardware-Spekulation über einen Cachespeicher mit mehreren Werten eingesetzt wird. In einer Ausführungsform der vorliegenden Offenbarung kann der „Haupt”-Thread (der Code der Anwendung ohne Korrektheitsprüfungen) spekulativ ausgeführt werden, während andere „Helfer”-Threads die zugehörigen Korrektheitsprüfungen parallel bei feiner Granularität durchführen, wenn der Bedarf entsteht. Der Haupt-Thread hört auf, spekulativ zu sein, falls und/oder zu dem Zeitpunkt, an dem die Helfer-Threads zustimmen; andernfalls (fehlgeschlagene Korrektheitsprüfung) wird der derzeitige Block spekulativen Ausführens des Haupt-Thread abgebrochen, wodurch das System in einem ordnungsgemäßen Zustand verbleibt und sichergestellt wird, dass das (spekulative) fehlerhafte Ausführen keine unberechtigten Nebeneffekte aufweist. Darüber hinaus können die Helfer-Threads dem Benutzer den Fehler berichten.
  • Spekulatives Ausführen oder spekulative Operation oder spekulativer Task bezieht sich auf ein Ausführen, bei dem ein Prozess oder Thread Programmanweisungen ausführt, ohne den Zustand des Programms an den permanenten Speicher zu übergeben.
  • Unterstützung von Speicherspekulation oder spekulativem Ausführen kann durch Hardwarearchitektur bereitgestellt werden, die einen Computerchip (Chip mit integrierter Schaltung) mit einer Vielzahl von Prozessorkernen enthält, von denen jeder eine Vielzahl von Hardware-Threads aufweist. Weitere Elemente können auf dem Chip bereitgestellt werden. Die Unterstützung für spekulatives Mehrfach-Threading ermöglicht ein Zuweisen unterschiedlicher spekulativer Tasks zu jedem der Hardware-Threads. Der Begriff „Thread” kann sich entweder auf die Hardware (normalerweise als Hardware-Threading oder symmetrisches Mehrfach-Threading (symmetric multithreading SMT) bezeichnet) einschließlich der Ausführungseinheiten, des Registerzustands usw. beziehen, die einem Satz von Hardware zugehörig sind, der zum Ausführen einer Reihe von Anweisungen in der Lage ist, oder es bezieht sich auf das Softwarekonstrukt, das auf der Hardware ausgeführt wird. Ein Thread ist daher als Entität in der Lage, einen Anweisungsstrom auszuführen. Mehrere Software-Threads können auf einem einzigen Hardware-Thread gemultiplext werden. In Bezug auf Threads bezieht sich der Begriff älter/jünger oder früher/später auf deren relative Programmreihenfolge (und nicht auf die Zeit, die sie tatsächlich auf der Hardware ausgeführt werden).
  • Bei spekulativem Ausführen werden aufeinander folgende Abschnitte von sequenziellem Code oder aufeinander folgende Iterationen in einer Schleife Hardware-Threads zugewiesen, um gleichzeitig ausgeführt zu werden. Jeder Thread hat die Illusion, seine Tasks in Programmreihenfolge auszuführen. Er sieht seine eigenen Schreibvorgänge und Schreibvorgänge, die früher im Programm auftraten. Wenn die Hardware (wegen unterschiedlicher spekulativer Threads, die denselben Speicher berühren) erkennt, dass das Programm Speicherreferenzen ausführt, die die Fähigkeit verletzen, es so aussehen zu lassen, dass die ursprüngliche Programmreihenfolge eingetreten ist, wird die Hardware diesen und nachfolgende spekulative Threads abbrechen und den Code sequenziell ausführen.
  • Um diesen Task abzuschließen, bietet der L2 die Fähigkeit, mehrere Werte unter jeder beliebigen gegebenen Speicheradresse zu speichern. Somit kann der L2 mehrere unterschiedliche Datenwerte für eine einzige Adresse aufweisen. Jede belegt einen L2-Pfad, und das L2-Verzeichnis speichert zusätzlich zu den üblichen Verzeichnisinformationen einen Verlauf darüber, welche Threads die Zeile gelesen oder geschrieben haben. Ein spekulativer Schreibvorgang darf nicht in den Hauptspeicher ausgeschrieben werden.
  • In einer Ausführungsform kann eine Situation auftreten, welche die Programmreihenfolge aufbricht, wenn ein in der Programmreihenfolge früherer Thread auf eine Adresse schreibt, die ein in der Programmreihenfolge späterer Thread bereits gelesen hat. Der spätere Thread sollte diese Daten gelesen haben, hat dies aber nicht getan. Eine Lösung besteht darin, den Thread abzubrechen sowie alle Zeilen, die er in den L2 geschrieben hat, für ungültig zu erklären und dies für alle jüngeren Threads zu wiederholen. Wenn auf der anderen Seite keine solche Wechselwirkung auftritt, kann ein Thread erfolgreich abgeschlossen werden, und seine Schreibvorgänge können auf einen externen Hauptspeicher verschoben werden, wenn ein geleertes Übergeben auftritt, das die Spekulation beendet.
  • Nicht alle Threads müssen spekulativ sein. Der in der Programmreihenfolge früheste ausgeführte Thread kann als nicht-spekulativ ausgeführt werden und läuft herkömmlich; insbesondere können seine Schreibvorgänge direkt an den externen Hauptspeicher gehen. Die in der Programmreihenfolge späteren Lesevorgänge sind spekulativ und stehen unter dem Vorbehalt, abgebrochen zu werden. Wenn der nicht-spekulative Thread abgeschlossen wird, kann der nächstälteste Thread-Zustand übergeben werden, und er beginnt dann, nicht-spekulativ ausgeführt zu werden.
  • Der folgende Algorithmus kann eine effiziente Helfer-Thread-Überprüfungsverwendung des vorstehend beschriebenen spekulativen Ausführens in einer Ausführungsform der Offenbarung realisieren.
    • 1. Der Benutzer fügt im Code des Benutzers eine Anweisung für Regionen hinzu, die ein Benutzer mit dieser Technik überprüfen möchte.
    • 1a. Die Anweisungen können immer im Code verbleiben und über Compilermarkierungen und/oder Umgebungsvariablen aktiviert/deaktiviert werden.
    • 2. Wenn die Compilermarkierung/Umgebungsvariable den Wunsch des Benutzers nach einem Ausführen mit Korrektheitsüberprüfung anzeigt, werden die folgenden Schritte 3 bis 6 unternommen, andernfalls wird das Programm ohne jeglichen zusätzlichen ausgeführten Code (oder Störung des Verhaltens) normal ausgeführt.
    • 3. Die Laufzeitumgebung veranlasst den Haupt-Thread, in das spekulative Ausführen einzutreten.
    • 4. Die Laufzeitumgebung startet Helfer-Threads, um einen durch den Benutzer festlegbaren Satz von Prüfungen durchzuführen.
    • 4a. Im Falle, dass einer der Helfer-Threads ein Problem erkennt, wird der Haupt-Thread angehalten, die Laufzeit fragt den Zustand der Helfer-Threads ab, um Debuginformationen zu erhalten, und optional wird die Kontrolle dem Benutzer zurückgegeben, um eine sorgfältigere Untersuchung des erkannten Fehlers vorzunehmen, oder optional fährt das Programm mit einem vom erkannten Prüffehler angefertigten Protokoll fort.
    • 5. An stabilen Punkten (die dadurch festgelegt werden, dass sich alle Prüfungen als erfolgreich herausgestellt haben und keine ausstehenden Operationen vorhanden sind) übergibt die Laufzeitumgebung (sie verlässt das spekulative Ausführen) die Aktualisierungen des Haupt-Thread und Verfolgungsinformationen und tritt dann für den Haupt-Thread erneut in die Spekulation ein. Der Haupt-Thread verlässt die Spekulation und tritt wieder in sie ein, weil die Menge an Zustandsinformationen für ein spekulatives Ausführen schließlich überlaufen und einen spekulativen Fehler verursachen kann.
    • 6. Der Haupt-Thread fährt in diesem Modus fort, bis er auf eine Benutzeranweisung stößt, die das Ende der zu prüfenden Coderegion angibt oder das Programm normal endet.
  • 1 veranschaulicht ein Verfahren zum Prüfen auf potenzielle Fehlerbedingungen durch Verwenden eines spekulativen Hardware-Ausführens in einer Ausführungsform der vorliegenden Offenbarung. In einer Ausführungsform kann das Verfahren mittels eines Chips mit integrierter Schaltung mit mehreren Hardwareausführungskontexten und einer Speicherhierarchie realisiert werden. Ein Hardwareausführungskontext bezieht sich auf die Fähigkeit eines Prozessors, einen Ausführungs-Thread zu steuern. Mehrere Hardwareausführungskontexte können ausgebildet werden, indem mehrere Kerne auf einem Chip vorhanden sind. Ein Kern kann eine logische Ausführungseinheit mit L1-Cachespeicher und Funktionseinheiten enthalten und besitzt die Fähigkeit, Threads unabhängig auszuführen. Eine Speicherhierarchie kann auf die folgende Weise organisiert sein: lokal zu jedem Kern angeordneter L1-Cachespeicher, unter einer Gruppe von Kernen gemeinsam genutzter L2-Cachespeicher, Hauptspeicher und Festplattendatenspeicher, die hier in der Hierarchiereihenfolge von niedrig zu hoch aufgeführt sind. Das Verfahren beinhaltet in einer Ausführungsform ein Ausführen einer Vielzahl von Threads jeweils in der Vielzahl von Hardwarekontexten, nutzt die Speicherhierarchie, um mindestens einen der Threads spekulativ zu machen und prüft dynamisch ein korrektes Ausführen eines Programms. Das Verfahren der vorliegenden Offenbarung kann in einer Ausführungsform als eine zum Beispiel durch einen Programmierer in einen Programmcode eingefügte Anweisung initiiert oder gestartet werden. Eine Compilerlaufzeitumgebung oder ähnliches erkennt die Anweisung und aktiviert die Verfahrensweise der vorliegenden Offenbarung, die während der Programmausführung stattfindet. Zum Beispiel kann Software wie beispielsweise der Compiler (oder ähnliches) eine Markierung setzen, welche die Laufzeitumgebung des Programms erkennen kann, und die Verfahrensweise der vorliegenden Offenbarung initiieren.
  • Unter Bezugnahme auf 1 kann ein Benutzer einem Programmcode eine Anweisung für die Regionen hinzufügen, die der Benutzer bei 102 überprüfen möchte. Die Anweisung kann immer im Code verbleiben und über eine Compilermarkierung und/oder Umgebungsvariablen aktiviert oder deaktiviert werden. Wenn bei 104 die Compilermarkierung oder die Umgebungsvariable angibt, dass die Überprüfungsverfahrensweise aktiviert werden soll, veranlasst die Laufzeitumgebung bei 106 den Haupt-Thread, der den Programmcode ausführt, in das spekulative Ausführen einzutreten. In diesem Ausführungsmodus (spekulatives Ausführen) werden die Daten des Programms nicht in den Hauptspeicher ausgeschrieben. Wenn andernfalls die Compilermarkierung oder die Umgebungsvariable bei 104 angibt, dass die Überprüfungsverfahrensweise deaktiviert werden soll, kann das Programm bei 108 den herkömmlichen Ausführungspfad einschlagen.
  • Bei 110 generiert die Laufzeitumgebung einen oder mehrere Hardware-Helfer-Threads, um einen durch den Benutzer ausgewählten Satz von Prüfungen durchzuführen. Die Anzahl generierter Helfer-Threads kann von der Größe oder Charakteristik der Regionen des Programms abhängen, die für die Prüfung festgelegt sind. Bei 112 wird jeder Helfer-Thread in seinem eigenen Kontext auf einem Hardwareprozessorkern ausgeführt und läuft parallel zum Hauptprogramm-Thread. Jeder Helfer-Thread geht den Code durch (die Region, die ihm zur Prüfung zugewiesen wurde) und prüft ihn auf jegliche Fehlerbedingungen im Code. Auf diese Weise wird der Haupt-Thread durch die zusätzlichen Tasks des Prüfens auf Fehler nicht verlangsamt.
  • Wenn bei 114 ein Helfer-Thread eine Fehlerbedingung erkennt, kann der Helfer-Thread den Fehler der Laufzeit mitteilen, die wiederum das Ausführen des Haupt-Thread anhalten kann. Debuginformationen können gesammelt und protokolliert (gespeichert) werden, und die Kontrolle kann dem Benutzer zurückgegeben werden, um den erkannten Fehler zu analysieren, z. B. wie bei 118 und 120 gezeigt. Wenn das Ausführen des Haupt-Thread angehalten ist, kann die Laufzeitumgebung automatisch einen Debugger an den Haupt-Thread anhängen und die Kontrolle an den Benutzer übergeben. In einem weiteren Aspekt kann der Helfer-Thread den erkannten Fehler protokollieren, dem Haupt-Thread jedoch gestatten, mit seiner Verarbeitung fortzufahren. Dies kann der Fall sein, wenn der erkannte potenzielle Fehler für das Ausführen des Haupt-Thread nicht ernst oder kritisch ist. Diese Feststellung kann durch einen durch den Benutzer festlegbaren Satz von Einstellungen erfolgen und wird davon beeinflusst, wie ernst der erkannte Fehler ist. Für Fehler, die ernst genug sind, um nicht wiederherstellbar zu sein, oder für die der Benutzer keinen Ausnahmeabwickler bereitgestellt hat, kann das Hauptprogramm im Falle, dass die Benutzereinstellungen angeben, den Fehler zu protokollieren und fortzufahren, zum Beispiel abstürzen und anormal beendet werden, wenn das Hauptprogramm die Ausführung wieder aufnimmt.
  • Bei 116 haben alle Helfer-Threads einen sicheren Punkt erreicht, den der Haupt-Thread ohne Fehler erreichen kann, und die Helfer-Threads teilen diese Information der Laufzeitumgebung mit. Die Laufzeitumgebung prüft das Erreichen des sicheren Punktes durch den Haupt-Thread. Sobald der Haupt-Thread den sicheren Punkt erreicht, nimmt die Laufzeitumgebung den Haupt-Thread aus seinem spekulativen Ausführungsmodus. Der Zustand des Haupt-Thread (z. B. durch den Haupt-Thread während der spekulativen Ausführung bis zu diesem sicheren Punkt durchgeführte Berechnungen und Speicherschreibvorgänge) wird an den Hauptspeicher übergeben.
  • Sobald der Zustand des Haupt-Thread übergeben wurde, führt die Laufzeitumgebung den Haupt-Thread wie in 106 erneut im spekulativen Ausführungsmodus aus (in dem der Zustand des Haupt-Thread nicht an den Hauptspeicher übergeben wird). Die Laufzeitumgebung führt auch wie in 108 einen oder mehrere Helfer-Threads parallel mit dem Haupt-Thread aus. Da der Haupt-Thread spekulativ ausgeführt wird, führen die Helfer-Threads Code aus und prüfen im selben Codeblock, den der Haupt-Thread ausführt. Diese Helfer-Threads können auf einen durch einen Benutzer auswählbaren Satz von Bedingungen hin prüfen, wie beispielsweise Teilen durch Null, außerhalb eines Arrays liegende gültige Bereiche, Nullzeiger-Dereferenzierung, Speicherlecks, Referenzierung von nicht definierten Speichern oder jede beliebige der zusätzlichen Prüfungen (zum Beispiel die in den bestehenden Werkzeugen bereitgestellten).
  • Die Verarbeitung wird mit 112 fortgesetzt, wo der Haupt-Thread spekulativ ausgeführt wird und die Helfer-Threads parallel mit dem Haupt-Thread ausgeführt werden und ein Prüfen auf Fehler vornehmen. Die Schritte 106 bis 116 können fortgesetzt werden, bis der Haupt-Thread auf eine Benutzeranweisung trifft, die das Ende der zu prüfenden Coderegion anzeigt, oder bis das Programm beendet wird, z. B. wie bei 122 gezeigt.
  • Bei sicheren Punkten oder einem stabilen Punkt, an denen der Haupt-Thread seinen spekulativen Ausführungsmodus beenden kann, kann es sich um Punkte im Code (Programm) handeln, die Nachrichtenanweisungen oder Eingabe/Ausgabe-Operationen durchführen. Das Ende der Prüfregion oder des Programms kann ebenso als sicherer Punkt angesehen werden. Ein Ende eines Grundblocks der Programmausführung kann ebenso als ein sicherer Punkt festgelegt werden. Die Punkte im Programm, an denen es Aktionen durchführt, die Konsequenzen außerhalb des Knotens (Chips) haben, wie beispielsweise das Senden einer Nachricht, das Durchführen von E/A oder das Überlaufen der Cacheebene, in welcher der spekulative Zustand gespeichert ist, werden in einer Ausführungsform der vorliegenden Offenbarung auch als sichere Punkte ausgewählt. Bei den ersten beiden handelt es sich um klar definierte Punkte im Programm, der letztere kann unbekannt sein. In einer Ausführungsform der vorliegenden Offenbarung kann die Hardware jedoch ein Signal bereitstellen, wenn sie einen Eintrag vom Überlaufen des L2-Cachespeichers entfernt ist, so dass die Laufzeit einen sicheren Punkt an dem Ort in die Programmausführung hineinzwängen kann.
  • Weitere sichere Punkte können bestimmt werden. Häufigere sichere Punkte sorgen für weniger Versatz zwischen dem Haupt-Thread und den Helfer-Threads und machen es unwahrscheinlicher, dass ein externes Ereignis eine Beendigung des Prüfens verursacht. Es kann jedoch zusätzlich zum Synchronisieren der Helfer-Threads ein mit dem Verlassen der Spekulation und dem Wiedereintreten in diese verbundener Aufwand vorhanden sein.
  • In einem weiteren Aspekt kann ein Bericht der durch die Helfer-Threads erkannten Fehler erzeugt werden.
  • 2 zeigt ein Blockschaubild, das ein System für feingranulares spekulatives Hardwareausführen für ein Prüfen der Programmkorrektheit in einer Ausführungsform der vorliegenden Offenbarung veranschaulicht. Ein Chip mit integrierter Schaltung 200 kann eine Vielzahl von Kernen enthalten (die auch als Verarbeitungskerne bezeichnet werden). Ein Kern 202 kann eine Funktionseinheit und Cachespeicher 204, zum Beispiel einen lokal zu diesem Kern 202 angeordneten L1-Cachespeicher, enthalten. Jeder Kern ist in der Lage, eine Vielzahl von Hardware-Threads auszuführen. Zum Beispiel ist der Kern 202 in der Lage, einen Hardware-Thread 218 auszuführen. Gleichermaßen kann ein Kern 206 eine Funktionseinheit und Cachespeicher 208, zum Beispiel einen lokal zu diesem Kern 206 angeordneten L1-Cachespeicher, enthalten. Der Kern 206 ist in der Lage, einen Hardware-Thread 220 auszuführen. Desgleichen kann ein Kern 210 eine Funktionseinheit und Cachespeicher 212, zum Beispiel einen lokal zu diesem Kern 210 angeordneten L1-Cachespeicher, enthalten. Der Kern 206 ist in der Lage, eine Vielzahl von Hardware-Threads 212 auszuführen. Der Chip 200 kann zudem einen lokal zum Chip 200 angeordneten Speicher 214, zum Beispiel einen L2-Cachespeicher, enthalten, der unter der Vielzahl von Kernen auf dem Chip gemeinsam genutzt werden kann. Der Chip ist mit einem Hauptspeicher 216 verbunden, bei dem es sich zum Beispiel um einen synchronen dynamischen Speicher mit wahlfreiem Zugriff (synchronous dynamic random access memory (SDRAM)) handeln kann. Der Chip 200 kann Teil eines Computersystems sein, das eine Vielzahl derselben oder unterschiedlicher integrierter Schaltungen enthält, die über eine Netzwerkverbindung verbunden sind.
  • Ein Haupt-Thread eines Programms, das überprüft wird, kann als ein einziger Hardware-Thread, z. B. 218 auf Kern 202, ausgeführt werden. Helfer-Threads können erzeugt und auf demselben oder einem anderen Kern ausgeführt werden. Zum Beispiel kann ein Helfer-Thread 220 auf dem Kern 202 oder 208 ausgeführt werden; ein weiterer Helfer-Thread 222 kann auf dem Kern 210 ausgeführt werden. Der Haupt-Thread 218 wird durch die Programmanweisungen in einem spekulativen Ausführungsmodus ausgeführt. Das bedeutet, die während dieses Ausführungsmodus durchgeführten Datenschreibvorgänge werden nicht an den Speicher übergeben. Gleichzeitig oder parallel werden ein oder mehrere Helfer-Threads 220, 222 durch Teile der Programmanweisungen ausgeführt und prüfen auf Fehlerbedingungen im Code. Wenn ein Helfer-Thread (z. B. 220 und/oder 222) einen Fehler im Code erkennt, protokolliert der Helfer-Thread die Fehlerbedingung und sendet eine Benachrichtigung des Fehlers an die Laufzeit, die wiederum das Ausführen des Haupt-Thread abhängig vom Typ des erkannten Fehlern anhalten kann.
  • Sobald die Helfer-Threads (220, 222) an einen sicheren Punkt oder einen stabilen Punkt im Programm (Code) gelangen, ohne einen Fehler zu erkennen, werden sie entweder beendet oder warten, bis der Haupt-Thread denselben sicheren Punkt erreicht. Nachdem der Haupt-Thread den sicheren Punkt erreicht, wird der Haupt-Thread aus dem spekulativen Ausführungsmodus herausgenommen, und der Zustand des Haupt-Thread wird dem Hauptspeicher 216 vom lokalen Speicher 214 übergeben. Sobald der Zustand dem Hauptspeicher 216 übergeben wurde, wird der Haupt-Thread erneut in einen spekulativen Ausführungsmodus versetzt, wobei der Zustand des Haupt-Thread nicht in den Hauptspeicher 216 ausgeschrieben, sondern nur im lokalen Speicher 214 und bis die Helfer-Threads den nächsten sicheren Punkt erreichen gespeichert wird. Dieser Prozess wird bis zum Ende des Codes oder bis zum Erreichen des Endes der Prüfregion beim Ausführen des Programms fortgesetzt.
  • Die Leistungsnachteile des Wechselns in die Spekulation und aus ihr heraus sind relativ klein. Dies ermöglicht eine rasche und häufige Synchronisierung zwischen den Helfer-Threads und dem Haupt-Thread. Einige der Helfer-Threads können sogar auf demselben Kern, jedoch anderen Hardware-Threads als der Haupt-Thread, ausgeführt werden. Mit diesen Mechanismen werden aufgrund der einfachen Erzeugung und Wiederintegration eines Helfer-Thread in den Haupt-Thread neue Fähigkeiten ermöglicht. Helfer-Threads können bei entstehendem Bedarf dynamisch erzeugt werden, anstatt im Voraus und mit seltener Interaktion geplant zu werden. Zusätzlich zum Standardtyp von Prüfungen ermöglicht dies das Instanziieren von flinkeren und reaktionsfreudigeren Prüfungen.
  • 3 veranschaulicht einen Haupt-Thread und einen Helfer-Thread, die parallel ausgeführt werden. Der Haupt-Thread führt einen Codeblock aus, bis ein sicherer Punkt spekulativ erreicht wird. Der Helfer-Thread prüft auf Fehlerbedingungen und ermittelt einen sicheren Punkt, an dem der Haupt-Thread aus dem spekulativen Ausführungsmodus herausgenommen wird. Der Zustand des Haupt-Thread während des spekulativen Ausführens wird an den Hauptspeicher übergeben. Dann wird durch den Haupt-Thread der nächste Codeblock erneut im spekulativen Ausführungsmodus ausgeführt, während der Helfer-Thread diesen Codeblock auf Fehlerbedingungen prüft. Am nächsten sicheren Punkt wird der Haupt-Thread aus dem spekulativen Ausführungsmodus herausgenommen, und seine Zustände werden dem Hauptspeicher übergeben. Der Prozess wird bis zum Ende des Codes oder dem Ende der Prüfregion im Code fortgesetzt.
  • Wie für den Fachmann ersichtlich ist, können Aspekte der vorliegenden Erfindung als ein System, Verfahren, oder Computerprogrammprodukt ausgebildet werden. Dementsprechend können Aspekte der vorliegenden Erfindung in Form einer vollständigen Hardwareausführungsform, einer vollständigen Softwareausführungsform (darunter Firmware, residente Software, Mikrocode usw.) oder in einer Ausführungsform ausgebildet werden, die Software- und Hardwareaspekte kombiniert, was hierin sämtlich allgemein als „Schaltung”, „Modul” oder „System” bezeichnet sein kann. Weiterhin können Aspekte der vorliegenden Erfindung in Form eines Computerprogrammprodukts ausgebildet werden, das in einem oder mehreren computerlesbaren Medien mit darauf enthaltenem computerlesbarem Programmcode enthalten sein kann.
  • Jede beliebige Kombination aus einem oder mehreren computerlesbaren Medien kann verwendet werden. Bei dem computerlesbaren Medium kann es sich um ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium handeln. Bei einem computerlesbaren Speichermedium kann es sich zum Beispiel, ohne auf diese beschränkt zu sein, um ein System, eine Vorrichtung oder eine Einheit elektronischer, magnetischer, optischer, elektromagnetischer, Infrarot oder Halbleiter verwendender Art sowie jede beliebige geeignete Kombination des Vorgenannten handeln. Zu spezielleren Beispielen für das computerlesbare Speichermedium kann Folgendes gehören (nicht abschließende Liste): eine elektrische Verbindung mit einer oder mehreren Leitungen, eine transportable Computerdiskette, eine Festplatte, ein Speicher mit wahlfreiem Zugriff (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein transportabler Compact-Disk-Nur-Lese-Speicher (CD-ROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder eine beliebige geeignete Kombination des Vorgenannten. Im Kontext dieses Dokuments kann es sich bei einem computerlesbaren Speichermedium um jedes gegenständliche Medium handeln, das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Ausführung von Anweisungen beinhalten oder speichern kann.
  • Zu einem computerlesbaren Signalmedium kann ein verbreitetes Datensignal mit darin zum Beispiel in einem Basisband oder als Teil einer Trägerwelle ausgebildetem computerlesbarem Programmcode zählen. Solch ein verbreitetes Signal kann in jeder beliebigen einer Vielfalt von Formen ausgebildet werden, darunter, ohne auf diese beschränkt zu sein, elektromagnetische, optische oder jede geeignete Kombination davon. Bei einem computerlesbaren Signalmedium kann es sich um jedes computerlesbare Medium handeln, das kein computerlesbares Speichermedium ist und das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Ausführung von Anweisungen übertragen, verbreiten oder transportieren kann.
  • Der in einem computerlesbaren Medium enthaltene Programmcode kann mittels eines beliebigen geeigneten Mediums übertragen werden, einschließlich, ohne auf diese beschränkt zu sein, kabellose, kabelgebundene, Lichtwellenleiterkabel, Hochfrequenz (HF) usw. oder eine beliebige geeignete Kombination des Vorgenannten.
  • Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in jeder Kombination einer oder mehrerer Programmiersprachen, darunter eine objektorientierte Programmiersprache wie Java, Smalltalk, C++ oder Ähnliches und herkömmliche verfahrensorientierte Programmiersprachen wie die Programmiersprache „C” oder ähnliche Programmiersprachen, eine Skriptsprache wie Perl, VBS oder ähnliche Sprachen und/oder funktionale Sprachen wie Lisp und ML und logikorientierte Sprachen wie Prolog, geschrieben sein. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In letzterem Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jede beliebige Art von Netzwerk, darunter ein lokales Netzwerk (local area network (LAN)) oder ein Weitverkehrsnetzwerk (wide area network (WAN)) verbunden sein, oder es kann eine Verbindung zu einem externen Computer (zum Beispiel mittels eines Internetdienstanbieters über das Internet) hergestellt werden.
  • Aspekte der vorliegenden Erfindung werden unter Bezugnahme auf Abbildungen von Ablaufplänen und/oder Blockschaubildern von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Abbildungen von Ablaufplänen und/oder der Blockschaubilder sowie Kombinationen von Blöcken in den Abbildungen von Ablaufplänen und/oder den Blockschaubildern durch Computerprogrammanweisungen realisiert werden kann. Diese Computerprogrammanweisungen können einem Prozessor eines universellen Computers, eines zweckbestimmten Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine so zu erzeugen, dass die Anweisungen, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, ein Mittel zum Realisieren der im Block oder in den Blöcken des Ablaufplans und/oder Blockschaubildes angegebenen Funktionen/Handlungen erzeugen.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert sein, das einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten anleiten kann, auf eine bestimmte Weise zu funktionieren, so dass die in dem computerlesbaren Medium gespeicherten Anweisungen einen Herstellungsartikel einschließlich Anweisungen erzeugen, welche die im Block oder in den Blöcken des Ablaufplans und/oder des Blockschaubildes angegebene Funktion/Handlung ausführen.
  • Die Computerprogrammanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten geladen werden, um eine Reihe von auf dem Computer, der anderen programmierbaren Vorrichtung oder den anderen Einheiten auszuführenden Operationsschritten hervorzurufen, um einen auf dem Computer realisierten Prozess so zu erzeugen, dass die auf dem Computer oder der anderen programmierbaren Vorrichtung ausgeführten Anweisungen Prozesse zum Realisieren der im Block oder in den Blöcken des Ablaufplans und/oder Blockschaubildes angegebenen Funktionen/Handlungen bereitstellen.
  • Der Ablaufplan und die Blockschaubilder in den Figuren veranschaulichen die Architektur, Funktionalität und die Arbeitsweise möglicher Realisierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedener Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block im Ablaufplan oder den Blockschaubildern für ein Modul, ein Segment oder einen Codeabschnitt stehen, der eine oder mehrere ausführbare Anweisungen zum Realisieren der angegebenen logischen Funktion(en) aufweist. Es soll zudem angemerkt werden, dass bei einigen alternativen Realisierungen die im Block angegebenen Funktionen in anderer Reihenfolge als der in den Figuren angegebenen auftreten können. Zum Beispiel können zwei aufeinander folgend abgebildete Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal abhängig von der betreffenden Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es wird ebenfalls angemerkt, dass jeder Block der Blockschaubilder und/oder Abbildung von Ablaufplänen und Kombinationen von Blöcken in den Blockschaubildern und/oder der Abbildung von Ablaufplänen durch zweckbestimmte hardwaregestützte Systeme oder Kombinationen von zweckbestimmter Hardware und Computeranweisungen realisiert werden kann, welche die angegebenen Funktionen oder Handlungen durchführen.
  • Die Systeme und Verfahrensweisen der vorliegenden Offenbarung können auf einem Computersystem ausgeführt werden, das eine Verarbeitungseinheit beinhaltet, die einen oder mehrere Prozessoren und/oder Kerne, Arbeitsspeicher und andere (in der Zeichnung nicht ausdrücklich gezeigte) Systemkomponenten beherbergt, die ein Computerverarbeitungssystem oder einen Computer realisieren, der ein Computerprogrammprodukt ausführen kann. Das Computerprogrammprodukt kann Medien, zum Beispiel eine Festplatte, ein kompaktes Speichermedium wie eine Compact Disk oder andere Speichereinheiten, umfassen, die durch die Verarbeitungseinheit durch jede beliebige dem befähigten Handwerker bekannte oder in Zukunft bekannte Technik gelesen werden kann, um dem Verarbeitungssystem das Computerprogrammprodukt für die Ausführung bereitzustellen.
  • Das Computerprogrammprodukt kann all die entsprechenden Merkmale umfassen, welche die Realisierung der hierin beschriebenen Verfahrensweisen ermöglichen und die – bei Laden in ein Computersystem – in der Lage sind, die Verfahren auszuführen. „Computerprogramm”, „Softwareprogramm”, „Programm” oder „Software” bedeuten im vorliegenden Kontext jeglichen Ausdruck eines Satzes von Anweisungen in jeder beliebigen Sprache, jedem beliebigen Code oder jeder beliebigen Notation, dessen Absicht es ist, ein System mit der Fähigkeit zur Datenverarbeitung dazu zu veranlassen, eine bestimmte Funktion entweder direkt oder nach einem oder beiden der folgenden Elemente durchzuführen: (a) Konvertierung in eine andere Sprache, einen anderen Code oder eine andere Notation; und/oder (b) Reproduktion in einer anderen materiellen Form.
  • Das Computerverarbeitungssystem, welches das System und das Verfahren der vorliegenden Offenbarung ausführt, kann zudem eine Anzeigeeinheit wie einen Monitor oder Anzeigebildschirm zum Darstellen von Ausgabeanzeigen und Bereitstellen einer Anzeige beinhalten, durch die der Benutzer Daten eingeben und mit dem Verarbeitungssystem zum Beispiel in Zusammenarbeit mit Eingabeeinheiten wie der Tastatur- und Mauseinheit oder einer Zeigeeinheit interagieren kann. Das Computerverarbeitungssystem kann auch direkt oder über Fernverbindungen mit einer oder mehreren Peripherieeinheiten wie beispielsweise einem Drucker, Scanner, Lautsprecher und jeden beliebigen anderen Einheiten verbunden oder gekoppelt sein. Das Computerverarbeitungssystem kann mit einem oder mehreren Verarbeitungssystemen wie beispielsweise einem Server, einem anderen entfernt angeordneten Computerverarbeitungssystem, Netzwerkspeichereinheiten über ein oder mehrere beliebige der folgenden Elemente verbunden oder gekoppelt sein: lokales Ethernet, eine WAN-Verbindung, Internet usw. oder über beliebige andere Netzwerkverfahrensweisen, die unterschiedliche Computersysteme verbinden und ihnen den Datenaustausch miteinander ermöglichen. Die vielfältigen Funktionalitäten und Module der Systeme und Verfahren der vorliegenden Offenbarung können auf verschiedenen Verarbeitungssystemen verteilt oder auf jeder beliebigen Einzelplattform ausgeführt werden, die zu Beispiel auf lokal gespeicherte oder auf dem Netzwerk verteilt gespeicherte Daten zugreifen.
  • Die hierin verwendete Terminologie dient lediglich dem Zwecke des Beschreibens besonderer Ausführungsformen und ist nicht als die Erfindung einschränkend aufzufassen. Die hierin verwendeten Singularformen „ein”, „eine” und „der”, „die”, „das” sowie deren Deklinationen sollen ebenso die Pluralformen einschließen, es sei denn dies ist im Kontext deutlich anderweitig angegeben. Es versteht sich weiterhin, dass die Begriffe „aufweist” und/oder „aufweisend” in diesem Dokument das Vorhandensein von angegebenen Merkmalen, ganzen Zahlen, Schritten, Vorgängen, Elementen und/oder Komponenten angeben, jedoch nicht das Vorhandensein oder Hinzufügen eines oder mehrerer Merkmale, ganzer Zahlen, Schritte, Vorgänge, Elemente, Komponenten und/oder Gruppen davon ausschließen.
  • Die entsprechenden Strukturen, Materialien, Handlungen und Entsprechungen aller Mittel oder Schritte sowie Funktionselemente in den nachfolgenden Ansprüchen, sofern vorhanden, sollen alle Strukturen, Materialien oder Handlungen zum Durchführen der Funktion in Kombination mit anderen beanspruchten Elementen, wie sie im Einzelnen beansprucht sind, einschließen. Die Beschreibung der vorliegenden Erfindung wurde zum Zwecke der Veranschaulichung und Beschreibung vorgelegt, ist jedoch nicht als erschöpfend oder auf die Erfindung in der offenbarten Form beschränkt aufzufassen. Viele Änderungen und Variationen sind für den Fachmann naheliegend, ohne vom Umfang und Geist der Erfindung abzuweichen. Die Ausführungsform wurde gewählt und beschrieben, um die Grundgedanken der Erfindung und die praktische Anwendung am besten zu erklären und anderen Fachleuten ein Verständnis der Erfindung für vielfältige Ausführungsformen mit vielfältigen Änderungen, wie sie für den besonderen betrachteten Gebrauch geeignet sind, zu ermöglichen.
  • Vielfältige Aspekte der vorliegenden Offenbarung können als ein in einem computer- oder maschinenlesbaren oder durch einen Computer- oder eine Maschine verwendbaren Medium enthaltenes Programm, eine solche Software oder solche Computeranweisungen ausgeführt werden, die den Computer oder die Maschine bei Ausführung auf dem Computer, Prozessor und/oder der Maschine dazu veranlassen, die Schritte des Verfahrens durchzuführen. Eine durch eine Maschine lesbare Programmspeichereinheit, die ein durch die Maschine ausführbares Anweisungsprogramm gegenständlich beinhaltet, das dazu dient, vielfältige in der vorliegenden Offenbarung beschriebene Funktionalitäten und Verfahren durchzuführen, wird ebenfalls bereitgestellt.
  • Das System und das Verfahren der vorliegenden Offenbarung können auf einem universellen Computer oder einem zweckbestimmten Computersystem realisiert und ausgeführt werden. Bei dem Computersystem kann es sich um jeden beliebigen Typ bekannter oder in Zukunft bekannter Systeme handeln und es kann typischerweise einen Prozessor, eine Arbeitsspeichereinheit, eine Datenspeichereinheit, Eingabe/Ausgabe-Einheiten, interne Busse und/oder eine Datenübertragungsschnittstelle zum Kommunizieren mit anderen Computersystemen in Verbindung mit Datenübertragungshardware und -software usw. beinhalten.
  • Die in der vorliegenden Anmeldung möglicherweise verwendeten Begriffe „Computersystem” und „Computernetzwerk” können eine Vielzahl von Kombinationen fest eingebauter und/oder transportabler Computerhardware, -software, Peripherieeinheiten und Speichereinheiten beinhalten. Das Computersystem kann eine Vielzahl einzelner Komponenten beinhalten, die über ein Netzwerk oder anderweitig verbunden sind, um zusammenzuarbeiten, oder es kann eine oder mehrere Einzelkomponenten beinhalten. Die Hardware- und Softwarekomponenten des Computersystems der vorliegenden Anmeldung können in fest eingebauten und transportablen Geräten wie einem Arbeitsplatzrechner (desktop), Laptop und/oder Server enthalten sein oder diese enthalten. Bei einem Modul kann es sich um eine Komponente einer Einheit, Software, ein Programm oder System handeln, das „Funktionalität” realisiert, die als Software, Hardware, Firmware, elektronischer Schaltung oder usw. ausgeführt sein kann.
  • Die vorstehend beschriebenen Ausführungsformen stellen veranschaulichende Beispiele dar und sind nicht so anzusehen, dass die vorliegende Erfindung auf diese speziellen Ausführungsformen beschränkt ist. Daher können durch den Fachmann vielfältige Änderungen und Modifikationen vorgenommen werden, ohne vom Geist oder Umfang der Erfindung, wie sie in den angehängten Ansprüchen festgelegt ist, abzuweichen.

Claims (21)

  1. Verfahren zum Prüfen der Programmkorrektheit, aufweisend: Ausführen eines Programms auf einem Haupt-Hardware-Thread in einem spekulativen Ausführungsmodus, in dem der Zustand des Haupt-Hardware-Thread nicht an den Hauptspeicher übergeben wird, wobei der Haupt-Hardware-Thread in einem Hardwareausführungskontext auf einem Computersystem ausgeführt wird, das einen Computerchip mit einer Vielzahl von Hardwareausführungskontexten besitzt; Ausführen von Korrektheitsprüfungen durch eine Vielzahl von Helfer-Threads, wobei jeder Helfer-Thread auf dem Chip in einem separaten Hardwareausführungskontext parallel mit dem Haupt-Hardware-Thread ausgeführt wird, wobei die Korrektheitsprüfungen einen sicheren Punkt im Programm ermitteln, bis zu dem durch den Haupt-Hardware-Thread ausgeführte Operationen korrekt sind; und Ändern des Ausführungsmodus des Haupt-Hardware-Thread am sicheren Punkt in „nicht-spekulativ”.
  2. Verfahren nach Anspruch 1, wobei das Ändern des Ausführungsmodus des Haupt-Hardware-Thread am sicheren Punkt in „nicht-spekulativ” weiterhin ein Übergeben aller Zustände des Haupt-Hardware-Thread an den Hauptspeicher aufweist.
  3. Verfahren nach Anspruch 2, weiterhin beinhaltend: Zurückändern des Haupt-Hardware-Thread in den spekulativen Ausführungsmodus und Fortsetzen des Ausführens der Korrektheitsprüfungen durch die Vielzahl von Helfer-Threads, bis ein nächster sicherer Punkt erreicht wird, wobei der Haupt-Hardware-Thread in den nicht-spekulativen Ausführungsmodus geändert wird.
  4. Verfahren nach Anspruch 2, wobei der Zustand des Haupt-Hardware-Thread während des spekulativen Ausführens in einem lokal zum Chip angeordneten Cachespeicher gespeichert wird.
  5. Verfahren nach Anspruch 1, wobei der sichere Punkt als ein Ende eines Programmblocks, ein Senden einer Nachricht, eine E/A-Operation, ein Überlaufen des Cachespeichers oder Kombinationen davon festgelegt wird.
  6. Verfahren nach Anspruch 1, wobei die Schritte als Reaktion auf ein Erkennen einer Benutzeranweisung in einem Compiler durchgeführt werden, um das Programm zu überprüfen.
  7. Verfahren nach Anspruch 1, wobei der Haupt-Hardware-Thread als Reaktion auf das Erkennen eines Fehlers durch einen oder die Vielzahl von Helfer-Threads das Ausführen des Programms anhält.
  8. Verfahren nach Anspruch 1, wobei die Schritte wiederholt werden, bis das Programm beendet wird oder ein Ende der Region zum Prüfen der Korrektheit im Programm erreicht wird.
  9. Verfahren nach Anspruch 1, wobei die Korrektheitsprüfungen ein Prüfen auf ein Teilen durch Null, außerhalb des Arrays liegende gültige Bereiche, Nullzeiger-Dereferenzierungen, Speicherlecks, Referenzierung von nicht definierten Speichern oder Kombinationen davon beinhaltet.
  10. Computerlesbares Speichermedium, in dem ein durch eine Maschine ausführbares Anweisungsprogramm zum Durchführen eines Verfahrens des Prüfens der Programmkorrektheit gespeichert ist, aufweisend: Ausführen eines Programms auf einem Haupt-Hardware-Thread in einem spekulativen Ausführungsmodus, in dem der Zustand des Haupt-Hardware-Thread nicht an den Hauptspeicher übergeben wird, wobei der Haupt-Hardware-Thread in einem Hardwareausführungskontext auf einem Computersystem ausgeführt wird, das einen Computerchip mit einer Vielzahl von Hardwareausführungskontexten besitzt; Ausführen von Korrektheitsprüfungen durch eine Vielzahl von Helfer-Threads, wobei jeder Helfer-Thread auf dem Chip in einem separaten Hardwareausführungskontext parallel mit dem Haupt-Hardware-Thread ausgeführt wird, wobei die Korrektheitsprüfungen einen sicheren Punkt im Programm ermitteln, bis zu dem durch den Haupt-Hardware-Thread ausgeführte Operationen korrekt sind; und Ändern des Ausführungsmodus des Haupt-Hardware-Thread am sicheren Punkt in „nicht-spekulativ”.
  11. Computerlesbares Speichermedium nach Anspruch 10, wobei das Ändern des Ausführungsmodus des Haupt-Hardware-Thread am sicheren Punkt in „nicht-spekulativ” weiterhin ein Übergeben aller Zustände des Haupt-Hardware-Thread an den Hauptspeicher aufweist.
  12. Computerlesbares Speichermedium nach Anspruch 11, weiterhin aufweisend: Zurückändern des Haupt-Hardware-Thread in den spekulativen Ausführungsmodus und Fortsetzen des Ausführens der Korrektheitsprüfungen durch die Vielzahl von Helfer-Threads, bis ein nächster sicherer Punkt erreicht ist, wobei der Haupt-Hardware-Thread in den nicht-spekulativen Ausführungsmodus geändert wird.
  13. Computerlesbares Speichermedium nach Anspruch 12, wobei der Zustand des Haupt-Hardware-Thread während des spekulativen Ausführens in einem lokal zum Chip angeordneten Cachespeicher gespeichert wird.
  14. Computerlesbares Speichermedium nach Anspruch 10, wobei der sichere Punkt als ein Ende eines Programmblocks, ein Senden einer Nachricht, eine E/A-Operation oder Kombinationen davon festgelegt wird.
  15. Computerlesbares Speichermedium nach Anspruch 10, wobei die Schritte als Reaktion auf ein Erkennen einer Benutzeranweisung in einem Compiler durchgeführt werden, um das Programm zu überprüfen.
  16. Computerlesbares Speichermedium nach Anspruch 10, wobei der Haupt-Hardware-Thread als Reaktion auf das Erkennen eines Fehlers durch einen oder die Vielzahl von Helfer-Threads das Ausführen des Programms anhält.
  17. Computerlesbares Speichermedium nach Anspruch 10, wobei die Schritte wiederholt werden, bis das Programm beendet wird oder ein Ende der Region zum Prüfen der Korrektheit im Programm erreicht wird.
  18. System zum Prüfen der Programmkorrektheit, aufweisend: eine Vielzahl von Hardwareausführungskontexten auf einem Computerchip; einen Haupt-Hardware-Thread, der ein Programm in einem ersten Hardwareausführungskontext der Vielzahl von Hardwareausführungskontexten in einem spekulativen Ausführungsmodus ausführt, wobei der Zustand des Haupt-Hardware-Thread nicht an den Hauptspeicher übergeben wird; und eine Vielzahl von Helfer-Threads, die ein Prüfen auf Programmkorrektheit auf einem oder mehreren zweiten Hardwareausführungskontexten der Vielzahl von Hardwareausführungskontexten ausführt, wobei die Vielzahl von Helfer-Threads in der Lage ist, einen sicheren Punkt im Programm zu ermitteln, bis zu dem durch den Haupt-Hardware-Thread ausgeführte Operationen korrekt sind, wobei der Ausführungsmodus des Haupt-Hardware-Thread am sicheren Punkt in „nicht-spekulativ” geändert wird.
  19. System nach Anspruch 18, weiterhin aufweisend: eine Speicherhierarchie, die mindestens einen lokal zum Chip und zum Hauptspeicher angeordneten Cachespeicher enthält, wobei der Zustand des Haupt-Hardware-Thread während des spekulativen Ausführens im Cachespeicher gespeichert wird und erst an den Hauptspeicher übergeben wird, nachdem der Ausführungsmodus des Haupt-Hardware-Thread in „nicht-spekulativ” geändert wurde.
  20. System nach Anspruch 19, wobei der Ausführungsmodus des Haupt-Hardware-Thread in den spekulativen Ausführungsmodus zurückgeändert wird und die Vielzahl von Helfer-Threads mit dem Ausführen des korrekten Prüfens fortfährt, bis der nächste sichere Punkt ermittelt wird.
  21. System nach Anspruch 20, wobei der sichere Punkt als ein Ende eines Programmblocks, ein Senden einer Nachricht, eine E/A-Operation oder Kombinationen davon festgelegt wird.
DE112011104830T 2011-02-03 2011-11-21 Ein Verfahren zum Sicherstellen der Programmkorrektheit unter Verwendung von feingranularem spekulativem Hardwareausführen Ceased DE112011104830T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/020,228 2011-02-03
US13/020,228 US9195550B2 (en) 2011-02-03 2011-02-03 Method for guaranteeing program correctness using fine-grained hardware speculative execution
PCT/US2011/061683 WO2012106023A1 (en) 2011-02-03 2011-11-21 A method for guaranteeing program correctness using fine-grained hardware speculative execution

Publications (1)

Publication Number Publication Date
DE112011104830T5 true DE112011104830T5 (de) 2013-10-31

Family

ID=46601507

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011104830T Ceased DE112011104830T5 (de) 2011-02-03 2011-11-21 Ein Verfahren zum Sicherstellen der Programmkorrektheit unter Verwendung von feingranularem spekulativem Hardwareausführen

Country Status (4)

Country Link
US (1) US9195550B2 (de)
DE (1) DE112011104830T5 (de)
GB (1) GB2502730B (de)
WO (1) WO2012106023A1 (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5441984B2 (ja) * 2011-11-08 2014-03-12 シャープ株式会社 電子機器システム、電子機器及び記憶媒体
US8892946B2 (en) * 2011-12-15 2014-11-18 International Business Machines Corporation Verifying speculative multithreading in an application
US9436475B2 (en) * 2012-11-05 2016-09-06 Nvidia Corporation System and method for executing sequential code using a group of threads and single-instruction, multiple-thread processor incorporating the same
US9047403B2 (en) * 2013-02-11 2015-06-02 International Business Machines Corporation Debugger with previous version feature
JP6439559B2 (ja) * 2015-04-08 2018-12-19 富士通株式会社 計算機システム、計算機、ジョブ実行時刻予測方法及びジョブ実行時刻予測プログラム
CN111966577B (zh) * 2020-07-06 2023-09-08 北京奇艺世纪科技有限公司 一种程序稳定性检测方法及装置

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5490261A (en) 1991-04-03 1996-02-06 International Business Machines Corporation Interlock for controlling processor ownership of pipelined data for a store in cache
JP2541771B2 (ja) 1993-01-29 1996-10-09 インターナショナル・ビジネス・マシーンズ・コーポレイション 原子的メモリ参照方法及びシステム
US5434995A (en) 1993-12-10 1995-07-18 Cray Research, Inc. Barrier synchronization for distributed memory massively parallel processing systems
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
US5721921A (en) 1995-05-25 1998-02-24 Cray Research, Inc. Barrier and eureka synchronization architecture for multiprocessors
KR0170500B1 (ko) 1995-11-18 1999-03-30 양승택 멀티프로세서 시스템
JP3532037B2 (ja) 1996-07-31 2004-05-31 富士通株式会社 並列計算機
US5937194A (en) 1997-03-12 1999-08-10 International Business Machines Corporation Method of, system for, and article of manufacture for providing a generic reduction object for data parallelism
US6047316A (en) 1997-12-12 2000-04-04 Intel Corporation Multiprocessor computing apparatus having spin lock fairness
JP3482897B2 (ja) 1999-01-20 2004-01-06 日本電気株式会社 クラスタ型並列計算機システムおよびプロセッサ間バリア同期方法
US6549989B1 (en) 1999-11-09 2003-04-15 International Business Machines Corporation Extended cache coherency protocol with a “lock released” state
US6668308B2 (en) 2000-06-10 2003-12-23 Hewlett-Packard Development Company, L.P. Scalable architecture based on single-chip multiprocessing
EP1381959A4 (de) 2001-02-24 2008-10-29 Ibm Globales baumnetzwerk für datenverarbeitungsstrukturen
US6880071B2 (en) 2001-04-09 2005-04-12 Sun Microsystems, Inc. Selective signalling of later reserve location memory fault in compound compare and swap
US6574708B2 (en) 2001-05-18 2003-06-03 Broadcom Corporation Source controlled cache allocation
US7100021B1 (en) 2001-10-16 2006-08-29 Cisco Technology, Inc. Barrier synchronization mechanism for processors of a systolic array
US7657880B2 (en) 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7844801B2 (en) * 2003-07-31 2010-11-30 Intel Corporation Method and apparatus for affinity-guided speculative helper threads in chip multiprocessors
US8307194B1 (en) 2003-08-18 2012-11-06 Cray Inc. Relaxed memory consistency model
US7404067B2 (en) 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US20050097300A1 (en) 2003-10-30 2005-05-05 International Business Machines Corporation Processing system and method including a dedicated collective offload engine providing collective processing in a distributed computing environment
US7200717B2 (en) 2004-10-14 2007-04-03 International Business Machines Corporation Processor, data processing system and method for synchronizing access to data in shared memory
US7454570B2 (en) 2004-12-07 2008-11-18 International Business Machines Corporation Efficient memory update process for on-the-fly instruction translation for well behaved applications executing on a weakly-ordered processor
US7428619B2 (en) 2005-01-18 2008-09-23 Sony Computer Entertainment Inc. Methods and apparatus for providing synchronization of shared data
US20060184771A1 (en) 2005-02-11 2006-08-17 International Business Machines Mini-refresh processor recovery as bug workaround method using existing recovery hardware
US7711988B2 (en) 2005-06-15 2010-05-04 The Board Of Trustees Of The University Of Illinois Architecture support system and method for memory monitoring
US7555607B2 (en) 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
US7958513B2 (en) 2005-11-17 2011-06-07 International Business Machines Corporation Method, system and program product for communicating among processes in a symmetric multi-processing cluster environment
US20070180310A1 (en) 2006-02-02 2007-08-02 Texas Instruments, Inc. Multi-core architecture with hardware messaging
US7478197B2 (en) 2006-07-18 2009-01-13 International Business Machines Corporation Adaptive mechanisms for supplying volatile data copies in multiprocessor systems
US8056087B2 (en) 2006-09-25 2011-11-08 International Business Machines Corporation Effective use of a hardware barrier synchronization register for protocol synchronization
US7721009B2 (en) 2006-11-22 2010-05-18 International Business Machines Corporation Method for providing high performance scalable file I/O through persistent file domain and functional partitioning
US7793044B1 (en) 2007-01-16 2010-09-07 Oracle America, Inc. Efficient caching of stores in scalable chip multi-threaded systems
US20080178177A1 (en) 2007-01-19 2008-07-24 Charles Jens Archer Method and Apparatus for Operating a Massively Parallel Computer System to Utilize Idle Processor Capability at Process Synchronization Points
US8112594B2 (en) 2007-04-20 2012-02-07 The Regents Of The University Of Colorado Efficient point-to-point enqueue and dequeue communications
US8214808B2 (en) * 2007-05-07 2012-07-03 International Business Machines Corporation System and method for speculative thread assist in a heterogeneous processing environment
US8060881B2 (en) 2007-05-15 2011-11-15 Microsoft Corporation Small barrier with local spinning
JP4613247B2 (ja) 2007-06-20 2011-01-12 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
US7673011B2 (en) 2007-08-10 2010-03-02 International Business Machines Corporation Configuring compute nodes of a parallel computer in an operational group into a plurality of independent non-overlapping collective networks
US7734706B2 (en) 2007-08-22 2010-06-08 International Business Machines Corporation Line-plane broadcasting in a data communications network of a parallel computer
US8140731B2 (en) 2007-08-27 2012-03-20 International Business Machines Corporation System for data processing using a multi-tiered full-graph interconnect architecture
US7921316B2 (en) 2007-09-11 2011-04-05 International Business Machines Corporation Cluster-wide system clock in a multi-tiered full-graph interconnect architecture
US8131941B2 (en) 2007-09-21 2012-03-06 Mips Technologies, Inc. Support for multiple coherence domains
US7966459B2 (en) 2007-12-31 2011-06-21 Oracle America, Inc. System and method for supporting phased transactional memory modes
JP2009176116A (ja) 2008-01-25 2009-08-06 Univ Waseda マルチプロセッサシステムおよびマルチプロセッサシステムの同期方法
US8424082B2 (en) 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device

Also Published As

Publication number Publication date
WO2012106023A1 (en) 2012-08-09
GB2502730A (en) 2013-12-04
GB2502730B (en) 2020-01-01
US20120204065A1 (en) 2012-08-09
GB201315252D0 (en) 2013-10-09
US9195550B2 (en) 2015-11-24

Similar Documents

Publication Publication Date Title
DE112011101364B4 (de) Fehlerbehebung in Multithread-Code
DE102012215216B4 (de) Verbesserte Erfassung von Speicherauszugsdaten von Hardwareausfallmodi
DE112011105042B4 (de) Indikatoren zur Aufzeichnung einer letzten Verzweigung für einen Transaktionsspeicher
Xie et al. Acculock: Accurate and efficient detection of data races
DE102013218341B4 (de) Ersatzweise Verlagerung von Threads (Thread-Sparing) zwischen Berechnungskernen in einem Multithread-Prozessor
DE112011104830T5 (de) Ein Verfahren zum Sicherstellen der Programmkorrektheit unter Verwendung von feingranularem spekulativem Hardwareausführen
DE102013022299B3 (de) Schutz globaler Register in einem Multithreaded-Prozessor
DE112011100258T5 (de) Durchführen von aggressiven Codeoptimierungen mit einer Fähigkeit zum Annulieren derdurch die aggressiven Optimierungen vorgenommenen Änderungen
DE112009005006T5 (de) Optimierungen für ein ungebundenes transaktionales Speichersystem (UTM)
DE112013000656T5 (de) System und Verfahren zum Verringern der Speichernutzung durch optimales Platzieren von virtuellen Maschinen in einem virtualisierten Rechenzentrum
DE102016219651A1 (de) Für Vorabzugriff unempfindlicher transaktionsgebundener Speicher
DE112010003492T5 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE112006002237T5 (de) Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem
DE112013005882T5 (de) Ausführung eines Gegenverzweigungspfades auf Grundlage eines Zuverlässigkeitsschwellenwertes für eine Verzweigungsvorhersage
DE112013002040T5 (de) Transaktionsabbruchverarbeitung
DE112007001714T5 (de) Virtualisieren von Leistungszählern
DE102014116367A1 (de) Verwaltung von leistungsstufen von informationstechnologiesystemen
DE112007001245T5 (de) Fehlererkennung mit redundanten virtuellen Maschinen
DE112013002054T5 (de) Neu konfigurierbare Wiederherstellungsmodi in Hochverfügbarkeitsprozessoren
DE112005002370T5 (de) Ausführung von Kontrollbefehlen in redundanten Multithreadingumgebungen
DE112016005823T5 (de) Überwachen des betriebs eines prozessors
DE112011105692T5 (de) Verfahren und eine Vorrichtung zur Injektion von Fehlern in einen Speicherhintergrund
DE202016008043U1 (de) Vorrichtung zum Erzeugen, Erfassen, Speichern und Laden von Debugging-Informationen für gescheiterte Test-Skripts
DE112011100168B4 (de) Erfassen von Diagnosedaten in einer Datenverarbeitungsumgebung
DE102014003687A1 (de) Vorrichtung und verfahren zum schutz von digitalem inhalt

Legal Events

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