DE102022116839A1 - Programmierbare zustandsmaschine für einen hardwareleistungsmonitor - Google Patents

Programmierbare zustandsmaschine für einen hardwareleistungsmonitor Download PDF

Info

Publication number
DE102022116839A1
DE102022116839A1 DE102022116839.5A DE102022116839A DE102022116839A1 DE 102022116839 A1 DE102022116839 A1 DE 102022116839A1 DE 102022116839 A DE102022116839 A DE 102022116839A DE 102022116839 A1 DE102022116839 A1 DE 102022116839A1
Authority
DE
Germany
Prior art keywords
state
transition condition
memory
state transition
input
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
DE102022116839.5A
Other languages
English (en)
Inventor
Gongyu Zhou
Shounak Kamalapurkar
Yogesh Kulkarni
Thomas Melvin OGLETREE
Abhijat Ranade
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of DE102022116839A1 publication Critical patent/DE102022116839A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/835Timestamp
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

Eine Verarbeitungseinheit kann einen Leistungsmonitor zum Überwachen der Leistung der Verarbeitungseinheit und zugeordneter Untereinheiten umfassen. Der Leistungsmonitor kann eine Zustandsmaschine umfassen. Die Zustandsmaschine kann mittels Zustandsmaschinendateneinträge implementiert werden, die in einem dem Leistungsmonitor zugeordneten Speicher gespeichert sind. Ein Zustandsmaschinen-Dateneintrag umfasst Information, die eine Zustandsübergangsbedingung und Ausgangssignale angibt. Die Zustandsübergangsbedingung umfasst einen aktuellen Zustand und Eingangssignale, die erforderlich sind, um die Bedingung zu erfüllen. Die Ausgangssignale umfassen einen nächsten Zustand, ein oder mehrere Zähleraktionen und einen oder mehrere Trigger. Der Leistungsmonitor implementiert Logikschaltungen, die bestimmen, basierend auf Eingangssignalen und den ZustandsmaschinenDateneinträge, den nächste Zustand, in den überzugehen ist, und zugeordnete Ausgangssignale. Die Zustandsmaschinendateneinträge können von einem Benutzer geschrieben und erneut geschrieben werden.

Description

  • HINTERGRUND
  • Gebiet der Verschiedenen Ausführungsformen
  • Verschiedene Ausführungsformen betreffen im Allgemeinen Hardwareüberwachung und, genauer gesagt, eine programmierbare Zustandsmaschine für einen Hardwareleistungsmonitor.
  • Beschreibung der Verwandten Technik
  • Eine Verarbeitungseinheit kann einen integrierten Hardwarebasierten Leistungsmonitor umfassen. Der Leistungsmonitor kann Überwachung, Profilierung und Debugging der Leistung der Verarbeitungseinheit ermöglichen. Der Leistungsmonitor kann eine Zustandsmaschine implementieren, über die der Leistungsmonitor einen bestimmten Zustand basierend auf den Eingaben in den Leistungsmonitor erhält und bestimmte Operationen durchführt, die dem Zustand zugeordnet sind (e.g., Ausgabe bestimmter Signale).
  • Typischerweise ist die Zustandsmaschine als feste Logik in der gleichen Hardwarekomponente wie der Leistungsmonitor implementiert. Die Zustandsmaschine mit fester Logik nimmt vorbestimmte Eingaben von Komponenten innerhalb der Verarbeitungseinheit und Ausgaben vorbestimmte Ausgaben basierend auf den Eingaben auf. Ein Nachteil dieser Vorgehensweisen ist, dass die Zustände und Übergänge der Zustandsmaschine nach der Anfangskonfiguration nicht geändert werden können. Als Ergebnis kann die Zustandsmaschine nicht repariert werden, wenn ein Fehler in der Zustandsmaschine gefunden wird. Ferner kann die Zustandsmaschine nicht modifiziert werden, um Nutzen aus unterschiedlichen Eingangssignalkombinationen für Überwachungszwecke zu ziehen.
  • Wie das vorhergehende veranschaulicht, ist das, was in der Technik benötigt wird, wirksamere Ansätze für Betreiben einer Zustandsmaschine für einen Hardwareleistungsmonitor.
  • ZUSAMMENFASSUNG
  • Verschiedene Ausführungsformen umfassen ein Verfahren, einschließlich des Empfangens eines Satzes von einem oder mehrere Signalen; des Erzeugens einer ersten Eingabe basierend auf dem Satz von einem oder mehrere Signalen und einer ersten Eingabemaske, die einer ersten Zustandsübergangsbedingung zugeordnet ist, wobei die erste Eingabemaske und die erste Zustandsübergangsbedingung in einem ersten Dateneintrag in einem Speicher gespeichert sind, der einem Leistungsmonitor zugeordnet ist; das Bestimmens, basierend auf der ersten Eingabe und einem aktuellen Zustand, dass die erste Zustandsübergangsbedingung erfüllt ist; und als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, Übergehen des Leistungsmonitor von dem aktuellen Zustand in einen ersten Zustand, wobei der erste Zustand in dem Speicher gespeichert und der ersten Zustandsübergangsbedingung zugeordnet ist.
  • Ein technologischer Vorteil der offenbarten Techniken relativ zum Stand der Technik ist, dass eine Zustandsmaschine eines Leistungsmonitors flexibler modifiziert werden kann, um Funktionalität hinzuzufügen oder zu reparieren. Demgemäß können neue Merkmale und/oder Fehlerbehebungen eingesetzten Verarbeitungseinheiten einfacher bereitgestellt werden, um dadurch die Deaktivierung und/oder den Abbruch von Leistungsüberwachungs-Funktionalität oder sogar gesamten Verarbeitungseinheiten zu vermeiden. Ein weiterer technologische Vorteil ist, dass, weil Funktionalität und/oder Behebungen für die Zustandsmaschine einfacher bereitgestellt werden, die Merkmaldivergenz zwischen unterschiedlichen Versionen der gleichen Hardware (z.B., zwischen einer Fertigungscharge vor einer Fehlerbehebung und einer Charge nach der Fehlerbehebung) verringert wird. Diese technischen Vorteile stellen eine oder mehrere technologische Weiterentwicklungen gegenüber den Vorgehensweisen des Standes der Technik dar.
  • Figurenliste
  • Um die Art und Weise zu erläutern, in der die oben angeführten Merkmale der verschiedenen Ausführungsbeispiele im Einzelnen verstanden werden können, kann eine genauere Beschreibung der oben kurz zusammengefassten erfinderischen Konzepte anhand verschiedener Ausführungsbeispiele erfolgen, von denen einige in den beigefügten Zeichnungen gezeigt werden. Es ist jedoch darauf hinzuweisen, dass die beigefügten Zeichnungen nur typische Ausführungsbeispiele der erfinderischen Konzepte veranschaulichen und daher nicht als in irgendeiner Weise als einschränkend zu betrachten sind, und dass es andere gleichermaßen geeignete Ausführungsbeispiele gibt.
    • 1 ist ein Blockdiagramm eines Computersystems, das konfiguriert ist, um ein oder mehrere Aspekte der verschiedenen Ausführungsformen zu implementieren;
    • 2 ist ein Blockdiagramm einer Parallelverarbeitungseinheit (PPU), die in dem Parallelverarbeitungsuntersystem von 1 umfasst ist, gemäß verschiedener Ausführungsformen;
    • 3 ist ein Blockdiagramm eines allgemeinen Verarbeitungsclusters, der in der Parallelverarbeitungseinheit von 2 umfasst ist, gemäß verschiedener Ausführungsformen;
    • 4 ist ein Blockdiagramm einer Partitionseinheit, die in der PPU von 2 umfasst ist, gemäß verschiedener Ausführungsformen;
    • 5 ist ein Blockdiagramm eines Leistungsüberwachungssystems für die PPU von 2 gemäß verschiedener Ausführungsformen;
    • 6 veranschaulicht eine programmierbare Zustandsmaschine des Leistungsüberwachungssystems von 5 gemäß verschiedener Ausführungsformen;
    • 7 veranschaulicht ein Format eines Eintrags in einen inhaltsadressierbaren Speicher, der Daten speichert, die der programmierbare Zustandsmaschine von 6 zugeordnet sind, gemäß verschiedener Ausführungsformen;
    • 8 veranschaulicht ein Diagramm des Nachschlagemoduls der programmierbaren Zustandsmaschine von 6 gemäß verschiedener Ausführungsformen;
    • 9 ist ein Ablaufdiagramm von Verfahrensschritten zum Überwachen der Leistung mittels einer programmierbaren Zustandsmaschine, gemäß verschiedener Ausführungsformen; und
    • 10 veranschaulicht einen internen Logikanalysator des Leistungsüberwachungssystems von 5 gemäß verschiedener Ausführungsformen;
    • 11 veranschaulicht ein Format eines Eintrags in einem inhaltsadressierbaren Speicher, der Daten für den internen Logikanalysator von 10 speichert, gemäß einigen Ausführungsformen; und
    • 12 ist ein Ablaufdiagramm von Verfahrensschritten zum Triggern eines internen Logikanalysators mittels einer programmierbaren Zustandsmaschine gemäß verschiedenen Ausführungsformen.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründlicheres Verständnis der verschiedenen Ausführungsformen bereitzustellen. Einem Fachmann in der Technik ist es jedoch ersichtlich, dass die erfindungsgemäßen Konzepte auch ohne eines oder mehrere dieser spezifischen Details praktiziert werden können.
  • Eine Verarbeitungseinheit kann eine oder mehrere Hardwareleistungsmonitore zum Überwachen und Debugging von Einheiten oder Komponenten innerhalb der Prozessoreinheit umfassen. Ein Hardwareleistungsmonitor kann eine Zustandsmaschine implementieren, um Operationen des Leistungsmonitors zu steuern. Die Zustandsmaschine kann in einen bestimmten Zustand basierend auf Eingaben in den Leistungsmonitor und Ausgabe bestimmter Signalen basierend auf den Zustand übergehen. Diese Ausgangssignale können beispielsweise Aktionssignale zum Steuern eines oder mehrerer Zähler, eines Indikator des nächsten Zustands, in den die Zustandsmaschine übergehen wird, und/oder verschiedene Trigger umfassen (z.B., ein Design-for-Debugging (DFD) Trigger), um bestimmte Funktionen innerhalb des Leistungsmonitors und/oder anderer Einheiten zu aktivieren und/oder deaktivieren.
  • In einem herkömmlichen Hardwareleistungsmonitor ist die Zustandsmaschine ausgestaltet in und fest in der Hardwareimplementierung des Leistungsmonitors. Demgemäß weist die Zustandsmaschine ein festen Satz von Zuständen und Übergängen auf. Eine derartige Fixierung der Zustandsmaschine macht es jedoch schwierig, die Zustandsmaschine zu modifizieren, um neue Funktionalität hinzuzufügen und/oder die Zustandsmaschine zu debuggen.
  • Um sich diesen und anderen Nachteilen zu widmen, umfassen verschiedene Ausführungsformen eine programmierbare Zustandsmaschine für einen Leistungsmonitor. Die programmierbare Zustandsmaschine umfasst Information über Zustände, Übergänge und Ausgaben, die in einer Speichereinheit (z.B., einem inhaltsadressierbaren Speicher) gespeichert werden können. Die programmierbare Zustandsmaschine arbeitet durch Erzeugen einer Zustandsmaschineeingabe basierend auf einem Satz von Eingangssignalen und dann der Verarbeitung der in der Speichereinheit gespeicherten Information basierend auf der Zustandsmaschineneingabe, um den passenden Zustand, Übergang und Ausgabe zu bestimmen. Die Information in der Speichereinheit kann überschrieben werden, um neue Information über Zustände, Übergänge und/oder Ausgaben zu umfassen.
  • Außerdem kann, wie oben bemerkt, eine Verarbeitungseinheit mehrere Leistungsmonitore aufweisen und jeder Leistungsmonitor kann einen internen Logikanalysator umfassen. Der Leistungsmonitor kann eine Speichereinheit für den Leistungsmonitor und eine Speichereinheit aufweisen, die für den internen Logikanalysator spezifisch ist. Mit der Duplizierung von ähnlichen Leistungsmonitorstrukturen über die Verarbeitungseinheit hinweg, könnte die benötigte Chipfläche für die Verarbeitungseinheit ziemlich groß werden.
  • Um sich diesen und andere Nachteilen zu widmen, umfassen verschiedene Ausführungsformen einen internen Logikanalysator, der eine Speichereinheit mit der oben beschriebenen programmierbaren Zustandsmaschine gemeinsam nutzt, und ferner kann durch die oben beschriebene programmierbare Zustandsmaschine getriggert werden kann. Der interne Logikanalysator kann getriggert werden, um das Sammeln von Daten durch ein oder mehrere Ausgangssignale von einer oder mehreren programmierbare Zustandsmaschinen zu starten oder zu stoppen. Der interne Logikanalysator sammelt Daten und speichert die Daten in der gleichen Speichereinheit, wie wo die Information für die programmierbare Zustandsmaschine gespeichert ist, wobei diese Information überschrieben wird.
  • Ein technologischer Vorteil der offenbarten Techniken relativ zum Stand der Technik ist, dass mit den offenbarten Techniken eine Zustandsmaschine eines Leistungsmonitors flexibler modifiziert werden kann, um Funktionalität hinzuzufügen oder zu reparieren. Demgemäß können neue Merkmale und/oder Fehlerbehebungen ohne Weiteres eingesetzten Verarbeitungseinheiten bereitgestellt werden, um dadurch die Deaktivierung und/oder den Abbruch von Leistungsüberwachungs-funktionalität oder sogar gesamter Verarbeitungseinheiten zu vermeiden. Ein weiterer technologische Vorteil ist, dass, weil Funktionalität und/oder Behebungen für die Zustandsmaschine ohne Weiteres bereitgestellt werden, die Merkmaldivergenz zwischen unterschiedlichen Versionen der gleichen Hardware (z.B., zwischen einer Fertigungscharge vor einer Fehlerbehebung und einer Charge nach der Fehlerbehebung) verringert wird. Ein weiterer technologischer Vorteil der offenbarten Techniken ist, dass, weil der interne Logikanalysator eine Speichereinheit mit programmierbare Zustandsmaschine gemeinsam nutzt, die erforderliche Chipfläche zum Implementieren der interne Logikanalysator in dem Leistungsmonitor verringert wird. Diese technischen Vorteile stellen eine oder mehrere technologische Weiterentwicklungen gegenüber den Vorgehensweisen des Standes der Technik dar.
  • Systemübersicht
  • 1 ist ein Blockdiagramm eines Computersystems, das konfiguriert ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu implementieren. Wie gezeigt, umfasst das Computersystem 100 eine Zentralverarbeitungseinheit (CPU) 110, einen Systemspeicher 120 und ein Parallelverarbeitungsuntersystem 130, die über eine Speicherbrücke 132 miteinander gekoppelt sind. Das Parallelverarbeitungsuntersystem 130 ist über einen Kommunikationspfad 134 mit der Speicherbrücke 132 gekoppelt. Eine oder mehrere Anzeigevorrichtungen 136 können mit dem Parallelverarbeitungsuntersystem 130 gekoppelt sein. Das Computersystem 100 umfasst ferner eine Systemplatte 140, eine oder mehrere Zusatzkarten 150 und einen Netzwerkadapter 160. Die Systemplatte 140 ist mit einer E/A-Brücke 142 gekoppelt. Die E/A-Brücke 142 ist über einen Kommunikationspfad 144 mit der Speicherbrücke 132 gekoppelt und ist ebenfalls mit Eingabevorrichtungen 146 gekoppelt. Die Zusatzkarte(n) 150 und der Netzwerkadapter 160 sind über einen Schalter 148 miteinander gekoppelt, der wiederum mit der E/A-Brücke 142 gekoppelt ist.
  • Die Speicherbrücke 132 ist eine Hardware-Einheit, die Kommunikationen zwischen der CPU 110, dem Systemspeicher 120 und dem Parallelverarbeitungsuntersystem 130 zwischen anderen Komponenten des Computersystems 100 ermöglicht. Zum Beispiel könnte die Speicherbrücke 132 ein Northbridge-Chip sein. Der Kommunikationspfad 134 ist eine Datenverbindung mit hoher Geschwindigkeit und/oder hoher Bandbreite, die Kommunikationen mit geringer Latenz zwischen dem Parallelverarbeitungsuntersystem 130 und der Speicherbrücke 132 über eine oder mehrere separate Spuren hinweg ermöglicht. Der Kommunikationspfad 134 könnte z.B. eine PCIe-Verbindung (Peripheral Component Interconnect Express; PCle), ein AGP (= Accelerated Graphics Port), ein HyperTransport oder jede andere technisch realisierbare Art von Kommunikationsbus sein.
  • Die E/A-Brücke 142 ist eine Hardware-Einheit, die Eingabe- und/oder Ausgabeoperationen erleichtert, die mit der Systemplatte 140, den Eingabevorrichtungen 146, der/den Zusatzkarte(n) 150, dem Netzwerkadapter 160 und verschiedenen anderen Komponenten des Computersystems 100 durchgeführt werden. Zum Beispiel könnte die E/A-Brücke 142 ein Southbridge-Chip sein. Der Kommunikationspfad 144 ist eine Datenverbindung mit hoher Geschwindigkeit und/oder hoher Bandbreite, die Kommunikationen mit geringer Latenz zwischen der Speicherbrücke 132 und der E/A-Brücke 142 erleichtert. Der Kommunikationspfad 142 könnte zum Beispiel eine PCIe-Verbindung, ein AGP, ein HyperTransport oder jede andere technisch machbare Art von Kommunikationsbus sein. Mit der gezeigten Konfiguration kann jede Komponente, die entweder mit der Speicherbrücke 132 oder der E/A-Brücke 142 gekoppelt ist, mit jeder anderen Komponente kommunizieren, die entweder mit der Speicherbrücke 132 oder der E/A-Brücke 142 gekoppelt ist.
  • Die CPU 110 ist ein Prozessor, der konfiguriert ist, um den Gesamtbetrieb des Computersystems 100 zu koordinieren. Dabei führt die CPU 110 Anweisungen aus, um Befehle an die verschiedenen anderen Komponenten auszugeben, die in dem Computersystem 100 umfasst sind. Die CPU 110 ist ebenfalls konfiguriert, Befehle auszuführen, um Daten zu verarbeiten, die von einer der anderen in dem Computersystem 100 umfassten Komponenten, einschließlich des Systemspeichers 120 und der Systemplatte 140, erzeugt und/oder gespeichert werden. Der Systemspeicher 120 und die Systemplatte 140 sind Speichervorrichtungen, die computerlesbare Medien umfassen, die konfiguriert sind, um Daten und Softwareanwendungen zu speichern. Der Systemspeicher 120 umfasst einen Gerätetreiber 122 und einen Hypervisor 124, deren Funktionsweise nachstehend ausführlicher beschrieben wird. Das Parallelverarbeitungsuntersystem 130 umfasst eine oder mehrere Parallelverarbeitungseinheiten (PPUs), die konfiguriert sind, um über eine hochparallele Verarbeitungsarchitektur mehrere Operationen gleichzeitig auszuführen. Jede PPU umfasst eine oder mehrere Rechen-Engines, die allgemeine Rechenoperationen parallel ausführen, und/oder eine oder mehrere Graphik-Engines, die graphikorientierte Operationen in einer parallel Art und Wise ausführen. Eine gegebene PPU kann konfiguriert sein, um Pixel für die Anzeige über die Anzeigevorrichtung 136 zu erzeugen. Eine beispielhafte PPU wird nachstehend in Verbindung mit 2-4 ausführlicher beschrieben.
  • Der Gerätetreiber 122 ist eine Software-Anwendung, die dann, wenn sie von der CPU 110 ausgeführt wird, als eine Schnittstelle zwischen der CPU 110 und dem Parallelverarbeitungsuntersystem 130 fungiert. Insbesondere ermöglicht es der Gerätetreiber 122 der CPU 110, verschiedene Verarbeitungsoperationen auf das Parallelverarbeitungsuntersystem 130 zur hochparallelen Ausführung auszulagern, einschließlich allgemeiner Rechenoperationen sowie Graphikverarbeitungs-Operationen. Der Hypervisor 124 ist eine Software-Anwendung, die dann, wenn sie von der CPU 110 ausgeführt wird, verschiedene Rechen-, Graphik- und Speicherressourcen, die im dem Parallelverarbeitungsuntersystem 130 umfasst sind, partitioniert, um getrennten Benutzern eine unabhängige Nutzung dieser Ressourcen bereitzustellen.
  • In verschiedenen Ausführungsformen können einige oder alle Komponenten des Computersystems 100 in einer Cloud-Basierten Umgebung implementiert sein, die potenziell über ein großes geographisches Gebiet verteilt ist. Beispielsweise könnten verschiedene Komponenten des Computersystems 100 in geographisch weit auseinander liegenden Datenzentren eingesetzt sein. In derartigen Ausführungsformen können die verschiedenen Komponenten des Computersystems 100 über ein oder mehrere Netzwerke, einschließlich einer beliebigen Anzahl lokaler Intranets und/oder des Internets, miteinander kommunizieren. In verschiedenen anderen Ausführungsformen können bestimmte Komponenten des Computersystems 100 über ein oder mehrere virtualisierte Vorrichtungen implementiert sein. Zum Beispiel könnte die CPU 110 als eine virtualisierte Instanz einer Hardware-CPU implementiert sein. In einigen Ausführungsformen kann ein Teil oder die Gesamtheit des Parallelverarbeitungsuntersystems 130 mit einer oder mehreren anderen Komponenten des Computersystems 100 integriert sein, um einen einzigen Chip zu bilden, wie beispielsweise ein Systemauf-Chip (SoC).
  • Für den Fachmann versteht sich, dass die Architektur des Computersystems 100 flexibel genug ist, um in einem breiten Spektrum möglicher Szenarien und Anwendungsfällen implementiert werden zu können. Beispielsweise könnte das Computersystem 100 in einem Cloud-Computing-Center implementiert werden, um einem oder mehreren Benutzern allgemeine Rechenfähigkeiten und/oder allgemeine Graphikverarbeitungsfähigkeiten zur Verfügung zu stellen. Alternativ könnte das Computersystem 100 in einer Automobil-Implementierung eingesetzt werden, um Datenverarbeitungsoperationen in Zusammenhang mit Fahrzeugnavigation durchzuführen. Für den Fachmann versteht sich weiter, dass die verschiedenen Komponenten des Computersystems 100 und die Verbindungstopologie zwischen diesen Komponenten auf jede technisch machbare Weise modifiziert werden können, ohne vom Umfang und Wesen der vorliegenden Ausführungsformen abzuweichen.
  • 2 ist ein Blockdiagramm einer PPU, die in dem Parallelverarbeitungsuntersystem von 1 umfasst ist, gemäß verschiedenen Ausführungsformen. Wie gezeigt, umfasst eine PPU 200 eine E/A-Einheit 210, eine Hostschnittstelle 220, Sys-Pipes 230, ein Verarbeitungsclusterarray 240, eine Kreuzschieneneinheit 250 und eine Speicherschnittstelle 260. Die PPU 200 ist mit einem PPU-Speicher 270 gekoppelt. Jede der gezeigten Komponenten kann über jede technisch machbare Art von Hardware und/oder jede technisch machbare Kombination von Hardware und Software implementiert sein.
  • Die E/A-Einheit 210 ist über den Kommunikationspfad 134 und die Speicherbrücke 132 mit der CPU 110 von 1 gekoppelt. Die E/A-Einheit 210 ist ebenfalls an die Hostschnittstelle 220 und an die Kreuzschieneneinheit 250 gekoppelt. Die Hostschnittstelle 220 ist mit einer oder mehreren physischen Kopier-Engines (PCEs) 222 gekoppelt, die ihrerseits mit einem oder mehreren PCE-Zählern 224 gekoppelt sind. Die Hostschnittstelle 220 ist ebenfalls mit den Sys-Pipes 230 gekoppelt. Eine gegebene Sys-Pipe 230 umfasst ein Frontend 232, eine Aufgaben-/ArbeitsEinheit 234 und einen Leistungsmonitor (PM) 236 und ist mit dem Verarbeitungsclusterarray 240 gekoppelt. Das Verarbeitungsclusterarray 240 umfasst Unversalverarbeitungscluster (GPCs) 242(0) bis 242(A), wobei A eine positive ganze Zahl ist. Das Verarbeitungsclusterarray 240 ist mit der Kreuzschieneneinheit 250 gekoppelt. Die Kreuzschieneneinheit 250 ist mit der Speicherschnittstelle 260 gekoppelt. Die Speicherschnittstelle 260 umfasst Partitionseinheiten 262(0) bis 262(B), wobei B ein positiver ganzzahliger Wert ist. Jede Partitionseinheit 262 kann separat der Kreuzschieneneinheit 250 zugeordnet sein. Der PPU-Speicher 270 umfasst dynamische Direktzugriffsspeicher (DRAMs) 272(0) bis 272(C), wobei C ein positiver ganzzahliger Wert ist. Um den gleichzeitigen Betrieb in mehreren Verarbeitungskontexten zu erleichtern, sind verschiedene Einheiten innerhalb der PPU 200 wie folgt repliziert: (a) die Hostschnittstelle 220 umfasst PBDMAs 520(0) bis 520(7); (b) die Sys-Pipe 230 einschließlich der Sys-Pipe 230(0) bis 230(7), so dass die Aufgaben-/ArbeitsEinheit 234 SKED 500(0) bis SKED 500(7) entspricht und die Aufgaben/Arbeits-Einheit 234 CWD 560(0) bis 560(7) entspricht. Im Betrieb erhält die E/A-Einheit 210 verschiedene Arten von Befehlsdaten von der CPU 110 und verteilt diese Befehlsdaten zur Ausführung an relevante Komponenten der PPU 200. Insbesondere erhält die E/A-Einheit 210 Befehlsdaten, die Verarbeitungsaufgaben zugeordnet sind, von der CPU 110 und leitet diese Befehlsdaten an die Hostschnittstelle 220 weiter. Die E/A-Einheit 210 erhält ebenfalls Befehlsdaten, die Speicherzugriffsoperationen zugeordnet sind, von der CPU 110 und leitet diese Befehlsdaten an die Kreuzschieneneinheit 250 weiter. Befehlsdaten im Zusammenhang mit Verarbeitungsaufgaben umfassen im Allgemeinen einen oder mehrere Zeiger auf Aufgabenmetadaten (TMD), die in einer Befehlswarteschlange innerhalb des PPU-Speichers 270 oder an anderer Stelle innerhalb des Computersystems 100 gespeichert sind. Ein bestimmtes TMD ist eine codierte Verarbeitungsaufgabe, die Indizes der zu verarbeitenden Daten, die mit diesen Daten auszuführenden Operationen, die mit diesen Operationen zugeordneten Zustandsparameter, eine Ausführungspriorität und andere aufgabenorientierte Verarbeitungsinformationen beschreibt.
  • Die Hostschnittstelle 220 empfängt Befehlsdaten im Zusammenhang mit Verarbeitungsaufgaben von der E/A-Einheit 210 und verteilt diese Befehlsdaten dann über einen oder mehrere Befehlsströme an die Sys-Pipes 230. In einigen Konfigurationen erzeugt die Hostschnittstelle 210 für jede unterschiedliche Sys-Pipe 230 einen anderen Befehlsstrom, wobei ein gegebener Befehlsstrom Zeiger auf TMDs enthält, die für eine entsprechende Sys-Pipe 230 relevant sind.
  • Eine gegebene Sys-Pipe 230 führt verschiedene Vorverarbeitungsoperationen mit empfangenen Befehlsdaten durch, um die Ausführung entsprechender Verarbeitungsaufgaben auf den GPCs 242 innerhalb des Verarbeitungsclusterarrays 240 zu erleichtern. Bei Empfang von Befehlsdaten, die einer oder mehreren Verarbeitungsaufgaben zugeordnet sind, erhält das Frontend 232 innerhalb der gegebenen Sys-Pipe 230 die zugehörigen Verarbeitungsaufgaben und leitet diese Verarbeitungsaufgaben an die Aufgaben-/Arbeits-Einheit 234 weiter. Die Aufgaben-/Arbeits-Einheit 234 konfiguriert einen oder mehrere GPCs 242 in einen Betriebszustand, der für die Ausführung der Verarbeitungsaufgaben geeignet ist, und überträgt dann die Verarbeitungsaufgaben zur Ausführung an diese GPCs 242. Jede Sys-Pipe 230 kann Kopieraufgaben an eine oder mehrere PCEs 222 auslagern, die dedizierte Kopieroperationen durchführen. Die PCE-Zähler 224 verfolgen die Nutzung der PCEs 222, um Arbeitslasten von Kopieroperationen zwischen verschiedenen Sys-Pipes 230 auszugleichen. Der PM 236 überwacht die Gesamtleistung und/oder den Ressourcenverbrauch der entsprechenden Sys-Pipe 230 und kann verschiedene von dieser Sys-Pipe 230 ausgeführte Operationen drosseln, um einen ausgeglichenen Ressourcenverbrauch über alle Sys-Pipes 230 beizubehalten.
  • Jeder GPC 242 umfasst mehrere parallele Verarbeitungskerne, die in der Lage sind, eine große Anzahl von Threads gleichlaufend und mit einem beliebigen Grad an Unabhängigkeit und/oder Isolation von anderen GPCs 242 auszuführen. Beispielsweise könnte ein gegebener GPC 242 Hunderte oder Tausende von Threads gleichzeitig in Verbindung mit oder isoliert von jedem anderen GPC 242 ausführen. Ein Satz gleichlaufender Threads, die auf einem GPC 242 ausgeführt werden, kann separate Instanzen desselben Programms oder separate Instanzen verschiedener Programme ausführen. In einigen Konfigurationen werden die GPCs 242 von allen Sys-Pipes 230 gemeinsam genutzt, während in anderen Konfigurationen verschiedene Sätze von GPCs 242 für den Betrieb in Verbindung mit bestimmten Sys-Pipes 230 zugewiesen sind. Jeder GPC 242 empfängt Verarbeitungsaufgaben von einer oder mehreren Sys-Pipes 230 und startet als Antwort darauf einen oder mehrere Sätze von Threads, um diese Verarbeitungsaufgaben auszuführen und Ausgabedaten zu erzeugen. Nach Abschluss einer bestimmten Verarbeitungsaufgabe überträgt ein bestimmter GPC 242 die Ausgabedaten an einen anderen GPC 242 zur weiteren Verarbeitung oder an die Kreuzschieneneinheit 250 zur geeigneten Weiterleitung. Ein beispielhafter GPC wird nachstehend in Verbindung mit 3 ausführlicher beschrieben.
  • Die Kreuzschieneneinheit 250 ist ein Schaltmechanismus, der verschiedene Arten von Daten zwischen der E/A-Einheit 210, dem Verarbeitungsclusterarray 240 und der Speicherschnittstelle 260 leitet. Wie oben erwähnt, überträgt die E/A-Einheit 210 Befehlsdaten im Zusammenhang mit Speicherzugriffsoperationen an die Kreuzschieneneinheit 250. Als Antwort sendet die Kreuzschieneneinheit 250 die zugehörigen Speicherzugriffsoperationen zur Verarbeitung an die Speicherschnittstelle 260. In einigen Fällen leitet die Kreuzschieneneinheit 250 ebenfalls Lesedaten, die von der Speicherschnittstelle 260 zurückgegeben werden, zurück an die Komponente, die die Lesedaten anfordert. Die Kreuzschieneneinheit 250 empfängt ebenfalls Ausgabedaten von den GPCs 242, wie oben erwähnt, und kann diese Ausgabedaten dann an die E/A-Einheit 210 zur Übertragung an die CPU 110 leiten, oder kann diese Daten zur Speicherung und/oder Verarbeitung an die Speicherschnittstelle 260 leiten. Die Kreuzschieneneinheit 250 ist im Allgemeinen konfiguriert, um Daten zwischen den GPCs 242 und von jedem GPC 242 an jede Partitionseinheit 262 zu leiten. In verschiedenen Ausführungsformen kann die Kreuzschieneneinheit 250 virtuelle Kanäle implementieren, um Verkehrsströme zwischen den GPCs 242 und den Partitionseinheiten 262 zu trennen. In verschiedenen Ausführungsformen kann die Kreuzschieneneinheit 250 nicht gemeinsam genutzte Pfade zwischen einem Satz von GPCs 242 und einem Satz von Partitionseinheiten 262 ermöglichen.
  • Die Speicherschnittstelle 260 implementiert die Partitionseinheiten 262, um einen Speicherzugriff mit hoher Bandbreite auf DRAMS 272 innerhalb des PPU-Speichers 270 bereitzustellen. Jede Partitionseinheit 262 kann Speicherzugriffsoperationen mit einem anderen DRAM 272 parallel zueinander durchführen und dadurch die verfügbare Speicherbandbreite des PPU-Speichers 270 effizient nutzen. Eine gegebene Partitionseinheit 262 stellt ebenfalls Caching-Unterstützung über einen oder mehrere interne Caches bereit. Eine beispielhafte Partitionseinheit 262 wird nachstehend in Verbindung mit 4 ausführlicher beschrieben.
  • Der PPU-Speicher 270 im Allgemeinen und die DRAMs 272 im Besonderen können konfiguriert sein, um jeden technisch machbaren Datentyp zu speichern, der universellen Rechenanwendungen und/oder Graphikverarbeitungsanwendungen zugeordnet ist. Beispielsweise könnten DRAMs 272 große Matrizen von Datenwerten speichern, die neuronalen Netzwerken in Universalrechenanwendungen zugeordnet sind, oder alternativ einen oder mehrere Frame-Puffer speichern, die verschiedene Renderingziele in Graphikverarbeitungsanwendungen umfasst. In verschiedenen Ausführungsformen können die DRAMs 272 über jede technisch machbare Speichervorrichtung implementiert sein.
  • Die oben dargelegte Architektur ermöglicht es der PPU 200, eine breite Vielzahl von Verarbeitungsvorgängen beschleunigt und asynchron zum Betrieb der CPU 110 durchzuführen. Insbesondere ermöglicht die parallele Architektur der PPU 200, eine große Anzahl von Operationen parallel und mit einem beliebigen Grad an Unabhängigkeit voneinander und von auf der CPU 110 durchgeführten Operationen durchzuführen, wodurch die Gesamtleistung dieser Operationen beschleunigt wird.
  • In einer Ausführungsform kann die PPU 200 konfiguriert sein, um Universalrechenoperationen durchzuführen, um Berechnungen, die große Datensätze beinhalten, zu beschleunigen. Derartige Datensätze können sich unter anderem auf finanzielle Zeitreihen, dynamische Simulationsdaten, Echtzeit-Sensorauslesungen, Gewichtsmatrizen und/oder Tensoren neuronaler Netzwerke und Parameter maschinellen Lernens beziehen. In einer anderen Ausführungsform kann die PPU 200 konfiguriert sein, um als Graphikverarbeitungseinheit (GPU) zu arbeiten, die eine oder mehrere Graphik-Rendering-Pipelines implementiert, um Pixeldaten auf der Grundlage von Graphikbefehlen zu erzeugen, die von der CPU 110 erzeugt werden. Die PPU 200 kann dann die Pixeldaten über die Anzeigevorrichtung 136 als einen oder mehrere Frames ausgeben. Der PPU-Speicher 170 kann konfiguriert sein, um als Graphikspeicher zu arbeiten, der einen oder mehrere Frame-Puffer und/oder ein oder mehrere Rendering-Ziele in ähnlicher Weise wie oben erwähnt zu speichern. In noch einer weiteren Ausführungsform kann die PPU 200 konfiguriert sein, um sowohl Universalrechenoperationen als auch Graphikverarbeitungsoperationen gleichzeitig auszuführen. In derartigen Konfigurationen können eine oder mehrere Sys-Pipes 230 konfiguriert sein, um über eine oder mehrere GPCs 242 allgemeine Rechenoperationen zu implementieren, und können eine oder mehrere andere Sys-Pipes 230 konfiguriert sein, um über eine oder mehrere GPCs 242 eine oder mehrere Graphikverarbeitungs-Pipelines zu implementieren.
  • Bei jeder der obigen Konfigurationen arbeiten der Gerätetreiber 122 und der Hypervisor 124 zusammen, um verschiedene in der PPU 200 umfasste Rechen-, Graphik- und Speicherressourcen in separate „PPU-Partitionen“ zu unterteilen. Alternativ kann es eine Vielzahl von Gerätetreibern 122 geben, die jeweils einer „PPU-Partition“ zugeordnet sind. Vorzugsweise werden Vorrichtungstreiber auf einem Satz von Kernen in der CPU 110 ausgeführt. Eine gegebene PPU-Partition arbeitet im Wesentlichen ähnlich wie die PPU 200 als Ganzes. Insbesondere kann jede PPU-Partition konfiguriert sein, allgemeine Rechenoperationen, Graphikverarbeitungsoperationen oder beide Arten von Operationen relativ isoliert von anderen PPU-Partitionen auszuführen. Außerdem kann eine gegebene PPU-Partition konfiguriert sein, um mehrere Verarbeitungskontexte gleichzeitig zu implementieren, wenn eine oder mehrere virtuelle Maschinen (VMs) gleichzeitig auf den der gegebenen PPU-Partition zugewiesenen Rechen-, Graphik- und Speicherressourcen ausgeführt werden.
  • 3 ist ein Blockdiagramm eines GPC, der in der PPU von 2 umfasst ist, gemäß verschiedenen Ausführungsformen der Erfindung. Wie gezeigt der GPC 242 mit einer Speicherverwaltungseinheit (MMU) 300 gekoppelt und umfasst einen Pipeline-Manager 310, eine Arbeitsverteilungs-Kreuzschiene 320, einen oder mehrere Texturverarbeitungs-Cluster (TPCs) 330, eine oder mehrere Textureinheiten 340, einen Level 1.5 (L1.5) Cache 350, einen PM 360 und einen Pre-Raster-Operations-Processor (preROP) 370. Der Pipeline-Manager 310 ist mit der Arbeitsverteilungs-Kreuzschiene 320 und den TPCs 330 gekoppelt. Jeder TPC 330 umfasst einen oder mehrere Streaming-Multiprozessoren (SMs) 332 und ist mit einer Textureinheit 340, der MMU 300, dem L1.5-Cache 350, dem PM 360 und dem preROP 370 gekoppelt. Die Textureinheit 340 und der L1.5-Cache 350 sind ebenfalls mit der MMU 300 und untereinander gekoppelt. Der PreROP 370 ist mit der Arbeitsverteilungs-Kreuzschiene 320 gekoppelt. Jede der gezeigten Komponenten kann über jede technisch machbare Art von Hardware und/oder jede technisch machbare Kombination von Hardware und Software implementiert sein.
  • Der GPC 242 ist mit einer hochparallelen Architektur konfiguriert, die die parallele Ausführung einer großen Anzahl von Threads unterstützt. Wie hier in Bezug genommen, ist ein „Thread“ eine Instanz eines bestimmten Programms, das auf einem bestimmten Satz von Eingabedaten ausgeführt wird, um verschiedene Arten von Operationen durchzuführen, einschließlich allgemeiner Rechenoperationen und Graphikverarbeitungsoperationen. In einer Ausführungsform kann der GPC 242 SIMD (Single-Instruction Multiple-Data)-Techniken implementieren, um die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne notwendigerweise auf mehrere unabhängige Befehlseinheiten angewiesen zu sein.
  • In einer anderen Ausführungsform kann der GPC 242 SIMT (Single-Instruction Multiple-Thread)-Techniken implementieren, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads über eine gemeinsame Anweisungseinheit zu unterstützen, die Anweisungen an eine oder mehrere Verarbeitungs-Engines ausgibt. Für den Fachmann versteht sich, dass die SIMT-Ausführung es verschiedenen Threads ermöglicht, leichter divergierenden Ausführungspfaden durch ein gegebenes Programm zu folgen, im Gegensatz zur SIMD-Ausführung, bei der alle Threads im Allgemeinen nicht divergierenden Ausführungspfaden durch ein gegebenes Programm zu folgen. Der Fachmann wird erkennen, dass SIMD-Techniken eine funktionelle Teilmenge der SIMT-Techniken repräsentieren.
  • Der GPC 242 kann eine große Anzahl paralleler Threads über SMs 332 ausführen, die in TPCs 330 umfasst sind. Jeder SM 332 umfasst einen Satz von Funktionseinheiten (nicht gezeigt), einschließlich einer oder mehrerer Ausführungseinheiten und/oder einer oder mehrerer Lade-Speicher-Einheiten, die konfiguriert sind, um Anweisungen auszuführen, die empfangenen Verarbeitungsaufgaben zugeordnet sind. Eine gegebene Funktionseinheit kann Anweisungen in einer Pipeline-Weise ausführen, was bedeutet, dass eine Anweisung an die Funktionseinheit ausgegeben werden kann, bevor die Ausführung einer vorangehenden Anweisung abgeschlossen ist. In verschiedenen Ausführungsformen können die Funktionseinheiten innerhalb der SMs 332 konfiguriert sein, um eine Vielzahl verschiedener Operationen auszuführen, einschließlich von Ganzzahl- und Gleitkommaarithmetik (z.B. Addition und Multiplikation u.a.), Vergleichsoperationen, Boolesche Operationen (z.B. UND, ODER und XOR u.a.), Bitverschiebung und Berechnung verschiedener algebraischer Funktionen (z.B. planare Interpolation und trigonometrische, exponentielle und logarithmische Funktionen u.a.). Jede Funktionseinheit kann Zwischendaten innerhalb eines Level-1 (L1)-Caches speichern, der sich in dem SM 332 befindet.
  • Über die oben beschriebenen Funktionseinheiten ist der SM 332 konfiguriert, eine oder mehrere „Thread-Gruppen“ (auch „Warps“ genannt) zu verarbeiten, die gleichzeitig dasselbe Programm mit unterschiedlichen Eingangsdaten ausführen. Jeder Thread innerhalb einer Thread-Gruppe wird im Allgemeinen über eine andere Funktionseinheit ausgeführt, obwohl in manchen Situationen nicht alle Funktionseinheiten Threads ausführen. Falls beispielsweise die Anzahl von in der Thread-Gruppe umfassten Threads geringer ist als die Anzahl von Funktionseinheiten, könnten die nicht verwendeten Funktionseinheiten während der Verarbeitung der Thread-Gruppe untätig bleiben. In anderen Situationen werden mehrere Threads innerhalb einer Thread-Gruppe über dieselbe Funktionseinheit zu unterschiedlichen Zeiten ausgeführt. Falls die Anzahl von in der Thread-Gruppe umfassten Threads beispielsweise größer als die Anzahl der Funktionseinheiten ist, dann könnten eine oder mehrere Funktionseinheiten verschiedene Threads über aufeinander folgende Taktzyklen ausführen.
  • In einer Ausführungsform kann ein Satz verwandter Thread-Gruppen gleichlaufend in verschiedenen Phasen der Ausführung innerhalb des SMs 332 aktiv sein. Ein Satz verwandter Thread-Gruppen wird hier als ein „kooperatives Thread-Array“ (CTA) oder ein „Thread-Array“ bezeichnet. Threads innerhalb desselben CTA oder Threads innerhalb verschiedener CTAs können im Allgemeinen Zwischendaten und/oder Ausgabedaten über einen oder mehrere L1-Caches, einschließlich der SMs 332, des L1.5-Cache 350, eines oder mehrerer L2-Caches, die von SMs 332 gemeinsam genutzt werden, oder über einen gemeinsam genutzten Speicher, einen globalen Speicher oder einen anderen Speichertyp, der sich auf einer beliebigen Speichervorrichtung in dem Computersystem 100 befindet, gemeinsam nutzen. In einer Ausführungsform kann der L1.5-Cache 350 konfiguriert sein, Anweisungen zwischenzuspeichern, die von Threads auszuführen sind, die auf SMs 332 ausgeführt werden.
  • Jedem Thread in einer gegebenen Thread-Gruppe oder CTA ist im Allgemeinen eine eindeutige Thread-Kennung (Thread-ID) zugewiesen, auf die der Thread während der Ausführung zugreifen kann. Die einem gegebenen Thread zugewiesene Thread-ID kann als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein. Das Ausführungs- und Verarbeitungsverhalten des gegebenen Threads kann abhängig von der Thread-ID variieren. Beispielsweise könnte der Thread auf der Grundlage der Thread-ID bestimmen, welcher Teil eines Eingabedatensatzes zu verarbeiten ist und/oder welcher Teil eines Ausgabedatensatzes zu schreiben ist.
  • In einer Ausführungsform kann eine Sequenz von Pro-Thread-Anweisungen zumindest eine Anweisung umfassen, die ein kooperatives Verhalten zwischen einem gegebenen Thread und einem oder mehreren anderen Threads definiert. Beispielsweise könnte die Sequenz von Pro-Thread-Anweisungen eine Anweisung umfassen, die den gegebenen Thread bei seiner Ausführung in einem bestimmten Ausführungszustand aussetzt, bis einige oder alle anderen Threads einen entsprechenden Ausführungszustand erreichen. In einem anderen Beispiel könnte die Sequenz von Pro-Thread-Anweisungen eine Anweisung umfassen, die bei ihrer Ausführung bewirkt, dass der angegebene Thread Daten in einem gemeinsamen Speicher speichert, auf den einige oder alle anderen Threads Zugriff haben. In noch einem weiteren Beispiel könnte die Sequenz von Pro-Thread-Anweisungen eine Anweisung umfassen, die bei ihrer Ausführung bewirkt, dass der betreffende Thread atomar Daten liest und aktualisiert, die in einem gemeinsamen Speicher gespeichert sind, auf den einige oder alle anderen Threads abhängig von den Thread-IDs dieser Threads Zugriff haben. In einem weiteren Beispiel könnte die Sequenz von Pro-Thread-Anweisungen eine Anweisung umfassen, die bei ihrer Ausführung den gegebenen Thread veranlasst, eine Adresse in einem gemeinsamen Speicher auf der Grundlage einer entsprechenden Thread-ID zu berechnen, um Daten aus diesem gemeinsamen Speicher zu lesen. Mit den obigen Synchronisierungstechniken kann ein erster Thread Daten an eine bestimmte Stelle in einem gemeinsamen Speicher schreiben und kann ein zweiter Thread diese Daten auf vorhersehbare Weise aus dem gemeinsamen Speicher lesen. Demgemäß können Threads konfiguriert sein, eine Vielzahl von Datenfreigabemustern innerhalb einer bestimmten Thread-Gruppe oder eines bestimmten CTA oder über Threads in verschiedenen Thread-Gruppen oder verschiedenen CTAs hinweg implementieren. In verschiedenen Ausführungsformen beschreibt eine in der Programmiersprache CUDA (Compute Unified Device Architecture) geschriebene Softwareanwendung das Verhalten und den Betriebsablauf von Threads, die auf dem GPC 242 ausgeführt werden, einschließlich aller oben beschriebenen Verhaltensweisen und Operationen.
  • Im Betrieb koordiniert der Pipeline-Manager 310 im Allgemeinen die parallele Ausführung von Verarbeitungsaufgaben innerhalb des GPC 242. Der Pipeline-Manager 310 empfängt Verarbeitungsaufgaben von der Aufgaben-/Arbeits-Einheit 234 und verteilt diese Verarbeitungsaufgaben an die TPCs 330 zur Ausführung über die SMs 332. Eine gegebene Verarbeitungsaufgabe ist in der Regel einem oder mehreren CTAs zugeordnet, die auf einem oder mehreren SMs 332 innerhalb eines oder mehrerer TPCs 330 ausgeführt werden können. In einer Ausführungsform kann eine bestimmte Aufgaben-/Arbeits-Einheit 234 eine oder mehrere Verarbeitungsaufgaben an den GPC 242 verteilen, indem ein oder mehrere CTAs gestartet werden, die an einen oder mehrere bestimmte TPCs 330 gerichtet sind. Der Pipeline-Manager 310 kann das gestartete CTA von der Aufgaben-/Arbeits-Einheit 234 empfangen und das CTA an den entsprechenden TPC 330 zur Ausführung über eine oder mehrere in dem TPC 330 umfasste SMs 332 übertragen. Während oder nach der Ausführung einer bestimmten Verarbeitungsaufgabe erzeugt jeder SM 332 Ausgabedaten und überträgt die Ausgabedaten abhängig von einer aktuellen Konfiguration und/oder Art der aktuellen Verarbeitungsaufgabe an verschiedene Stellen.
  • In Konfigurationen, die sich auf allgemeine Computer- oder Graphikverarbeitung beziehen, kann der SM 332 Ausgabedaten an die Arbeitsverteilungs-Kreuzschiene 320 übertragen, und die Arbeitsverteilungs-Kreuzschiene 320 leitet die Ausgabedaten dann zur weiteren Verarbeitung an einen oder mehrere GPCs 242 oder zur weiteren Weiterleitung an die Kreuzschieneneinheit 250 weiter. Die Kreuzschieneneinheit 250 kann die Ausgabedaten an einen L2-Cache, der in einer bestimmten Partitionseinheit 262 umfasst ist, an den PPU-Speicher 270 oder an den Systemspeicher 120 unter anderen Zielen weiterleiten. Der Pipeline-Manager 310 koordiniert im Allgemeinen das Routing der Ausgabedaten, das von der Arbeitsverteilungs-Kreuzschiene 320 durchgeführt wird, auf der Grundlage der mit diesen Ausgabedaten zugeordneten Verarbeitungsaufgaben.
  • In Konfigurationen, die für Graphikverarbeitung spezifisch sind, kann der SM 332 Ausgabedaten an die Textureinheit 340 und/oder den preROP 370 übertragen. In einigen Ausführungsformen kann der preROP 370 einige oder alle der Rasteroperationen implementieren, die in einer 3D-Graphik-API spezifiziert sind, wobei in diesem Fall der preROP 370 einige oder alle der Operationen implementiert, die andernfalls über einen ROP 410 ausgeführt werden. Die Textureinheit 340 führt im Allgemeinen Texturabbildungsoperationen aus, darunter beispielsweise eine Bestimmung von Texturprobenpositionen, ein Lesen von Texturdaten und ein Filtern von Texturdaten. Der PreROP 370 führt im Allgemeinen rasterorientierte Operationen durch, darunter beispielsweise die Organisation von Pixelfarbdaten und die Durchführung von Optimierungen zur Farbmischung. Der PreROP 370 kann ebenfalls Adressübersetzungen durchführen und Ausgabedaten, die von SMs 332 empfangen wurden, an eine oder mehrere ROP (Raster Operation Processor)-Einheiten innerhalb Partitionseinheiten 262 senden.
  • In jeder der oben genannten Konfigurationen überwachen ein oder mehrere PMs 360 die Leistung der verschiedenen Komponenten des GPC 242, um Benutzern Leistungsdaten zur Verfügung zu stellen und/oder die Auslastung von Rechen-, Graphik- und/oder Speicherressourcen über Gruppen von Threads hinweg auszugleichen und/oder die Auslastung dieser Ressourcen mit dem anderen GPC 242 auszugleichen. Ferner können in jeder der oben genannten Konfigurationen der SM 332 und andere Komponenten innerhalb des GPC 242 Speicherzugriffsoperationen mit der Speicherschnittstelle 260 über die MMU 300 durchführen. Die MMU 300 schreibt im Allgemeinen Ausgabedaten in verschiedene Speicherbereiche und/oder liest Eingabedaten aus verschiedenen Speicherbereichen im Auftrag des GPC 242 und den darin umfassten Komponenten. Die MMU 300 ist konfiguriert, um virtuelle Adressen über einen Satz von Seitentabelleneinträgen (PTEs) und einen oder mehrere optionale Adressübersetzungs-Lookaside-Puffer (TLBs) in physische Adressen abgebildet werden. Die MMU 300 kann verschiedene Daten in dem L1.5-Cache 350 zwischenspeichern, einschließlich von gelesenen Daten, die von der Speicherschnittstelle 260 zurückgegeben wurden. In der gezeigten Ausführungsform ist die MMU 300 extern an den GPC 242 gekoppelt und kann potenziell mit anderen GPCs 242 gemeinsam genutzt werden. In anderen Ausführungsformen kann der GPC 242 eine dedizierte Instanz von MMU 300 umfassen, die Zugriff auf eine oder mehrere Partitionseinheiten 262 bereitstellt, die in der Speicherschnittstelle 260 umfasst sind.
  • 4 ist ein Blockdiagramm einer Partitionseinheit 262, die in der PPU 200 von 2 umfasst ist, gemäß verschiedenen Ausführungsformen. Wie gezeigt, umfasst die Partitionseinheit 262 einen L2-Cache 400, eine Frame-Buffer(FB)-DRAM-Schnittstelle 410, einen Rasteroperations-Prozessor (ROP) 420 und einen oder mehrere PMs 430. Der L2-Cache 400 ist zwischen der FB-DRAM-Schnittstelle 410, dem ROP 420 und dem PM 430 gekoppelt.
  • Der L2-Cache 400 ist ein Lese-/Schreib-Cache, der Lade- und Speicheroperationen durchführt, die von der Kreuzschieneneinheit 250 und dem ROP 420 empfangen wurden. Der L2-Cache 400 gibt Lesefehler und dringende Rückschreibanforderungen zur Verarbeitung an die FB-DRAM-Schnittstelle 410 aus. Der L2-Cache 400 überträgt ebenfalls unsaubere Aktualisierungen zur opportunistischen Verarbeitung an die FB-DRAM-Schnittstelle 410. In einigen Ausführungsformen überwachen die PMs 430 während des Betriebs die Auslastung des L2-Cache 400, um die Speicherzugriffsbandbreite gerecht auf verschiedene GPCs 242 und andere Komponenten der PPU 200 aufzuteilen. Die FB-DRAM-Schnittstelle 410 hat eine direkte Schnittstelle zu einem spezifischen DRAM 272, um Speicherzugriffsoperationen durchzuführen, einschließlich des Schreibens von Daten in den DRAM 272 und des Lesens von Daten aus dem DRAM 272. In einigen Ausführungsformen ist der Satz von DRAMs 272 auf mehrere DRAM-Chips aufgeteilt, wobei Teile mehrerer DRAM-Chips jedem DRAM 272 entsprechen.
  • In Konfigurationen mit Bezug zu Graphikverarbeitung führt der ROP 420 Rasteroperationen zur Erzeugung von Graphikdaten durch. Der ROP 420 könnte beispielsweise Schablonenoperationen, z-Test-Operationen, Mischoperationen und Komprimierungs- und/oder Dekomprimierungsoperationen u.a. an z- oder Farbdaten durchführen. Der ROP 420 kann konfiguriert sein, verschiedene Arten von Graphikdaten, einschließlich Pixeldaten, Graphikobjekten, Fragmentdaten usw. zu erzeugen. Der ROP 420 kann ebenfalls Graphikverarbeitungsaufgaben auf andere Recheneinheiten verteilen. In einer Ausführungsform umfasst jeder GPC 242 einen dedizierten ROP 420, der Rasteroperationen im Namen des entsprechenden GPC 242 durchführt.
  • Für den Fachmann versteht sich, dass die in 1-4 beschriebene Architektur in keiner Weise den Umfang der vorliegenden Ausführungsformen beschränkt und dass die hier offenbarten Techniken auf jeder ordnungsgemäß konfigurierten Verarbeitungseinheit, einschließlich, aber nicht beschränkt auf, einer oder mehrerer CPUs, einer oder mehrerer Mehrkern-CPUs, einer oder mehrerer PPUs 200, eines oder mehrerer GPCs 242, einer oder mehrerer GPUs oder anderer Sonderverarbeitungseinheiten usw. implementiert werden können, ohne vom Umfang und Wesen der vorliegenden Ausführungsformen abzuweichen.
  • Leistungsüberwachungssystem
  • Wie ferner hier erläutert, überwachen Leistungsmonitore (PMs), wie beispielsweise der der PM 236 von 2, der PM 360 von 3 und der PM 430 von 4, die Gesamtleistung und/oder den Ressourcenverbrauch der entsprechenden in PPU 200 umfassten Komponenten. Die Leistungsmonitore (PMs) sind in einem Leistungsüberwachungssystem umfasst, das Leistungsüberwachung und Profilierung über mehrere Domänen hinweg bereitstellt (z.B., jede von mehrere Sys-Pipes 230, jeder von mehreren TPCs 330 und/oder den L2-Cache 400). Das Leistungsüberwachungssystem kann gleichzeitig oder im Wesentlichen gleichzeitig mehrere VMs und Verarbeitungskontexte profilieren, die in der VMs ausgeführt werden. Das Leistungsüberwachungssystem kann die mehreren VMs und mehreren Verarbeitungskontexte, die in den VMs ausgeführt werden, voneinander mit Bezug darauf isolieren, wie Leistungsdaten erzeugt und erfasst werden, um Leckage von Leistungsdaten zwischen VMs zu verhindern. Die PMs 232 und zugeordnete Zähler innerhalb des Leistungsüberwachungssystems können die Zuordnung von Leistungsdaten verfolgen. Das Leistungsüberwachungssystem kann gleichzeitig Rechen-Engines und Graphik-Engines profilieren und profiliert VMs, wie die VMs zu anderen PPUs 200 migrieren. Das Leistungsüberwachungssystem wird nun beschrieben.
  • 5 ist ein Blockdiagramm eines Leistungsüberwachungssystem 500 für die PPU 200 von 2 gemäß verschiedener Ausführungsformen. Wie gezeigt, umfasst das Leistungsüberwachungssystem 500 ohne Beschränkung einen oder mehrere Leistungsmonitore 510 (z.B., Leistungsmonitore 510(1) und 510(2), wie gezeigt) und einen Watch-Bus 530. Jeder Leistungsmonitor 510 kann ein Leistungsmonitormodul (PMM) bilden. Jeder GPC 242, jede Partitionseinheit 262 und jede Sys-Pipe 230 umfasst mindestens ein PMM. Demgemäß könnte beispielsweise der Leistungsmonitor 510(1) in einem ersten GPC 242 umfasst sein und der Leistungsmonitor 510(2) könnte in einem zweiten GPC 242 umfasst sein. Allgemeiner gesagt, kann jede von einer oder mehreren zu überwachenden Domäne (z.B., jeder GPC 242, jede Partitionseinheit 262, jede Sys-Pipe 230 und/oder dergleichen) in PPU 200 einem jeweiligen Leistungsmonitor 510 zugeordnet werden. Jeder Leistungsmonitor 510 kann einen Watch-Bus 530 umfassen und/oder mehrere Leistungsmonitore 510 können einen gemeinsamen Watch-Bus 530 gemeinsam nutzen. Das Leistungsüberwachungssystem 500 fungiert im Wesentlichen genauso wie der PM 236 von 2, der PM 360 von 3 und der PM 430, außer wie nachstehend ferner beschrieben. In verschiedenen Ausführungsformen sind der PM 236, der PM 360 und der PM 430 beispielhafte Instanzen des Leistungsmonitors 510.
  • Jeder Leistungsmonitor 510 umfasst eine programmierbare Zustandsmaschine (PSM) 520, einen internen Logikanalysator (ILA) 522 und einen inhaltsadressierbaren Speicher (CAM) 524. Die PSM 520 implementiert eine Zustandsmaschine für den Leistungsmonitor. Die Zustandsmaschine des Leistungsmonitors definiert ein oder mehrere Zustände, Übergänge zwischen den Zuständen und Ausgaben, die den Zustände und/oder Übergängen zugeordnet sind. Der ILA 522 kann Signaldaten von einer oder mehreren zu überwachenden Domänen sammeln und Operationen durchführen, um die Daten zu analysieren. Innerhalb eines gegebenen Leistungsmonitors speichert ein CAM 524 Daten, die der PSM 520 und/oder dem ILA 522 zugeordnet sind; die PSM 520 und der ILA 522 nutzen den CAM 524 gemeinsam. Der ILA 522 wird ferner nachstehend in Verbindung mit 10-12 beschrieben.
  • In einigen Ausführungsformen kann eine PSM ein oder mehrere Signale an den ILA innerhalb des gleichen Leistungsmonitors und/oder einen oder mehrere ILAs von Leistungsmonitoren für eine oder mehrere andere Domäne ausgeben. Auf ähnliche Weise kann ein ILA ein oder mehrere Signale von der PSM innerhalb des gleichen Leistungsmonitors, eine oder mehrere PSMs von Leistungsmonitoren für ein oder mehrere andere Domäne und/oder einen oder mehrere ILAs von Leistungsmonitoren für eine oder mehrere andere Domäne empfangen. Beispielsweise kann, wie gezeigt, die PSM 520(1) ein oder mehrere Ausgangssignale an den ILA 522(1) und ein oder mehrere Ausgangssignale (welche die gleichen oder unterschiedliche Ausgangssignale sein können) an den ILA 522(2) ausgeben. Ebenfalls kann, wie gezeigt, der ILA 522(1) ein oder mehrere Signale von der PSM 520(1) und/oder der PSM 520(2) empfangen. Von der PSM 520 ausgegebene Signale und von dem ILA 522 empfangene Signale werden nachstehend ferner beschrieben. In einigen Ausführungsformen kann eine PSM 520 Ausgangssignale an mehrere ILAs 522 (z.B., alle ILAs 522 in dem Leistungsüberwachungssystem 500) ausgeben und ein ILA kann Signale von mehreren PSMs 520 empfangen (z.B., alle PSMs 520 in dem Leistungsüberwachungssystem 500).
  • Der Watch-Bus 530 empfängt Signale von innerhalb der PPU 200. Der Watch-Bus 520 kann ein oder mehrere Signale an PSMs 520 und ein oder mehrere Signale an ILAs 522 übertragen. Ein oder mehrere an den Watch-Bus 530 übertragene Signale können als eine Eingabe mit einer oder mehreren PSMs 520 und/oder einem oder mehreren ILAs 522 verbunden werden. In einigen Ausführungsformen kann der Watch-Bus 530 die empfangenen Signalen in eine oder mehrere Gruppen gruppieren und jeweilige Signalgruppe(n) an PSMs 520 und/oder ILAs 522 übertragen.
  • Leistungsmonitor mit programmierbarer Zustandsmaschine
  • 6 veranschaulicht eine programmierbare Zustandsmaschine 520 eines Leistungsmonitors 510 von 5 gemäß verschiedenen Ausführungsformen. Der Leistungsmonitor 510 implementiert eine programmierbare Zustandsmaschine (PSM) 520 über eine oder mehrere Hardwareeinheiten und/oder Schaltungen in Verbindung mit einem inhaltsadressierbaren Speicher 524. 6 stellt eine PSM 520(1) und einen CAM 524(1) des Leistungsmonitors 510(1) anschaulich dar, wobei jedoch erkannt werden sollte, dass andere PSMs 520 und CAMs 524 in der PPU 200 jeweils eine ähnliche Struktur wie die von der PSM 520(1) und dem CAM 524(1) aufweisen können, wie gezeigt. Die PSM 520(1) umfasst, wie gezeigt, ein Eingangsassemblermodul 602, einen(mehrere) Zähler 604, einen PSM-Zustand 606 und ein Nachschlagemodul 608. Der CAM 524(1) umfasst einen Speicher 632, wie gezeigt,.
  • Das Eingangsassemblermodul 602 empfängt Signale von dem Watch-Bus 530 und Zählern 604 und assembliert und/oder verarbeitet die Signale in einem oder mehreren Eingangssignalen für das Nachschlagemodul 608. das Eingangsassemblermodul 602 implementiert eine beliebige Anzahl und/oder eine Kombination von Logikschaltungen (z.B., Logikgatter, Flip-Flops, Latches, Multiplexer, Register, Arithmetiklogikeinheiten, Tabellen Boolescher Funktion, Speicher usw.), um von dem Watch-Bus 530 empfangene Rohsignale zu verarbeiten, um das(die) Eingangssignal(e) für das Nachschlagemodul 608 zu erzeugen. Eine Verarbeitung der Rohsignale durch die Logikschaltungen kann beispielsweise das Auswählen eines Rohsignals unter einem Satz von mehreren Rohsignalen, das Durchführen von Operationen an einem oder mehreren Rohsignalen, um ein Eingangssignal zu erzeugen, das Laufen durch ein Rohsignal ohne Verarbeitung und/oder dergleichen umfassen. Das Eingangsassemblermodul 602 erzeugt ein oder mehrere Ausgangssignale, die als Eingaben 660 in das Nachschlagemodul 608 verbunden sind. Demgemäß kann die Ausgabe des Eingangsassemblermoduls 602 (und entsprechende Eingabe(n) 660 in das Nachschlagemodul 608) als eine Anordnung (z.B., Verkettung) der Ausgangssignale in einem Datenwort konzipiert werden. In einigen Ausführungsformen wird das Eingangsassemblermodul 602 (das beispielsweise die Rohsignale von dem Watch-Bus 520, die empfangen und verarbeitet werden, und die Logikschaltungen, um die Rohsignale zu verarbeiten, die Ausgangssignale und der entsprechenden Bitbreite umfasst) in der Entwurfsphase definiert und ist in der Hardware der PPU 200 fixiert. In einigen anderen Ausführungsformen kann das Eingangsassemblermodul 602 über programmierbare Hardware (z.B., field programmable gate array) implementiert werden. In einigen Ausführungsformen können ein oder mehrere in Zählern 604 gehaltene Zählerwerte ebenfalls eine zusätzliche Eingabe in das Eingangsassemblermodul 602 sein und auf ähnliche Weise durch das Eingangsassemblermodul 602 in Verbindung mit Signalen von dem Watch-Bus 530 verarbeitet werden. Beispielsweise können ein oder mehrere Logikschaltungen innerhalb des Eingangsassemblermoduls 602 ein Ausgangssignal basierend auf einem oder mehreren Zählern allein oder basierend auf einem oder mehreren Zählern und einem oder mehreren Signalen von dem Watch-Bus 530 erzeugen.
  • Der(die) Zähler(s) 604 implementiert(en) eine Speicherung zum Speichern und/oder anderweitigen Beibehalten eines oder mehrerer Zähler, die von der PSM 520(1) verwendet werden können. Der(die) Zähler(s) 604 implementiert(en) ferner eine Logik zum Durchführen einer oder mehreren Operationen an den Zählern. Der(die) Zähler 604 kann(können) umfassen ein oder mehrere Logikschaltungen (z.B., Register, Speicher) zum Speichern oder Halten Werts der Zähler (s) und eine oder mehrere Logikschaltungen zum Durchführen von Operationen (z.B., Inkrementieren, Dekrementieren, Rücksetzen auf einen vordefinierten Wert, keine Operation (no-op) usw.) an der Zählern umfassen. In verschiedenen Ausführungsformen können die Logikschaltungen zum Durchführen der Operationen durch ein oder mehrere Ausgaben (z.B., ein oder mehrere Zähleraktionswerte) von Nachschlagemodul 608 aktiviert (z.B., getriggert) werden. Demgemäß können ein oder mehrere Ausgaben des Nachschlagemoduls 608 als Eingaben in Zählern 604, insbesondere der Logikschaltungen, zum Durchführen von Operationen an der Zählern verbunden sein. Die in Zählern 604 gehaltenen Zähler können als Eingaben in das Eingangsassemblermodul 602 bereitgestellt werden. Demgemäß können Ausgaben der Register, Speicher oder dergleichen, welche die Zähler halten, als Eingaben in Eingangsassemblermodul das verbunden werden. Unterschiedliche Werte bilden sich auf unterschiedliche Operationen ab und demgemäß kann eine durchzuführende Operation von unterschiedlichen Werten ausgewählt werden, die in den Zähleraktionswerten getragen werden. Jeder der Zähler in den Zählern 604 kann ein oder mehrere Bits in Bitbreite sein. In verschiedenen Ausführungsformen zählt ein Zähler in den Zählern 604 ein bestimmtes Ereignis (z.B., Eingangssignale, die mit bestimmten Werten übereinstimmen), die in der überwachten Domäne stattfinden. Demgemäß können Zähler 604 einen oder mehrere Zähler umfassen, um unterschiedliche Typen von Ereignissen zu zählen.
  • Der PSM-Zustand 606 implementiert die Speicherung zum Speichern oder Halten eines Werts, der einen aktuellen Zustand der PSM 520(1) angibt. Die PSM 520 kann mehrere Zustände und Übergänge zwischen den Zustände aufweisen und jeder Zustand kann durch einen Wert dargestellt werden. Wenn die PSM 520(1) beispielsweise insgesamt sechs Zustände aufweist, könnten die Zustände dargestellt werden durch und nummeriert werden als 1 bis 6. Der PSM-Zustand 606 kann eine oder mehrere Logikschaltungen (z.B., Register, Speicher, einen Satz von Flip-Flops) zum Speichern oder Halten der aktuellen Zustandswerte umfassen. Wenn der aktuelle Zustand der PSM 520(1) beispielsweise der Zustand 3 ist, dann würde der aktuelle Zustandswert gleich 3 sein. Der PSM-Zustand 606 kann einen nächsten Zustandswert empfangen (einen Wert, der den nächsten Zustand angibt, in den die PSM 520(1) übergeht) und diesen nächsten Zustandswert als den neuen aktuellen Zustandswert speichern. Der PSM-Zustand 606 kann ebenfalls den gespeicherten aktuellen Zustandswert als eine Eingabe in das Nachschlagemodul 608 bereitgestellt werden; eine Ausgabe des PSM-Zustands 606 kann als eine Eingabe in das Nachschlagemodul 608 verbunden werden. Der in dem PSM-Zustand 606 gespeicherte aktuelle Zustandswert kann jede geeignete Bitbreite basierend auf der Anzahl von Zuständen der PSM 520(1) sein.
  • Das Nachschlagemodul 608 schlägt nach und ruft Daten ab, die der PSM 520(1) zugeordnet sind, von dem CAM 524(1). In verschiedenen Ausführungsformen implementiert das Nachschlagemodul 608 Logikschaltungen, die konfiguriert sind, um Daten von dem CAM 524(1) basierend auf Eingaben abzurufen, die von dem Eingangsassemblermodul 602 empfangen werden, und den aktuellen von dem PSM-Zustand 606 empfangen Zustand; eine Adresse in den CAM 524(1) basiert auf der Eingabe, die von dem Eingangsassemblermodul 602 empfangen wird, und dem aktuellen Zustand. Die Daten, die von dem CAM 524(1) abzurufen sind, umfassen einen nächsten Zustandswert, der an den PSM-Zustand 606 auszugeben ist, ein oder mehrere Zähleraktionsbits, die an den Zähler 604 auszugeben sind, und ein oder mehrere andere Ausgangssignale, die ferner nachstehend in Verbindung mit 7 beschrieben sind. Das Nachschlagemodul 608 kann den nächste Zustandswert an den PSM-Zustand 606, die Zähleraktionsbits an den Zähler 604 und die anderen Ausgangssignale an andere Einheiten innerhalb der PPU 200 ausgeben, einschließlich beispielsweise einen ILA innerhalb des gleichen Leistungsmonitors (z.B., ILA 522(1)) und einen ILA in einem unterschiedlichen Leistungsmonitor (z.B., ILA 522(2).
  • Der CAM 524(1) umfasst einen Speicher 632. Der Speicher 632 speichert Daten, die der PSM 520(1) oder dem ILA 522(1) zugeordnet sind. In einigen Ausführungsformen kann der Speicher 632 ein Latch-basierter Speicher oder ein Register-basierter Speicher sein; wobei der Speicher 632 unter Verwendung von Latches oder Registern implementiert sein kann. In diesen Ausführungsformen, bei denen der Speicher 632 ein Latch-basierter oder Register-basierter Speicher ist, kann Nachschlagen und Abrufen von im CAM 524 gespeicherter Daten und Ausgeben von Signalen durch das Nachschlagemodul 608 basierend auf dem Nachschlagen und Abrufen von CAM-Daten in dem gleichen Taktzyklus durchgeführt werden. Ferner können Operationen an Zählern 604 und ein Aktualisieren des PSM-Zustands 606 basierend auf den Ausgangssignalen ebenfalls in dem gleichen Taktzyklus wie das Nachschlagen und Abrufen von CAM-Daten durchgeführt werden. Demgemäß kann die PSM 520(1) Instanzen eines Ereignisses in einer zyklusgenauen Art und Weise in spezifischen Intervallen zählen, die durch die Benutzerprogrammierte PSM bestimmt wird, was zum Extrahieren spezifischer Information nützlich sein kann, die zum Analysieren des Ereignisses benötigt wird. Das Format dem PSM 520(1) oder dem ILA 522(1) zugeordneten Daten, die im Speicher 632 gespeichert werden können, werden ferner nachstehend jeweils mit Bezugnahme auf 7 und 11 beschrieben. In einigen Ausführungsformen kann der CAM 524(1) einen Controller umfassen, der schnittstellenmäßig mit dem Latch-basierten oder Register-basierten Speicher 632 verbunden ist. Der Controller kann zwischen einem PSM-Modus und einem ILA-Modus wählen, was nachstehend beschrieben wird. Im PSM-Modus führt der Controller der Nachschlagen und Abrufen von Speicher 632 aus; der Controller implementiert das Nachschlagemodul 608. Der Controller kann ebenfalls die ursprünglichen PSM-Daten wie durch den Benutzer programmiert für mögliches erneutes Zurückschreiben in den Speicher 632 speichern. In einigen anderen Ausführungsformen kann der CAM 524(1) mit einem Controller und einem Direktzugriffsspeicher (RAM) für den Speicher 632 (z.B., statischer RAM (SRAM)) implementiert sein. Der Controller ist schnittstellenmäßig mit dem RAM verbunden und verarbeitet Anfragen für Nachschlageoperationen in dem RAM.
  • In verschiedenen Ausführungsformen ist der CAM 524(1) mit einer oder mehreren zusätzlichen Signaleingaben verbunden. Diese zusätzliche Signaleingaben können Programmiereingaben 650, die durch Benutzerbefehl aktiviert werden können, in dem CAM 524(1) tragen. Die Programmiereingaben 650 können der PSM 520(1) zugeordnete Daten zur Speicherung in Speicher 632 tragen, wobei ersetzt wird, was immer darin bereits gespeichert ist. Die Programmiereingaben 650 können einem Benutzer bereitgestellt werden. In dem sie es dem Benutzer ermöglicht, die PSM-zugeordneten Daten zu spezifizieren, die in dem CAM 524 gespeicherten sind, und die Daten in dem CAM 524 über Programmiereingaben 650 bereitzustellen, ist die PSM 520 programmierbar, um die Zustände, Zustandsübergänge und zugeordneten Ausgaben aufzuweisen, die vom Benutzer gewünscht werden. Demgemäß kann die PSM 520 ohne Weiteres zum Debugging und/oder zur Merkmalexpansion konfiguriert sein.
  • In einigen Ausführungsformen arbeitet der CAM 524 in einem von zwei Moden: PSM-Modus und ILA-Modus. Im PSM-Modus speichert der CAM 524(1) Daten, die der PSM 520(1) zugeordnet sind, die durch die Programmiereingaben 650 bereitgestellt werden, im Speicher 632. Während im PSM-Modus, erleichtert der CAM 524(1) den Abruf dieser Daten durch die PSM 520(1). Im ILA-Modus kann der ILA 522(1) Daten in dem CAM 524(1) speichern, wobei die Daten überschrieben werden, die der PSM 520(1) zugeordnet sind. In einigen Ausführungsformen arbeitet der CAM 524 anfangs im PSM-Modus, es sei denn, dass er mit einem Modussignal 670 getriggert wird, um im ILA-Modus zu arbeiten, und schaltet nicht in den PSM-Modus zurück, bis er erneut gestartet wird (z.B., schaltet die PPU 200 ab und dann wieder an). In Ausführungsformen, bei denen der CAM 524 einen Controller umfasst, kann der Controller einen Zugriff auf den Speicher 632 basierend auf dem aktiven Modus (PSM-Modus oder ILA-Modus) steuern. Der Controller arbeitet anfangs im PSM-Modus und der Modus kann in einen ILA-Modus basierend auf ein in den CAM 524 eingegebenes Modussignal 670 geändert werden. Die Modussignaleingabe 670 kann beispielsweise ein DFD-Trigger sein, der nachstehend beschrieben wird.
  • In einigen Ausführungsformen kann der CAM 524 bis zu 32 Einträge in seinem Speicher 632 speichern; wobei der CAM 524 innerhalb der PPU 200 dimensioniert ist, um einen Speicher mit 32 Einträgen 632 zu ermöglichen. Ein Speicher mit 32 Einträgen 632 kann bis zu 32 Zustandsübergänge (jeder Eintrag entspricht einem Zustandsübergang) für die PSM speichern. Allgemeiner gesagt, wird die Speicherungskapazität des CAM 524 durch die Menge des physischen Bereichs innerhalb der PPU 200 begrenzt, die dem CAM 524 zugeteilt ist; wobei der Speicher 623 ist physisch innerhalb PPU 220 basierend auf diesem zugeteilten physischen Bereich dimensioniert ist. Die Anzahl der Einträge, die der CAM 524 speichern kann, ist nicht von der Anzahl der Zustände der PSM oder der Anzahl von Eingaben in die PSM abhängig. Die Bitbreite von Einträgen in den CAM 524 kann von der Anzahl von Eingaben in die PSM abhängen (z.B., breitere Einträge, um mehr Eingangssignale zu ermöglichen).
  • Für Ausführungsformen, bei denen der Speicher 632 ein RAM ist, kann der RAM eine Anzahl von Einträgen basierend auf der Anzahl von Eingaben in die PSM und der Anzahl von Bits für den PSM-Zustandswert speichern (z.B., 2^m Einträge, wobei m die Summe der Anzahl von Eingaben in die PSM und der Anzahl von Bits für den PSM-Zustandswert ist). Die Bitbreite von Einträgen in dem RAM hängt nicht von der Anzahl von Eingaben ab. Der Controller würde Nachschlageoperationen in dem RAM verarbeiten, wobei Einträge in dem RAM pro Taktzyklus nachgeschlagen werden. Mit 8 möglichen Zuständen (3-Bit PSM-Zustandswert) und 5 Eingaben, würde der RAM ausreichende Kapazität benötigen, um mindestens 256 Einträge (2^(3+5)) zu speichern.
  • 7 veranschaulicht ein Format 700 eines Eintrags, der in einem inhaltsadressierbaren Speicher 524 gespeichert werden kann, das der programmierbaren Zustandsmaschine 520 von 6 zugeordnet ist, gemäß verschiedener Ausführungsformen. Einträge, die der PSM 520 zugeordnet sind, die in dem CAM 524 gespeichert sind, können das PSM-Eintragsformat 700 aufweisen, wie gezeigt. Das Format 700 für einen PSM-Eintrag umfasst eine Eingabemaske 702, einen Tag 704 und eine Ausgabe 706.
  • Die Eingabemaske 702 ist ein Datenwort, das verwendet werden kann, um bestimmte Bits in der Eingabe 660 zu maskieren. Die Eingabemaske 702 weist die gleiche Bitbreite wie die Eingabe 660 auf. Jede Bit-Stelle in der Eingabemaske 702 kann 0 oder 1 abhängig davon sein, ob die entsprechenden Bitposition in Eingabe 660 weg zu maskieren ist oder nicht.
  • Der Tag 704 ist ein Datenwort von mehrere Bits, das verwendet wird, um in dem CAM 524 gespeicherte Einträge nachzuschlagen. Wie ferner nachstehend mit Bezugnahme auf 8 beschrieben, umfasst der Tag 704 einen maskierten Eingabe-Tag 722 und einen aktuellen Zustands-Tag 724. Der maskierte Eingabe-Tag 722 wird mit der maskierte Eingabe verglichen und der aktuellen Zustands-Tag 724 wird mit dem aktuellen Zustandswert verglichen. Basierend auf diesen Vergleichen (z.B., ob die maskierte Eingabe gleich dem maskierten Eingabe-Tag 722 ist und der aktuelle Zustandswert gleich dem aktuellen Zustands-Tag 724 ist), kann ein in dem CAM 524 gespeicherter übereinstimmender Eintrag identifiziert werden und eine entsprechenden Ausgabe 706 abgerufen werden. In verschiedenen Ausführungsformen entspricht ein gegebener Eintrag mit Format 700 einem gegebenen Zustandsübergang; die Eingabemaske 702 und der Tag 704 spezifizieren ein Eingangssignal und aktuellen Zustandsbedingungen für einen Übergang, und die Ausgabe 706 spezifiziert einen nächsten Zustand, in den überzugehen ist, und Ausgangssignale als Antwort auf den Übergang.
  • Die Ausgabe 706 umfasst den nächsten Zustand für die PSM 520, in den überzugehen ist, und Ausgangssignale, die diesem Übergang in den nächsten Zustand zugeordnet sind. Wie gezeigt, umfasst die Ausgabe 706 einen nächsten Zustand 708, Zähleraktionen 710 und einen oder mehrere DFD-Trigger 712. Der nächste Zustand 708 ist der Wert, der den nächsten Zustand für die PSM 520 angibt, und weist die gleichen Bitbreite wie der aktuelle Zustandswert auf, der in dem PSM-Zustand 606 gespeichert ist. Zähleraktionen 710 umfassen ein oder mehrere Bits, die in Zählern 604 eingegeben werden, um ein oder mehrere Operationen an der Zählern zu aktivieren. Die Zähleraktionen 710 können von beliebiger geeigneten Bitbreite sein. In einigen Ausführungsformen können für einen gegebenen Zähler Zähleraktionen 710 ein oder mehrere Bits, welche die durchzuführende Operation angeben (z.B., inkrementieren, dekrementieren, rücksetzen, no-op usw.) und ein oder mehrere zusätzliche Bits umfassen, die einen der Operation zugeordneten Wert angeben (z.B., einen Wert, um den der Zähler zu inkrementieren oder dekrementieren ist, einen Wert, auf den der Zähler zurückzusetzen ist). In einigen anderen Ausführungsformen ist der Wert vordefiniert, welcher der Operation zugeordnet ist, und Zähleraktionen 710 umfassen lediglich das(die) Bit(s), das(die) den durchzuführenden Vorgang angibt(angeben).
  • Ein oder mehrere DFD(Design-for-Debugging)-Triggers 714 umfassen ein oder mehrere Bits, die verwendet werden können, um DFD-Merkmale in der PPU 200 zu triggern. Der DFD-Trigger 714 kann in DFD-bezogene Hardwareeinheiten innerhalb der PPU 200 eingegeben werden. In einigen Ausführungsformen kann der(die) DFD-Trigger 714 ein oder mehrere lokale und/oder nicht lokale ILAs in einem oder mehreren Leistungsmonitore 510 triggern. Wenn getriggert, wird ein ILA 522 aktiviert, um Signaldaten im Verlauf der zur weiteren Analyse zu assemblieren und zu speichern. Der ILA kann ebenfalls getriggert werden, um das Assemblieren und Speichern von Signaldaten einzustellen. Ferner kann(können) in einigen Ausführungsformen der(die) DFD-Trigger 714 zusätzlich ein Modussignal 670 umfassen, das an einem lokalen oder nicht lokalen CAM 524 ausgegeben werden kann, um den Modus des CAM 524 vom PSM-Modus in den ILA-Modus zu ändern. In einigen Ausführungsformen kann der DFD-Trigger(s) 714 ferner ein Signalmuster umfassen (z.B., einen String oder ein Datenwort von Bits). Das Signalmuster spezifiziert einen Satz von Signalwerten, mit denen Signaldaten übereinstimmen sollten, um gespeichert zu werden. Allgemeiner gesagt, kann(können) der(die) DFD-Trigger 714 verschiedene Typen von DFD-Ereignissen triggern, einschließlich und ohne Beschränkung, Triggern einen ILA, Triggern eines Taktstopp usw. Ein Taktstopp-Trigger kann beispielsweise an einen Takt einer Domäne ausgegeben werden, um den der Domäne zugeordneten Takt zu stoppen, um dadurch den Zustand der Hardware innerhalb dieser Domäne zu präservieren. Ferner kann in einigen Ausführungsformen eine PSM 520 oder ein ILA 522, die einen DFD-Trigger empfangen, auf den Trigger antworten oder den Trigger ignorieren.
  • 8 veranschaulicht ein Diagramm des Nachschlagemoduls 608 der programmierbare Zustandsmaschine 520 von 6 gemäß verschiedener Ausführungsformen. Wie oben beschrieben, kann das Nachschlagemodul 608 Daten von dem CAM 524 basierend auf der von dem Eingangsassemblermodul 602 empfangenen Eingabe und dem aktuellen Zustand der PSM 520 erhalten. Die erhaltenen Daten umfassen den nächsten Zustand für die PSM 520, in den überzugehen ist, und Ausgaben, die dem Übergang in den nächsten Zustand zugeordnet sind. Demgemäß erleichtert das Nachschlagemodul 608 den Zustandsübergang durch die PSM 520 und die Ausgabe von Signalen gemäß dem Zustandsübergang durch die PSM 520.
  • Es sollte erkannt werden, dass 8 eine beispielhafte Anordnung und eine Kombination von Logikschaltungen veranschaulicht, die verwendet werden, um die Funktionalität des Nachschlagemoduls 608 zu implementieren. Bei der Implementierung kann die beschriebene Funktionalität mit einer beliebigen technisch machbaren Anordnung und/oder Kombination von Logikschaltungen implementiert werden. Ferner sollte erkannt werden, dass während 8 Operationen auf einem Datenwortniveau veranschaulicht, die gleiche Funktionalität über Operationen auf dem Bitstellenniveau implementiert werden kann (z.B., bitweise Logikschaltungen und Operationen).
  • Wie gezeigt, werden Eingaben 660 von dem Eingangsassemblermodul 602 zuerst durch Eingabemasken 802 maskiert, die von dem CAM 524 erhalten werden. Die Eingabemasken 802 folgen dem oben beschriebenen Format von Eingabemasken 702. Die Eingabe 660 wird jeweils durch Eingabemasken 802(0)-802(n) über UND-Gatter 822(0)-822(n) maskiert, um maskierte Eingaben 812(0)-812(n) zu ergeben. Die Maskierung von Eingaben 660 durch Eingabemasken 802 über UND-Gatter 822 kann gleichlaufend sein.
  • Maskierte Eingaben 812 und der aktuelle Zustand 814 (abgerufen vom PSM-Zustand 606) werden mit von dem CAM 524 erhaltenen Tags 804 verglichenen. Die Tags 804 folgen dem Format des oben beschriebenen Tags 704. Der Vergleich, durchgeführt durch einen Gleichheitskomparator 824, bestimmt, ob eine maskierte Eingabe 812 gleich dem maskierte Eingabe-Tag 722 innerhalb eines Tags 804 ist und ob der aktuellen Zustand 814 gleich dem aktuellen Zustands-Tag 724 innerhalb des Tags 804 ist. Demgemäß vergleicht der Komparator 824(0) die maskierte Eingabe 812(0) mit dem maskierten Eingabe-Tag innerhalb des Tags 804(0) und den aktuellen Zustand 814 mit dem aktuellen Zustands-Tag innerhalb des Tags 804(0). Der Komparator 824(1) vergleicht die maskierte Eingabe 812(1) mit dem maskierten Eingabe-Tag innerhalb des Tags 804(1) und den aktuellen Zustand 814 mit dem aktuellen Zustands-Tag innerhalb des Tags 804(1) und so weiter bis zu dem Komparator 824(n), der maskierten Eingabe 812(n) und dem Tag 804(n). Ein Komparator 824 gibt eine 1 aus, wenn die maskierte Eingabe 812 bestimmt wird, gleich dem maskierten Eingabe-Tag innerhalb eines Tags 804 zu sein, und der aktuellen Zustand 814 bestimmt wird, gleich dem aktuellen Zustand-Tag innerhalb des Tag 804 zu sein, und eine 0 andernfalls. Somit gibt der Komparator 824(0) beispielsweise eine 1 aus, wenn die maskierte Eingabe 812(0) gleich dem maskierten Eingabe-Tag innerhalb des Tags 804(0) ist und der aktuelle Zustand 814 ist gleich dem aktuellen Zustands-Tag innerhalb des Tag 804(0) ist, und gibt andernfalls eine 0 aus. Die Ausgaben der Komparatoren 824 werden jeweiligen Multiplexern 816 als eine Auswahleingabe bereitgestellt. Der Vergleich der Komparatoreingaben durch Komparatoren 824 kann gleichlaufend sein.
  • Jeder Multiplexer 816 wählt ein von zwei Dateneingaben in den Multiplexer basierend auf der von einem Komparator 824 empfangenen Ausgabe aus. In einigen Ausführungsformen umfassen die Dateneingaben in einen Multiplexer 816 eine in dem CAM 524 gespeicherte Ausgabe 806 und einen Nullwert. Die Ausgaben 806 folgen dem Format der oben beschriebenen Ausgabe 706. Wenn die Ausgabe des Komparators 824 gleich 0 ist (die Eingaben in den Komparator 824 sind nicht gleich), dann wählt der Multiplexer 816 den 0 Wert aus. Wenn die Ausgabe von dem Komparator 824 gleich 1 ist (die Eingaben in den Komparator 824 sind gleich), dann wählt der Multiplexer 816 die Ausgabe 806 aus. Demgemäß wählt der Multiplexer 816(0) eine von der Ausgabe 806(0) oder dem Nullwert (0) basierend auf der Ausgabe von dem Komparator 824(0) aus, der Multiplexer 816(1) wählt 1 von der Ausgabe 806(1) oder 0 basierend auf der Ausgabe von dem Komparator 824(1) aus und so weiter. Die von dem Multiplexer 816 durchgeführte Auswahloperation kann gleichlaufend sein und jeder Multiplexer 816 gibt entweder eine Ausgabe 806 oder einen Nullwert aus.
  • Die Ausgaben der Multiplexer 816 werden in einen ODER-Gatter 826 bereitgestellt. Das ODER-Gatter 826 assembliert die Ausgaben der Multiplexer 816 in eine Ausgabe 820 des Nachschlagemoduls 608. Das Nachschlagemodul 608 kann jeweilige Bitstellen in der Ausgabe 820 an andere Komponenten in der PSM 520 ausgeben. Beispielsweise wird der nächste Zustand 708 innerhalb der Ausgabe 820 dem PSM-Zustand 606 bereitgestellt, Zähleraktionen 710 innerhalb der Ausgabe 820 werden den Zählern 604 bereitgestellt und DFD-Trigger 712 innerhalb der Ausgabe 720 werden einer beliebigen Anzahl von DFD-zugeordneten Einheiten, PSMs und/oder ILAs innerhalb der PPU 200 bereitgestellt.
  • In einigen Ausführungsformen ist n gleich der Anzahl von der PSM 520 zugeordneten Dateneinträge, die in dem CAM 524 gespeichert sind. Jeder Dateneintrag, welcher der PSM zugeordnet ist, umfasst eine Eingabemaske 802, einen Tag 804 und eine Ausgabe 806; und umfasst eine Bedingung zum Übergehen in einen nächsten Zustand (z.B., bestimmte Eingangssignale und den aktuellen Zustand mit spezifizierten Werten), den nächsten zu übergehenden Zustand und diesem Übergang zugeordnete Ausgaben. Somit kann das Nachschlagemodul 608 mit einer Eingabe 660 und dem aktuellen Zustand 814 jede mögliche in dem CAM 524 gespeicherte Zustandsübergangsbedingung prüfen, die Bedingung bestimmen, die erfüllt ist, und die entsprechenden nächsten Zustandsübergang und zugeordnete Ausgaben erhalten.
  • In verschiedenen Ausführungsformen sollte im Normalbetrieb die PSM 520 eine gegebene Eingabe 660 und ein gegebener aktueller Zustand 814 lediglich zu einem übereinstimmenden Tag 804 führen. Das heißt, dass im Normalbetrieb basierend auf den Ausgaben der Komparatoren 824 nur ein Multiplexer unter den Multiplexern 816 eine Ausgabe 806 ausgibt und die anderen Multiplexer Nullwerte ausgeben. Demgemäß folgt die Ausgabe 820 dem Format der Ausgabe 706 und sollte dieselbe wie eine der Ausgaben 806(0)-806(n) sein. Wenn mehrere Multiplexer 816 eine Ausgabe 806 zur Ausgabe an das ODER-Gatter 826 auswählen, dann kann dies buggy (z.B., fehlerhafte, schlecht ausgestaltete) Dateneinträge angeben, die in dem CAM 524 gespeichert sind. In einigen Ausführungsformen kann das Nachschlagemodul 608 eine derartige Bedingung erfassen (von mehreren Multiplexern 816, die eine Ausgabe 806 ausgeben) und ein Fehlersignal ausgeben, um den Benutzer zu warnen, eine Debugging-Aktion vorzunehmen (z.B., die Zustandsübergangsbedingungen in den Dateneinträgen zu debuggen und die Dateneinträge in dem CAM 824 mit debuggten Dateneinträgen über Programmiereingaben 650 zu überschreiben).
  • In einigen Ausführungsformen startet die PSM 520 beim Start-up anfangs in einem Ruhe- oder Stand-by-Zustand und bleibt in dem Ruhe- oder Stand-by-Zustand ungeachtet der Eingabe 660, bis ein Benutzer-aktiviertes Zustandsübergang-Triggersignal einen Zustandsübergang in einen anderen Zustand zwingt. Die PSM 520 kann die Benutzer-aktivierten, umfassenden Logikschaltungen (nicht gezeigt) empfangen, die konfiguriert sind, um dieses Zustandsübergangs-Triggersignal als eine Eingabe zu empfangen und in einen unterschiedlichen Zustand gemäß dem Zustandsübergangs-Triggersignal überzugehen.
  • 9 ist ein Ablaufdiagramm von Verfahrensschritten zum Überwachen der Leistung über eine programmierbare Zustandsmaschine, gemäß verschiedener Ausführungsformen. Obwohl die Verfahrensschritte in Verbindung mit den Systemen von 1-8 beschrieben sind, werden Personen mit normalen fachlichen Fähigkeiten verstehen, dass jedes System, das konfiguriert ist, um die Verfahrensschritten in einer beliebigen Reihenfolge durchzuführen, innerhalb des Umfangs der vorliegenden Offenbarung ist.
  • Wie gezeigt, beginnt ein Verfahren 900 bei Schritt 902, wobei ein Leistungsmonitor 510 einen Satz von Signalen empfängt. Die PSM 520 kann einen Satz von Signalen vom Watch-Bus 530 empfangen.
  • Bei Schritt 904 erzeugt der Leistungsmonitor 510 eine Zustandsmaschineneingabe basierend auf dem Satz von Signalen. Die PSM 520 (z.B., das Eingangsassemblermodul 602) verarbeitet die von dem Watch-Bus 530 empfangenen Signale und optional zusätzliche Signale (z.B., Zähler 604), um eine Eingabe 660 zu erzeugen.
  • Bei Schritt 906 maskiert der Leistungsmonitor 510 die Zustandsmaschineneingabe, um eine maskierte Eingabe zu erzeugen. Die PSM 520 (z.B., das Nachschlagemodul 608) maskiert die Eingabe 660 mit einer Eingabemaske 802, um eine maskierte Eingabe 812 zu erzeugen. In einigen Ausführungsformen kann die PSM 520 die Eingabe 660 mit jeweiligen mehrere Eingabemasken 802 gleichlaufend maskieren, um mehrere maskierte Eingaben 812 zu erzeugen.
  • Bei Schritt 908 bestimmt der Leistungsmonitor 510, dass die maskierte Eingabe mit einem Tag übereinstimmt. Die PSM 520 (z.B., das Nachschlagemodul 608) kann bestimmen, dass die maskierte Eingabe mit einem maskierten Eingabe-Tag 722 innerhalb eines der Tags 804 übereinstimmt. Die PSM 520 bestimmt zusätzlich, dass der aktuelle Zustand 814 mit dem des aktuellen Zustands-Tags 724 innerhalb eines der Tags 804 übereinstimmt. In verschiedenen Ausführungsformen ist jede maskierte Eingabe 812 jeweils mit der aktuellen Zustand 814 kombiniert (z.B., verkettet) und die Kombinationen sind werden mit entsprechenden Tags 804 über Komparatoren 824 verglichen.
  • Bei Schritt 910 gibt, als Antwort auf das Bestimmen, dass die maskierte Eingabe mit einem Tag übereinstimmt, der Leistungsmonitor 510 einen Satz von Ausgangssignalen aus. Die PSM 520 (z.B., das Nachschlagemodul 608) gibt eine Ausgabe 820 basierend auf einer Übereinstimmung zwischen einer maskierten Eingabe 812 und dem aktuellen Zustand 814 an einen Tag 804 aus. Die Ausgabe 820 umfasst einen nächsten Zustand 708, Zähleraktionen 710 und einen DFD-Trigger 712.
  • Bei Schritt 912 geht der Leistungsmonitor 510 in einen nächsten Zustand basierend auf einem in dem Satz von Ausgangssignalen umfassten nächsten Zustandssignal. Die PSM 520 stellt den nächsten Zustand 708, der in der Ausgabe 820 umfasst ist, in den PSM-Zustand 606 ein. Der PSM-Zustand 606 speichert den nächsten Zustand 708, der den aktuellen Zustandswert ersetzt. Das Ersetzen des aktuellen Zustandswerts mit dem nächsten Zustand 708 (dem neuen aktuellen Zustandswert) entspricht einem Übergang durch die PSM 520 von einem Zustand in einen anderen.
  • Bei Schritt 914 führt der Leistungsmonitor 510 eine oder mehrere Aktionen an einem oder mehreren Zählern basierend auf einem oder mehreren Zähleraktionssignalen durch, die in dem Satz von Ausgangssignalen umfasst sind. Die PSM 520 stellt die Zähleraktionen 710, die in der Ausgabe 820 umfasst sind, Zählern 604 bereit. Die Zähler 604 führen die Operationen durch (z.B., inkrementieren, dekrementieren, rücksetzen, no-op usw.), die durch die Werte in den Zähleraktionen 710 angegeben werden.
  • Interner Logikanalysator mit gemeinsamer genutzter Speicherung
  • 10 veranschaulicht einen internen Logikanalysator das Leistungsüberwachungssystem von 5 gemäß verschiedenen Ausführungsformen. Der Leistungsmonitor 510 implementiert einen internen Logikanalysator (ILA) 522 über ein oder mehrere Hardwareeinheiten und/oder Schaltungen in Verbindung mit einem inhaltsadressierbaren Speicher 524 und optional einer PSM 520. 10 stellt einen ILA 522 (1) und einen CAM 524(1) von dem Leistungsmonitor 510(1) anschaulich dar, wobei jedoch erkannt werden sollte, dass andere ILAs 520 und CAMs 524 in der PPU 200 eine ähnliche Struktur, wie die jeweils von dem ILA 520(1) und dem CAM 524(1), ausweisen können, wie gezeigt. Der ILA 520(1) umfasst, wie gezeigt, ein Triggermodul 1002, einen Zeitstempelzähler 1004, ein Signalassembliermodul 1006 und ein Abtastmodul 1008. Der CAM 524(1) umfasst, wie gezeigt, einen Speicher 632, wie oben mit Bezugnahme auf 6 beschrieben.
  • Das Triggermodul 1002 implementiert eine oder mehrere Logikschaltungen, die eine Signaldatensammlung durch den ILA 522(1) basierend auf einem oder mehreren Eingangssignalen aktivieren oder deaktivieren. Eingaben in das Triggermodul 1002 können ein oder mehrere Signalen von dem Watch-Bus 530 und Triggersignale (z.B., DFD-Trigger 712) von einer lokalen PSM (z.B., PSM 520(1)), einer nicht lokalen PSM (z.B., PSM 520(2)) und/oder einem oder mehreren anderen ILAs 522 (z.B., ILA 522(2)) umfassen. Die Logikschaltungen verarbeiten diese Eingangssignale, um zu bestimmen, ob die Eingangssignale eine Triggerbedingung erfüllen. Wenn die Triggerbedingung erfüllt ist, gibt das Triggermodul 1002 ein Signal an das Abtastmodul 1008 aus, um eine Signaldatensammlung abhängig von der Triggerbedingung, die erfüllt ist, zu aktivieren oder zu deaktivieren. Demgemäß kann der ILA 522 in Verbindung mit einer lokalen und/oder einer nicht lokalen PSM 520 und/oder einem oder mehreren anderen ILAs 522 arbeiten. In einigen Ausführungsformen kann das Triggermodul 1002 ebenfalls einen von ein DFD-Trigger empfangenes Signalmuster an das Abtastmodul 1008 ausgeben.
  • Der Zeitstempelzähler 1004 speichert einen Zähler, der einem Zeitstempel entspricht, wobei der Zeitstempelzähler 1004 eine Speicherung (z.B., Register), um den Zeitstempelzählerwert zu halten, und Logikschaltungen umfasst, um Operationen an dem Zeitstempelzählerwert durchzuführen (z.B., inkrementieren, rücksetzen). In einigen Ausführungsformen umfasst der Zeitstempelzähler 1004 einen Takt. Die Logikschaltungen für den Zeitstempelzähler 1004 kann einen Operation automatisch (z.B., automatisch Zähler jede Mikrosekunde inkrementieren) oder als Antwort auf ein Eingangssignal in Zeitstempelzähler 1004 durchführen. Der Zeitstempelzähler 1004 kann einen aktuellen Zeitstempelzählerwert an das Signalassembliermodul 1006 ausgeben.
  • Das Signalassembliermodul 1006 assembliert Eingangssignale in Datenwörter (oder Abschnitte von Datenwörtern) zur Speicherung in dem CAM 524(1). Das Signalassembliermodul 1006 assembliert und/oder anordnet ein oder mehrere Signale von dem Watch-Bus 530 und optional zusätzliche Signale (z.B., ein oder mehrere Flag-Signale, ein oder mehrere Zählerwerte) in einem Datenwortabschnitt und verkettet diesen Abschnitt mit einem von dem Zeitstempelzähler 1004 erhaltenen Zeitstempelzählerwert, um dadurch ein Datenwort zu erzeugen. Demgemäß erzeugt das Signalassembliermodul 1006 ein Datenwort basierend auf Signalen von dem Watch-Bus 530 und einem entsprechenden Zeitstempelzählerwert. Das Signalassembliermodul 1006 kann beliebige geeignete Logikschaltung(en) zum Assemblieren der Signale und Erzeugen des Datenworts umfassen. Das Signalassembliermodul gibt das Datenwort an das Abtastmodul 1008 aus. Ein Format für die durch das Signalassembliermodul 1006 erzeugten Datenwörter wird nachstehend wird mit Bezugnahme auf 11 beschrieben.
  • Das Abtastmodul 1008 tastet Datenwörter ab, die durch das Signalassembliermodul 1006 erzeugt wurden, und speichert die abgetasteten Datenwörter in dem CAM 524(1), das im ILA-Modus arbeitet. Als Antwort auf ein Aktivierungssignal von dem Triggermodul 1002 speichert das Abtastmodul 1008 von dem Signalassembliermodul 1006 empfangene Datenwörter in dem CAM 524. Das Abtastmodul 1008 kann bestimmen, welche Datenwörter zur Speicherung in dem CAM 524(1) basierend auf ein Signalmuster abzutasten sind (z.B., ein von dem Triggermodul 1002 empfangenes Signalmuster). In einigen Ausführungsformen kann das Abtastmodul 1008 Logikschaltungen implementieren, die prüfen, ob von dem Signalassembliermodul 1006 empfangene Datenwörter, welche die Zeitstempel nicht umfassen, mit dem Signalmuster übereinstimmen, und tastet zur Speicherung in dem CAM 524(1) jene Datenwörter ab, die mit dem Signalmuster übereinstimmen, während jene verworfen werden, die nicht mit dem Signalmuster übereinstimmen. Das Abtastmodul 1008 gibt die abgetasteten Datenwörter an den CAM 524(1) aus, der die abgetasteten Datenwörter in dem Speicher 632 speichert, wobei jegliche PSM-zugeordnete Dateneinträge im Speicher 632 überschrieben werden. In einigen Ausführungsformen kann das Abtastmodul 1008 ein Triggersignal an andere ILAs 522 ausgeben. Das Triggersignal kann ein Trigger sein, der ähnlich zu einem DFD-Trigger ist, und kann den(die) anderen ILA(s) 522 triggern, um beispielsweise das Speichern von Daten in einem CAM 524 zu starten oder zu stoppen. Das Abtastmodul 1008 kann das Triggersignal als Antwort auf die Erfüllung einer oder mehreren Bedingungen ausgeben (z.B., ist der CAM 524(1) voll mit Daten von dem Abtastmodul 1008).
  • Wenn der Speicher 632 vollständig mit gespeicherten Datenwörtern von dem Abtastmodul 1008 gefüllt ist (d.h., alle der PSM-zugeordneten Dateneinträge werden mit Datenwörtern von dem Abtastmodul 1008 ersetzt), kann in einigen Ausführungsformen der CAM 524(1) dem Abtastmodul 1008 signalisieren, dass der Speicher 632 voll ist und das Abtasten von Datenwörtern stoppen. Als Antwort darauf, dass der Speicher 632 voll ist, kann das Abtastmodul 1008 signalisieren, das Abtasten von Datenwörtern zu stoppen und dem Zeitstempelzähler 1004 signalisieren, sich zurückzusetzen. In einigen anderen Ausführungsformen kann der CAM 524(1) fortfahren, abgetastete Datenwörter in dem Speicher 632 zu speichern, nachdem der Speicher 632 mit Datenwörtern voll ist, wobei das älteste Datenwort überschrieben wird.
  • Der CAM 524 kann nach Arbeiten im ILA-Modus über ein Modussignal 670 in den PSM-Modus zurückgeschaltet werden. Weil ein oder mehrere PSM-zugeordnete Dateneinträge in dem Speicher 632 überschrieben wurden, kann ein Benutzer eine Programmmiereingabe 650 aktivieren, um den CAM 524 mit PSM-zugeordneten Dateneinträgen wieder aufzufüllen (z.B., um das Programmieren der PSM 520 wiederherzustellen).
  • In einigen Ausführungsformen umfasst der ILA 522 zusätzliche Logikschaltungen (nicht gezeigt) zum Durchführen von Analysen an den Datenwörtern, die durch das Abtastmodul 1008 abgetastet und in dem CAM 524 gespeichert werden. Die Logikschaltungen können die Datenwörter von dem CAM 524 abrufen. Zusätzlich oder alternativ können andere Einheiten in der PPU 200 die Datenwörter von dem CAM 524 abrufen, um Analysen an den Datenwörter durchzuführen.
  • 11 veranschaulicht ein Format eines Eintrags in einem inhaltsadressierbaren Speicher, der Daten für den internen Logikanalysator von 10 speichert, gemäß einigen Ausführungsformen. Der CAM 524 kann Datenwörter speichern, die durch das Signalassembliermodul 1006 erzeugt und durch das Abtastmodul 1008 abgetastet wurden, die dem ILA 522 zugeordnete Dateneinträge sind. Das Format 1100 für das Datenwort umfasst Signaldaten 1102 und den Zeitstempel 1104. Die Signaldaten 1102 umfassen Signale, die von dem Watch-Bus 530 und/oder anderen Signalen (z.B., Flags, Zählern) empfangen werden. Der Zeitstempel 1104 umfasst einen von dem Zeitstempelzähler 1004 erhaltenen Zeitstempelzählerwert.
  • 12 ist ein Ablaufdiagramm von Verfahrensschritten zum Triggern eines internen Logikanalysators über eine programmierbare Zustandsmaschine gemäß verschiedenen Ausführungsformen. Obwohl die Verfahrensschritten in Verbindung mit den Systemen von 1-11 beschrieben sind, werden Personen mit normalen fachlichen Fähigkeiten verstehen, dass jedes System, das konfiguriert ist, um die Verfahrensschritten in einer beliebigen Reihenfolge durchzuführen, innerhalb des Umfangs der vorliegenden Offenbarung ist.
  • Wie gezeigt, beginnt ein Verfahren 1200 bei Schritt 1202, wobei ein Leistungsmonitor 510 einen Satz von Signalen empfängt. Die PSM 520 kann einen Satz von Signalen von dem Watch-Bus 530 empfangen.
  • Bei Schritt 1204 erzeugt der Leistungsmonitor 510 eine Zustandsmaschine Eingabe basierend auf dem Satz von Signalen. Die PSM 520 (z.B., das Eingangsassemblermodul 602) verarbeitet die von dem Watch-Bus 530 empfangenen Signale und optional zusätzliche Signale (z.B., Zähler 604), um eine Eingabe 660 zu erzeugen.
  • Bei Schritt 1206 maskiert der Leistungsmonitor 510 die Zustandsmaschineneingabe, um eine maskierte Eingabe zu erzeugen. Die PSM 520 (z.B., das Nachschlagemodul 608) maskiert die Eingabe 660 mit einer Eingabemaske 802, um eine maskierte Eingabe 812 zu erzeugen. In einigen Ausführungsformen kann die PSM 520 die Eingabe 660 mit jeweiligen mehreren Eingabemasken 802 gleichlaufend maskieren, um mehrere maskierte Eingaben 812 zu erzeugen.
  • Bei Schritt 1208 bestimmt der Leistungsmonitor 510, dass die maskierte Eingabe mit einem Tag übereinstimmt, wobei der Tag in einem Speicher gespeichert ist. Die PSM 520 (z.B., das Nachschlagemodul 608) kann bestimmen, dass die maskierte Eingabe mit einem maskierten Eingabe-Tag 722 innerhalb eines der Tags 804 erhaltenen von CSM 524 übereinstimmt. Die PSM 520 bestimmt außerdem, dass der aktuelle Zustand 814 mit dem aktuellen Zustands-Tag 724 innerhalb eines der von dem CSM 524 erhaltenen Tags 804 übereinstimmt. In verschiedenen Ausführungsformen ist jede maskierte Eingabe 812 jeweils mit dem aktuellen Zustand 814 kombiniert (z.B., verkettet) und die Kombinationen werden mit entsprechenden Tags 804 verglichen, die von dem CSM 524 über Komparatoren 824 erhalten werden.
  • Bei Schritt 1210 gibt, als Antwort auf das Bestimmen, dass die maskierte Eingabe mit einem Tag übereinstimmt, der Leistungsmonitor 510 einen Satz von Ausgangssignale aus. Die PSM 520 (z.B., das Nachschlagemodul 608) gibt eine Ausgabe 820 basierend auf einer Übereinstimmung zwischen einer maskierten Eingabe 812 und dem aktuellen Zustand 814 an einen Tag 804 aus. Die Ausgabe 820 umfasst einen nächsten Zustand 708, Zähleraktionen 710 und einen DFD-Trigger 712.
  • Bei Schritt 1212 überträgt der Leistungsmonitor 510 ein Triggersignal, das in dem Satz von Ausgangssignalen umfasst ist, an einen internen Logikanalysator. Die PSM 520 gibt einen ILA-Trigger (z.B., den DFD-Trigger 712), der in der Ausgabe 820 umfasst ist, an einen lokalen oder nicht lokalen ILA 522 aus.
  • Bei Schritt 1214 speichert als Antwort auf das Triggersignal der Leistungsmonitor 510 einen zweiten Satz von Signalen in dem Speicher über den internen Logikanalysator. Der ILA 522 tastet als Antwort auf den von der PSM 520 empfangenen Trigger ab und speichert in dem CAM 524 ein oder mehrere Datenwörter, die von Signalen erzeugt werden, die von dem Watch-Bus 530 empfangen wurden. Die Datenwörter ersetzen welche Inhalte auch immer in dem CAM 524 gespeichert sind (z.B., PSM-zugeordnete Einträge).
  • Die hier offenbarten Techniken können mit jedem Beschleuniger oder Prozessor verwendet werden, der gegenwärtig oder in der Zukunft einen Hardwareleistungsmonitor innerhalb der Beschleuniger oder Prozessor umfassen kann, einschließlich beispielsweise einer Zentralverarbeitungseinheit (CPU), einer Graphikverarbeitungseinheit (GPU), einer Intelligenzverarbeitungseinheit (IPU), einer neuronalen Verarbeitungseinheit (NPU), einer Tensorverarbeitungseinheit (TPU), einem neuronalen Netzwerkprozessor (NNP), einer Datenverarbeitungseinheit (DPU), einer Sichtverarbeitungseinheit (VPU), einer anwendungsspezifischen integrierten Schaltung (ASIC), einem konfigurierten Field Programmable Gate Array (FPGA) und dergleichen.
  • In der Summe kann ein Hardwareleistungsmonitor einen internen Logikanalysator umfassen, der eine Speichereinheit mit einer programmierbaren Zustandsmaschine gemeinsam nutzt, die ebenfalls in dem Leistungsmonitor implementiert ist. Der interne Logikanalysator kann durch die programmierbare Zustandsmaschine innerhalb des gleichen Leistungsmonitors und/oder innerhalb eines Leistungsmonitor für eine weitere Domäne getriggert werden. Der interne Logikanalysator kann Daten sammeln und die Daten in der gemeinsam genutzten Speichereinheit speichern.
  • Ein technologischer Vorteil der offenbarten Techniken relativ zum Stand der Technik ist, dass, weil der interne Logikanalysator eine Speichereinheit mit der programmierbaren Zustandsmaschine gemeinsam nutzt, die erforderliche Chipfläche zum Implementieren des internen Logikanalysators in dem Leistungsmonitor verringert wird. Diese und andere technologische Vorteile stellen eine oder mehrere technologische Weiterentwicklungen gegenüber den Vorgehensweisen des Standes der Technik dar.
  • Jede und alle Kombinationen von allen der Anspruchselemente, die in irgendeinem der Ansprüche zitiert sind und/oder alle Elemente, die in dieser Anmeldung beschrieben werden, in jeder Art, fallen in den betrachteten Umfang und Schutz der vorliegenden Erfindung.
  • Die Beschreibungen der verschiedenen Ausführungsbeispiele sind nur für veranschaulichende Zwecke gegeben, aber sind nicht als auf die offenbarten Ausführungsbeispiele erschöpft oder beschränkt gedacht. Viele Modifikationen und Variationen werden den Fachleuten ersichtlich sein, ohne von dem Umfang und Geist der beschriebenen Ausführungsbeispiele abzuweichen.
  • Aspekte der vorliegenden Ausführungsbeispiele können als ein System, Verfahren oder Computerprogramm-Produkt verkörpert werden. Dementsprechend können Aspekte der vorliegenden Offenbarung die Form eines vollständigen Hardware-Ausführungsbeispiel, eines vollständigen Software-Ausführungsbeispiels (einschließlich Firmware, residierender Software, Mikro-Code, usw.) oder eines Ausführungsbeispiels, das Software und Hardwareaspekte kombiniert, annehmen, die alle im Allgemeinen hierin als ein „Modul“, ein „System“ oder als ein „Computer“ in Bezug genommen werden können. Zusätzlich kann jede Hardware und/oder Software-Technik, Prozess, Funktion, Komponente, Engine, Modul oder System, die/das in der vorliegenden Offenbarung beschrieben wird, als ein Schaltkreis oder Satz von Schaltkreisen implementiert werden. Ferner können Aspekte der vorliegenden Offenbarung die Form eines Computerprogramm-Produktes annehmen, das in einem oder mehreren computerlesbaren Medium/Medien verkörpert ist, das/die computerlesbaren Programmcode darauf verkörpert hat/haben.
  • Jede Kombination von einem oder mehreren computerlesbaren Medium/Medien kann verwendet werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann zum Beispiel, aber nicht darauf beschränkt, ein elektronisches, magnetisches, optisches, elektromagnetisches, infrarotes oder Halbleiter System, Apparat oder Vorrichtung oder jede geeignete Kombination des vorgenannten sein. Spezifischere Beispiele (eine nicht erschöpfende Liste) des computerlesbaren Speichermediums würden das Folgende umfassen: eine elektrische Verbindung, die einen oder mehrere Drähte hat, eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (random Zugriff memory; RAM), einen Festwertspeicher (read-only-memory; ROM), einen löschbaren programmierbaren Nur-Lese-Speicher (erasable programmable read-only memory; EPROM oder Flashspeicher), eine optische Faser, einen tragbaren Compactdisk-Festwertspeicher (CD-ROM), eine optische Speichervorrichtung, eine magnetische Speichervorrichtung oder jede geeignete Kombination des vorgenannten. In dem Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes materielle Medium sein, das ein Programm enthalten oder speichern kann, zur Verwendung durch oder in Verbindung mit einem Instruktionen ausführenden System, Apparat oder Vorrichtung.
  • Aspekte der vorliegenden Offenbarung werden oben mit Bezug auf Flussdiagramm-Darstellungen und/oder Blockdiagrammen von Verfahren, Apparaten (Systemen) und Computerprogramm-Produkten gemäß Ausführungsbeispielen der Offenbarung beschrieben. Es wird verstanden werden, dass jeder Block der Flussdiagramm-Darstellungen und/oder Blockdiagramme und Kombinationen von Blöcken in den Flussdiagramm-Darstellungen und/oder Blockdiagrammen mittels Computerprogramm-Instruktionen implementiert werden kann. Diese Computerprogramm-Instruktionen können einem Prozessor eines Universalrechners, Spezialrechners (special purpose computer) oder einem anderen programmierbaren Datenprozessier-Apparat bereitgestellt werden, um eine Maschine hervorzubringen. Die Instruktionen, wenn über den Prozessor des Computers oder eines anderen programmierbaren Datenprozessier-Apparats ausgeführt, ermöglichen die Implementierung der Funktionen/Vorgänge, die in dem Flussdiagramm und/oder Blockdiagramm-Block oder Blöcken spezifiziert sind. Solche Prozessoren können, ohne Beschränkung, Universalprozessoren, Spezialprozessoren, anwendungsspezifische Prozessoren oder Gebiet-Programmable Gate Arrays sein.
  • Die Flussdiagramme und Blockdiagramme in den Figuren zeigen die Architektur, Funktionalität und Operation von möglichen Implementierungen von Systemen, Verfahren und Computerprogramm-Produkten gemäß verschiedenen Ausführungsbeispielen der vorliegenden Offenbarung. In diesem Zusammenhang kann jeder Block in dem Flussdiagramm oder Blockdiagrammen ein Modul, Segment oder Teil von Code repräsentieren, das/der eine oder mehrere ausführbare Instruktionen zum Implementieren der spezifizierten logischen Funktion(en) aufweist. Es sollte auch bemerkt werden, dass, in manchen alternativen Implementierungen, die Funktionen, die in dem Block genannt sind, in anderer Reihenfolge wie in den Figuren gezeigt auftreten können. Zum Beispiel können, zwei Blöcke die in Aufeinanderfolge gezeigt werden, tatsächlich, im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal in umgekehrter Reihenfolge ausgeführt werden, abhängig von der involvierten Funktionalität. Es wird auch beachtet werden, dass jeder Block der Blockdiagramme und/oder Flussdiagramm-Darstellung und Kombination von Blöcken in den Blockdiagrammen und/oder Flussdiagramm-Darstellung mittels Spezialzweck-Hardwarebasierter-Systeme (special purpose Hardware-Basierter Systemen), die die spezifizierten Funktionen oder Vorgänge durchführen, oder Kombinationen von Spezialzweck-Hardware und Computerinstruktionen implementiert werden kann.
  • Während das Vorgehende auf Ausführungsbeispiele der vorliegenden Offenbarung gerichtet ist, können andere und weitere Ausführungsbeispiele der Offenbarung formuliert werden, ohne von dem grundsätzlichen Umfang davon abzuweichen, und der Schutzumfang davon ist mittels der folgenden Ansprüche bestimmt.

Claims (20)

  1. Verfahren, umfassend: Empfangen eines Satz von einem oder mehreren Signalen; Erzeugen einer ersten Eingabe basierend auf dem Satz von einem oder mehreren Signalen und einer ersten Eingabemaske, die einer ersten Zustandsübergangsbedingung zugeordnet ist, wobei die erste Eingabemaske und die erste Zustandsübergangsbedingung in einem ersten Dateneintrag in ein Speicher gespeichert sind, der mit ein Leistungsmonitor verbunden ist; Bestimmen, basierend auf der erste Eingabe und einem aktuellen Zustand, dass die erste Zustandsübergangsbedingung erfüllt ist; und als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, Überführen des Leistungsmonitors von dem aktuellen Zustand in einen ersten Zustand, wobei der erste Zustand in dem Speicher gespeichert ist und mit der erste Zustandsübergangsbedingung verbunden ist.
  2. Verfahren gemäß Anspruch 1, wobei die erste Zustandsübergangsbedingung einen Tag umfasst.
  3. Verfahren gemäß Anspruch 2, wobei das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, ein Bestimmen umfasst, dass eine Kombination der erste Eingabe und des aktuellen Zustand mit dem Tag übereinstimmt.
  4. Verfahren gemäß Anspruch 3, wobei der Tag einen ersten Abschnitt für Vergleich mit der ersten Eingabe und einen zweiten Abschnitt für Vergleich mit dem aktuellen Zustand umfasst.
  5. Verfahren gemäß einem vorangehenden Anspruch, ferner umfassend: als Antwort auf Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, Durchführen einen Operation an einem Zähler.
  6. Verfahren gemäß Anspruch 4, wobei der erste Dateneintrag ein oder mehrere Ausgangssignale einschließlich eines Signals umfasst, das eine an dem Zähler durchzuführende Operation angibt, und wobei das Durchführen der Operation an dem Zähler ein Übertragen des Signals, das die an dem Zähler durchzuführende Operation angibt, an eine Logikschaltung umfasst, die konfiguriert ist, um die Operation an dem Zähler durchzuführen.
  7. Verfahren gemäß einem vorangehenden Anspruch, wobei der erste Dateneintrag ferner ein Triggersignal umfasst, wobei das Verfahren ferner umfasst: als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, Ausgeben des Triggersignals an einen Logikanalysator.
  8. Verfahren gemäß einem vorangehenden Anspruch, ferner umfassend: Empfangen eines zweiten Satzes von einem oder mehreren Signalen; Erzeugen ein zweiten Eingabe basierend auf dem zweiten Satz von einem oder mehreren Signalen und einer zweiten Eingabemaske, die mit einer zweiten Zustandsübergangsbedingung verbunden ist, wobei die zweite Eingabemaske und der zweiten Zustandsübergangsbedingung in einem zweiten Dateneintrag in dem Speicher gespeichert sind; Bestimmen, basierend auf der zweiten Eingabe und dem ersten Zustand, dass die zweiten Zustandsübergangsbedingung erfüllt ist; und als Antwort auf das Bestimmen, dass die zweite Zustandsübergangsbedingung erfüllt ist, Überleiten des Leistungsmonitors von dem erste Zustand in einen zweiten Zustand, wobei der zweiten Zustand in dem Speicher gespeichert wird und mit der zweiten Zustandsübergangsbedingung verbunden wird.
  9. Verfahren gemäß einem vorangehenden Anspruch, wobei der Speicher ein inhaltsadressierbarer Speicher umfasst.
  10. Verfahren gemäß einem vorangehenden Anspruch, ferner umfassend ein Ersetzen des ersten Dateneintrags in dem Speicher mit einem zweiten Dateneintrag, wobei der zweite Dateneintrag eine zweite Zustandsübergangsbedingung und eine zweite Eingabemaske umfasst.
  11. System, umfassend: einen Prozessor umfassend einen Satz von Logikschaltungen die mit einer Zustandsmaschine verbunden sind; und einen Speicher umfassend in dem Prozessor; wobei der Prozessor: über den Satz von Logikschaltungen, einen Satz von einem oder mehreren Signalen empfängt; über den Satz von Logikschaltungen, eine erste Eingabe erzeugt basierend auf dem Satz von einem oder mehreren Signalen und einer ersten Eingabemaske, die einer ersten Zustandsübergangsbedingung zugeordnet ist, wobei die erste Eingabemaske und die erste Zustandsübergangsbedingung in einem ersten Dateneintrag in dem Speicher gespeichert sind; über den Satz von Logikschaltungen, basierend auf der ersten Eingabe und einem aktuellen Zustand bestimmt, dass die erste Zustandsübergangsbedingung erfüllt ist; und als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, , mittels des Satzes von Logikschaltungen, den Prozessor von dem aktuellen Zustand in einen ersten Zustand zu überführen, wobei der erste Zustand in dem Speicher gespeichert und mit der ersten Zustandsübergangsbedingung verbunden ist, wobei die erste Zustandsübergangsbedingung, der aktuellen Zustand und der erste Zustand mit der Zustandsmaschine verbunden sind.
  12. System gemäß Anspruch 11, wobei der Speicher einen inhaltsadressierbaren Speicher umfasst.
  13. System gemäß Anspruch 11 oder 12, wobei der Prozessor den ersten Dateneintrag in dem Speicher mit einem zweiten Dateneintrag ersetzt, wobei der zweite Dateneintrag eine zweite Zustandsübergangsbedingung, die der Zustandsmaschine zugeordnet ist, und eine zweite Eingabemaskeumfasst.
  14. System gemäß einem der Ansprüche 11 bis 13, wobei der Prozessor, als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, mittels des Satzes von Logikschaltungen eine Operation an einem Zähler durchführt, welcher der Zustandsmaschine zugeordnet ist.
  15. System gemäß Anspruch 14, wobei der erste Dateneintrag ein oder mehrere Ausgangssignale umfasst, wobei das eine oder die mehreren Ausgangssignale ein Signal umfassen, das die an dem Zähler durchzuführende Operation angibt, wobei der Prozessor eine Logikschaltung umfasst, die dem Zähler zugeordnet ist, und wobei das Durchführen der Operation an dem Zähler das Übertragen des Signals umfasst, das die Operation angibt, die an dem Zähler zu der Logikschaltung durchzuführen ist, die dem Zähler zugeordnet ist.
  16. System gemäß einem der Ansprüche 11 bis 15, wobei der erste Dateneintrag ferner ein Triggersignal umfasst, wobei der Prozessor einen Logikanalysator umfasst; und wobei der Prozessor, als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, ferner mittels des Satzes von Logikschaltungen das Triggersignal an den Logikanalysator ausgibt.
  17. System gemäß einem der Ansprüche 11 bis 16, wobei der Prozessor: empfängt, mittels des Satzes von Logikschaltungen, einen zweiten Satz von einem oder mehreren Signalen; erzeugt, über den Satz von Logikschaltungen, eine zweite Eingabe basierend auf dem zweiten Satz von einem oder mehreren Signalen und einer zweiten Eingabemaske, die einer zweiten Zustandsübergangsbedingung zugeordnet ist, wobei die zweite Eingabemaske und die zweiten Zustandsübergangsbedingung in einem zweiten Dateneintrag in dem Speicher gespeichert sind; bestimmt, mittels des Satzes von Logikschaltungen, basierend auf der zweiten Eingabe und dem ersten Zustand, dass die zweite Zustandsübergangsbedingung erfüllt ist; und als Antwort auf das Bestimmen, dass die zweite Zustandsübergangsbedingung erfüllt ist, mittels des Satzes von Logikschaltungen, den Prozessor von dem ersten Zustand in einen zweiten Zustand, wobei der zweite Zustand in dem Speicher gespeichert und der zweiten Zustandsübergangsbedingung zugeordnet ist.
  18. Nichttransitorisches computerlesbares Medium, das Programmanweisungen speichert, die, wenn von einem Prozessor ausgeführt, den Leistungsmonitor veranlassen, die folgenden Schritte durchzuführen: Empfangen eines Satzes von einem oder mehreren Signalen; Erzeugen einer ersten Eingabe basierend auf dem Satz von einem oder mehreren Signalen und einer ersten Eingabemaske, die mit einer ersten Zustandsübergangsbedingung verbunden ist, wobei die erste Eingabemaske und die erste Zustandsübergangsbedingung in einem ersten Dateneintrag in einem Speicher gespeichert werden, der einem Leistungsmonitor zu geordnet ist; Bestimmen, basierend auf der ersten Eingabe und einem aktuellen Zustand, dass die erste Zustandsübergangsbedingung erfüllt ist; und als Antwort auf das Bestimmen, dass die erste Zustandsübergangsbedingung erfüllt ist, überführen des Leistungsmonitors von dem aktuellen Zustand in einen ersten Zustand, wobei der erste Zustand in dem Speicher gespeichert und der ersten Zustandsübergangsbedingung verbunden ist.
  19. Nichttransitorisches computerlesbares Medium gemäß Anspruch 18, wobei der Speicher einen inhaltsadressierbaren Speicher umfasst.
  20. Nichttransitorisches computerlesbares Medium gemäß Anspruch 18 oder 19, wobei die Schritte ferner ein Ersetzen des ersten Dateneintrags in dem Speicher mit einem zweiten Dateneintrag umfassen, wobei der zweite Dateneintrag eine zweite Zustandsübergangsbedingung und eine zweite Eingabemaske umfasst.
DE102022116839.5A 2021-07-20 2022-07-06 Programmierbare zustandsmaschine für einen hardwareleistungsmonitor Pending DE102022116839A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/380,375 US11687435B2 (en) 2021-07-20 2021-07-20 Programmable state machine for a hardware performance monitor
US17/380,375 2021-07-20

Publications (1)

Publication Number Publication Date
DE102022116839A1 true DE102022116839A1 (de) 2023-01-26

Family

ID=84784511

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022116839.5A Pending DE102022116839A1 (de) 2021-07-20 2022-07-06 Programmierbare zustandsmaschine für einen hardwareleistungsmonitor

Country Status (2)

Country Link
US (1) US11687435B2 (de)
DE (1) DE102022116839A1 (de)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10360039B2 (en) * 2009-09-28 2019-07-23 Nvidia Corporation Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value
US9298469B2 (en) * 2012-06-15 2016-03-29 International Business Machines Corporation Management of multiple nested transactions
US9928033B2 (en) * 2013-06-19 2018-03-27 Nvidia Corporation Single-pass parallel prefix scan with dynamic look back
US20190278574A1 (en) * 2018-03-09 2019-09-12 Nvidia Corporation Techniques for transforming serial program code into kernels for execution on a parallel processor

Also Published As

Publication number Publication date
US11687435B2 (en) 2023-06-27
US20230025021A1 (en) 2023-01-26

Similar Documents

Publication Publication Date Title
DE102009047518B4 (de) Computersystem und Verfahren geeignet zum Vermeiden von Datenkommunikationsverklemmungssituationen durch Markieren von CPU-Datenverkehr als speziell
DE102012213631B4 (de) Zwischenspeichern von Kontextdatenstrukturen in einer Vektorregisterdatei zum Beibehalten von Zustandsdaten in einer Multithread-Bildverarbeitungs-Pipeline
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102013202495A1 (de) Verfahren zur Durchführung von interaktivem Debugging auf nicht unterbrechbaren Graphikverarbeitungseinheiten
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102012211670A1 (de) Simultanes Unterbreiten an eine Mehr-Produzenten-Queue mittels mehrerer Threads
DE102013201178B4 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102012222558B4 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102018109538A1 (de) Techniken zum umfassenden Synchronisieren einer Ausführung von Threads
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE102009047200A1 (de) Ein Komprimierungs-Zustandsbit-Zwischenspeicher und Zusatzspeicher
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102010055267A1 (de) Gemeinsames Benutzen von Ressourcen zwischen einer CPU und GPU
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE102009046847A1 (de) Mehrklassen-Daten-Cache-Verfahren
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE112010003758T5 (de) Instruktionen zum Verwalten einer parallelen Cache-Hierarchie
DE102020101814A1 (de) Effiziente ausführung anhand von aufgabengraphen festgelegter arbeitslasten
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102013017511A1 (de) Effiziente speichervirtualisierung in mehrsträngigen verarbeitungseinheiten
DE102007006190A1 (de) Techniken zur Verwendung von Speicher-Attributen
DE102020112826A1 (de) Verfahren zur effizienten durchführung von datenreduktionen in parallelverarbeitungseinheiten
DE102012220267A1 (de) Rechenarbeitsverteilungs - Referenzzähler

Legal Events

Date Code Title Description
R012 Request for examination validly filed