DE102020119519A1 - Verfahren und einrichtungen zum ermöglichen einer "out-of-order"-pipeline-ausführung der statischen abbildung einer arbeitslast - Google Patents

Verfahren und einrichtungen zum ermöglichen einer "out-of-order"-pipeline-ausführung der statischen abbildung einer arbeitslast Download PDF

Info

Publication number
DE102020119519A1
DE102020119519A1 DE102020119519.2A DE102020119519A DE102020119519A1 DE 102020119519 A1 DE102020119519 A1 DE 102020119519A1 DE 102020119519 A DE102020119519 A DE 102020119519A DE 102020119519 A1 DE102020119519 A1 DE 102020119519A1
Authority
DE
Germany
Prior art keywords
credits
buffer
workload
workload node
scheduler
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
DE102020119519.2A
Other languages
English (en)
Inventor
Michael Behar
Roni Rosner
Moshe Maor
Ronen Gabbai
Zigi Walter
Oren AGAM
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE102020119519A1 publication Critical patent/DE102020119519A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Advance Control (AREA)

Abstract

Es werden Verfahren, Einrichtungen, Systeme und Herstellungsgegenstände offenbart, die eine „Out-of-Order“-Pipeline-Ausführung der statischen Abbildung einer Arbeitslast auf einen oder mehrere Berechnungsbausteine eines Beschleunigers ermöglichen. Eine Beispieleinrichtung enthält eine Schnittstelle zum Laden einer ersten Anzahl von Credits in den Speicher; eine Vergleichseinheit zum Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist; und einen Dispatcher, um dann, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, einen Arbeitslastknoten der Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, auszuwählen.

Description

  • GEBIET DER OFFENBARUNG
  • Dies Offenbarung bezieht sich allgemein auf Verarbeitung und insbesondere auf Verfahren und Einrichtungen zum Ermöglichen einer „Out-of-Order“-Pipeline-Ausführung der statischen Abbildung einer Arbeitslast.
  • HINTERGRUND
  • Computer-Hardware-Hersteller entwickeln Hardwarekomponenten zum Gebrauch in verschiedenen Komponenten einer Computerplattform. Beispielsweise entwickeln Computer-Hardware-Hersteller Hauptplatinen, Chipsätze für Hauptplatinen, Zentraleinheiten (CPUs), Festplattenlaufwerke (HDDs), Festkörperlaufwerke (SSDs) und andere Computerkomponenten. Zusätzlich entwickeln Computer-Hardware-Hersteller Verarbeitungselemente, die als Beschleuniger bezeichnet sind, um die Verarbeitung einer Arbeitslast zu beschleunigen. Beispielsweise kann ein Beschleuniger eine CPU, eine Grafikverarbeitungseinheit (GPU), eine Bildverarbeitungseinheit (VPU) und/oder im Feld programmierbare Gatter-Anordnungen (FPGA) sein.
  • Figurenliste
    • 1 ist eine grafische Darstellung eines Graphen, der für eine Arbeitslast repräsentativ ist, die auf einem Beschleuniger eines heterogenen Systems abläuft.
    • 2 ist eine grafische Darstellung eines Graphen, der für eine Arbeitslast repräsentativ ist, die auf einem Beschleuniger eines heterogenen Systems, das Pipelines und Puffer implementiert, abläuft.
    • 3 ist ein Blockdiagramm, das ein beispielhaftes Berechnungssystem, das in Übereinstimmung mit Lehren dieser Offenbarung konstruiert ist, darstellt.
    • 4 ist ein Blockdiagramm, das ein beispielhaftes Berechnungssystem, das Beispiele eines oder mehrerer Scheduler enthält, darstellt.
    • 5 ist ein Blockdiagramm eines beispielhaften Schedulers, der einen oder mehrere Scheduler der 3 und 4 implementieren kann.
    • 6 ist ein Blockdiagramm eines beispielhaften Schedulers, das weitere Einzelheiten der Puffer-Credit-Speichereinrichtung von 5 zeigt.
    • 7 ist eine grafische Darstellung eines beispielhaften Graphen, der eine Arbeitslast repräsentiert, die auf einem Beschleuniger eines heterogenen Systems, das Pipelines und Puffer implementiert, abläuft.
    • 8 ist ein Ablaufplan, der für einen Prozess repräsentativ ist, der durch maschinenlesbare Anweisungen implementiert sein kann, die ausgeführt werden können, um den Scheduler von 5 und/oder den Scheduler von 6 zu implementieren.
    • 9 ist ein Blockdiagramm einer beispielhaften Prozessorplattform, die strukturiert ist, die Anweisungen von 8 auszuführen, um eine oder mehrere der Instanziierungen des Schedulers von 5 und/oder des Schedulers von 6 zu implementieren.
  • Die Figuren sind nicht maßstabsgerecht. Im Allgemeinen werden die gleichen Bezugszeichen durchgehend durch die Zeichnung(en) und begleitende schriftlichen Beschreibung verwendet, um gleiche oder ähnliche Teile zu referenzieren. Verbindungsreferenzen (z. B. angeschlossen, gekoppelt, verbunden und zusammengefügt) sollen weit gedeutet werden und können Zwischenelemente zwischen einer Sammlung von Elementen und relative Bewegung zwischen den Elementen enthalten, sofern nicht anders angegeben. Somit geben Verbindungsreferenzen nicht notwendigerweise an, dass zwei Elemente direkt verbunden und in fester Beziehung zueinander sind.
  • Die Deskriptoren „erster“, „zweiter“, „dritter“ usw. sind hier verwendet, wenn mehrere Elemente oder Komponenten, die separat referenziert werden können, identifiziert werden. Sofern nicht anderweitig spezifiziert oder basierend auf dem Kontext ihrer Verwendung zu verstehen sind solche Deskriptoren nicht dafür vorgesehen, irgendeine Bedeutung einer Priorität, physikalischen Reihenfolge oder Anordnung in einer Liste oder zeitlichen Reihenfolge zuzuschreiben, sondern sind lediglich als Kennzeichnungen zum separaten Referenzieren mehrerer Elemente oder Komponenten zur Vereinfachung des Verstehens der offenbarten Beispiele verwendet. In einigen Beispielen kann der Deskriptor „erstes“ verwendet sein, um ein Element in der ausführlichen Beschreibung zu referenzieren, während dasselbe Element in einem Anspruch mit einem unterschiedlichen Deskriptor wie z. B. „zweites“ oder „drittes“ referenziert sein kann. In solchen Fällen ist zu verstehen, dass solche Deskriptoren lediglich zur Vereinfachung des Referenzierens mehrere Elemente oder Komponenten verwendet sind.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Viele Computer-Hardware-Hersteller entwickeln Verarbeitungselemente, die als Beschleuniger bezeichnet sind, um die Verarbeitung einer Arbeitslast zu beschleunigen. Beispielsweise kann ein Beschleuniger eine Zentraleinheit (CPU), eine Grafikverarbeitungseinheit (GPU), eine Bildverarbeitungseinheit (VPU) und/oder eine im Feld programmierbare Gatter-Anordnung (FPGA) sein. Außerdem sind Beschleuniger, obwohl sie zum Verarbeiten irgendeines Typs einer Arbeitslast fähig sind, konstruiert, um spezielle Typen von Arbeitslasten zu optimieren. Beispielsweise können, während CPUs und FPGAs konstruiert sein können, allgemeinere Verarbeitung zu handhaben, GPUs konstruiert sein, die Verarbeitung von Video, Spielen und/oder anderer auf Physik und Mathematik basierenden Berechnungen zu verbessern, und VPUs können konstruiert sein, die Verarbeitung von Aufgaben für maschinelles Sehen zu verbessern.
  • Zusätzlich sind einige Beschleuniger spezifisch konstruiert, um die Verarbeitung von Anwendungen für künstliche Intelligenz (AI) zu verbessern. Obwohl eine VPU ein spezifischer Typ eines AI-Beschleunigers ist, können viele unterschiedliche AI-Beschleuniger verwendet werden. Tatsächlich können viele AI-Beschleuniger durch anwendungsspezifische integrierte Schaltungen (ASICs) implementiert sein. Solche ASIC-basierten AI-Beschleuniger können konstruiert sein, um die Verarbeitung von Aufgaben, die sich auf einen speziellen Typ von AI beziehen, zu verbessern, wie z. B. maschinelles Lernen (ML), tiefes Lernen (DL) und/oder andere künstliche durch eine Maschine gesteuerte Logik, die Unterstützungsvektormaschinen (SVMs), neuronale Netze (NNs), rekurrente neuronale Netze (RNNs), neuronale Faltungsnetze (CNNs), langes Kurzzeitgedächtnis (LSTM), rekurrente Gate-Einheiten (GRUs) usw. enthält.
  • Computer-Hardware-Hersteller entwickeln außerdem heterogene Systeme, die mehr als einen Typ von Verarbeitungselementen enthalten. Beispielsweise können Computer-Hardware-Hersteller Allzweckverarbeitungselemente wie z. B. CPUs mit entweder Allzweckbeschleunigern wie z. B. FPGAs und/oder besser angepassten Beschleunigern wie z. B. GPUs, VPUs und/oder anderen AI-Beschleunigern kombinieren. Solche heterogenen Systeme können als Ein-Chip-Systeme (SoCs) implementiert sein.
  • Wenn ein Entwickler möchte, dass eine Funktion, ein Algorithmus, ein Programm, eine Anwendung und/oder anderer Code auf einem heterogenen System abläuft, erzeugt der Entwickler und/oder die Software eine Planung für die Funktion, den Algorithmus, das Programm, die Anwendung und/oder den anderen Code zur Zeit der Kompilierung. Sobald eine Planung erzeugt ist, wird die Planung mit der Funktion, dem Algorithmus, dem Programm, der Anwendung und/oder der anderen Codespezifikation kombiniert, um eine ausführbare Datei zu erzeugen (entweder für vorzeitige oder termingerechte Konzepte). Außerdem können eine Funktion, ein Algorithmus, ein Programm, eine Anwendung und/oder anderer Code als ein Graph repräsentiert sein, der Knoten enthält, wobei der Graph eine Arbeitslast repräsentiert und jeder Knoten eine spezielle Aufgabe dieser Arbeitslast repräsentiert. Darüber hinaus repräsentieren die Verbindungen zwischen den unterschiedlichen Knoten in dem Graphen die Dateneingaben und/oder -ausgaben, die benötigt werden, damit ein spezieller Knoten ausgeführt werden kann, und die Ecken des Graphen repräsentieren Datenabhängigkeiten zwischen Knoten des Graphen.
  • Die ausführbare Datei enthält eine Anzahl unterschiedlicher ausführbarer Abschnitte, wobei jeder ausführbare Abschnitt durch ein spezifisches Verarbeitungselement (z. B. eine CPU, eine GPU, eine VPU und/oder eine FPGA) ausführbar ist. Jeder ausführbare Abschnitt der ausführbaren Datei kann ferner ausführbare Unterabschnitte enthalten, wobei jeder ausführbare Unterabschnitt durch Berechnungsbausteine (CBBs) des spezifischen Verarbeitungselements ausführbar ist. Zusätzlich oder alternativ kann in einigen hier offenbarten Beispielen ein Entwickler und/oder Software-Entwicklungs-Software Kriterien definieren, um erfolgreiche Ausführung des ausführbaren Programms (z. B. Erfolgskriterien) zu bestimmen. Beispielsweise können solche Erfolgskriterien dem Ausführen des ausführbaren Programms entsprechen, um einen Schwellenwert der Nutzung des heterogenen Systems und/oder des spezifischen Verarbeitungselements zu erfüllen und/oder ihm auf andere Weise zu genügen. In anderen Beispielen können Erfolgskriterien dem Ausführen des ausführbaren Programms in einem Schwellenwert für die Zeitspanne entsprechen. Es kann jedoch irgendeine geeignete Erfolgsfunktion benutzt werden, wenn bestimmt wird, wie das ausführbare Programm auf einem heterogenen System und/oder einem spezifischen Verarbeitungselement auszuführen ist. Auf diese Weise können die Erfolgskriterien für einen Entwickler, Software und/oder ein System für künstliche Intelligenz nützlich sein, um ein ausführbares Programm zu erzeugen, die eine Planung enthält, die optimiert ist, um die Erfolgskriterien zu erfüllen.
  • 1 ist eine grafische Darstellung eines Graphen 100, der für eine Arbeitslast repräsentativ ist, die auf einem Beschleuniger eines heterogenen Systems abläuft. Der Graph 100 enthält einen ersten Arbeitslastknoten 102 (WN[0]), einen zweiten Arbeitslastknoten 104 (WN[1]), einen dritten Arbeitslastknoten 106 (WN[2]), einen vierten Arbeitslastknoten 108 (WN[3]), und einen fünften Arbeitslastknoten 110 (WN[4]).). In 1 lässt der Beschleuniger die durch den Graphen 100 repräsentierte Arbeitslast über eine statische Software-Planung ablaufen. Statische Software-Planung enthält das Bestimmen einer im Voraus definierten Weise, in der die unterschiedlichen Arbeitslastknoten des Graphen 100 auf Berechnungsbausteinen (CBBs) eines Beschleunigers auszuführen sind. Beispielsweise weist die statische Software-Planung den ersten Arbeitslastknoten 102 (WN[0]) einem ersten CBB 112, den zweiten Arbeitslastknoten 104 (WN[1]) einem zweiten CBB 114, den dritten Arbeitslastknoten 106 (WN[2]) einem dritten CBB 116, den vierten Arbeitslastknoten 108 (WN[3]) einem vierten CBB 118 und den fünften Arbeitslastknoten 110 (WN[4]) dem zweiten CBB 114 zu.
  • In 1 skizziert die statische Software-Planung, dass der erste Arbeitslastknoten 102 (WN[0]) auf dem ersten CBB 112 parallel zu dem vierten Arbeitslastknoten 108 (WN[3]) ablaufen soll, der auf dem vierten CBB 118 abläuft. In 1 führt der vierte CBB 118 den vierten Arbeitslastknoten 108 (WN[3]) schneller aus als der erste CBB 112 den ersten Arbeitslastknoten 102 (WN[0]) ausführt. Da die statische Software-Planung skizziert, dass der zweite CBB 114 den zweiten Arbeitslastknoten 104 (WN[1]) ausführen soll, bevor der zweite CBB 114 den fünften Arbeitslastknoten 110 (WN[4]) ausführen soll, ist der zweite CBB 114 im Leerlauf bis der erste CBB 112 die Ausführung des ersten Arbeitslastknotens 102 (WN[0]) fertigstellt. Außerdem erfordert das Warten darauf, bis Arbeitslastknoten vollständig ausgeführt sind, bevor nachfolgende Arbeitslastknoten ausgeführt werden, einen signifikanten Speicherüberhang, weil die Daten, die durch einen CBB produziert werden, der einen ersten Arbeitslastknoten (z. B. den ersten Arbeitslastknoten 102 (WN[0])) ausführt, auf dem Beschleuniger gespeichert werden müssen, bevor ein CBB einen zweiten Arbeitslastknoten (z. B. den zweiten Arbeitslastknoten 104 (WN[1])) ausführen kann.
  • 2 ist eine grafische Darstellung eines Graphen 200, der für eine Arbeitslast repräsentativ ist, die auf einem Beschleuniger eines heterogenen Systems, das Pipelines und Puffer implementiert, abläuft. Der Graph 200 enthält einen ersten Arbeitslastknoten 102 (WN[0]), einen zweiten Arbeitslastknoten 104 (WN[1]), einen dritten Arbeitslastknoten 106 (WN[2]), einen vierten Arbeitslastknoten 108 (WN[3]), und einen fünften Arbeitslastknoten 110 (WN[4]). In 2 lässt der Beschleuniger die durch den Graphen 200 repräsentierte Arbeitslast über eine statische Software-Planung ablaufen. Die statische Software-Planung von 2 skizziert die Ausführungsplanung für unterschiedliche Arbeitslastknoten des Graphen 200 auf CBBs eines Beschleunigers, der Pipelines implementiert und einen ersten Puffer 202, einen zweiten Puffer 204 und einen dritten Puffer 206 enthält. Zusätzlich weist die statische Software-Planung den ersten Arbeitslastknoten 102 (WN[0]) dem ersten CBB 112, den zweiten Arbeitslastknoten 114 (WN[1]) dem zweiten CBB 114, den dritten Arbeitslastknoten 106 (WN[2]) dem dritten CBB 116, den vierten Arbeitslastknoten 108 (WN[3]) dem vierten CBB 118 und den fünften Arbeitslastknoten 110 (WN[4]) dem zweiten CBB 114 zu. Der erste Puffer 202 ist mit dem ersten CBB 112 und dem zweiten CBB 114 gekoppelt, der zweite Puffer 204 ist mit dem zweiten CBB 114 und dem dritten CBB 116 gekoppelt, und der dritte Puffer 206 ist mit dem vierten CBB 118 und dem zweiten CBB 114 gekoppelt.
  • Die Puffer 202, 204 und 206 ermöglichen, dass eine statische Software-Planung skizziert, dass jeder CBB einen Abschnitt eines Arbeitslastknotens (z. B. eine Kachel) in einer Zeitspanne ausführen soll, anstatt den gesamten Arbeitslastknoten in der Zeitspanne auszuführen. Ähnlich kann die statische Software-Planung skizzieren, dass CBBs, die Daten verarbeiten, die durch andere CBBs (z. B. Verbraucher) produziert werden, Abschnitte eines Arbeitslastknotens (z. B. eine Kachel) ausführen können, wenn solche Abschnitte der Arbeitslast verfügbar sind. Weil jedoch CBBs, die Arbeitslastknoten ausführen, verfügbare Daten verarbeiten und neue Daten in den Speicher schreiben, muss, um einen gegebenen Arbeitslastknoten auf einem CBB auszuführen, eine Schwellenwertmenge der Daten zur Laufzeit verfügbar sein, und es muss eine Schwellenwertmenge von Platz im Speicher vorhanden sein, um die Ergebnisse zur Laufzeit zu schreiben. Während Puffer den Speicherüberhang durch grundlegende statische Software-Planung reduzieren, ist es zunehmend schwierig, eine statische Software-Planung mit Puffern zu skizzieren, weil sie in hohem Maße auf den Datenverfügbarkeiten und/oder Abhängigkeiten zur Laufzeit abhängt. Außerdem ist es, weil die Last des gesamten Beschleunigers die Verarbeitungsgeschwindigkeit jedes CBB auf dem Beschleuniger beeinträchtigen kann, schwierig, eine statische Software-Planung zu entwickeln, die die CBBs eines gegebenen Beschleunigers effektiv nutzt.
  • Hier offenbarte Beispiele enthalten Verfahren und Einrichtungen zum Ermöglichen von „Out-of-Order“-Pipeline-Ausführung statischer Abbildung einer Arbeitslast. Im Gegensatz zur statischen Software-Planung beruhen die hier offenbarten Beispiele nicht auf einer vorbestimmten statischen Software-Planung. Vielmehr bestimmen die hier offenbarten Beispiele, welche Arbeitslastknoten, die einem gegebenen CBB zugewiesen worden sind, basierend auf den verfügbaren Daten und dem verfügbaren Speicher auf einem Beschleuniger und/oder anderen Verarbeitungselement ablaufen sollen. Außerdem verfolgt jeder CBB eine Datenmenge, die einer gegebenen Arbeitslast zugeordnet ist, die in einem ersten Puffer verfügbar ist, repräsentiert als eine erste Anzahl von Credits, und die Menge des Platzes, der in einem zweiten Puffer verfügbar ist, repräsentiert als eine Anzahl von Credits. Das ermöglicht eine dynamische Laufzeitplanung von Arbeitslastknoten auf einem gegebenen CBB.
  • Für jeden Arbeitslastknoten kann der CBB den Arbeitslastknoten ausführen, wenn eine erste Anzahl von Credits einen ersten Schwellenwert erfüllt und eine zweite Anzahl von Credits einen zweiten Schwellenwert erfüllt. Das ermöglicht „Out-of-Order“-Pipeline-Ausführung unabhängig von einem gegebenen Graphen der gesamten Arbeitslast. Hier offenbarte Beispiele stellen eine Einrichtung bereit, um „Out-of-Order“-Pipeline-Ausführung von statischer Abbildung einer Arbeitslast auf einen oder mehrere Berechnungsbausteine eines Beschleunigers zu ermöglichen. Eine beispielhafte Einrichtung enthält eine Schnittstelle zum Laden einer ersten Anzahl von Credits in den Speicher; eine Vergleichseinrichtung zum Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, der der Speicherverfügbarkeit in einem Puffer zugeordnet ist; und einen Dispatcher zum Auswählen, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, eines Arbeitslastknotens der Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist.
  • 3 ist ein Blockdiagramm, das ein beispielhaftes Berechnungssystem 300 darstellt, das in Übereinstimmung mit Lehren dieser Offenbarung konstruiert ist. In dem Beispiel von 3 enthält das Berechnungssystem 300 einen beispielhaften Systemspeicher 302 und ein beispielhaftes heterogenes System 304. Das beispielhafte heterogene System 304 enthält einen beispielhaften Host-Prozessor 306, einen beispielhaften ersten Kommunikationsbus 308, einen beispielhaften ersten Beschleuniger 310a, einen beispielhaften zweiten Beschleuniger 310b und einen beispielhaften dritten Beschleuniger 310c. Jeder aus dem beispielhaften ersten Beschleuniger 310a dem beispielhaften zweiten Beschleuniger 310b und dem beispielhaften dritten Beschleuniger 310c enthält eine Vielzahl von CBBs, von denen einige für den Betrieb eines Beschleunigers generisch sind und einige für den Betrieb der jeweiligen Beschleuniger spezifisch sind.
  • In dem Beispiel von 3 ist der Systemspeicher 302 mit dem heterogenen System 304 gekoppelt. Der Systemspeicher 320 ist ein Speicher. In 3 ist der Systemspeicher 302 eine von wenigstens einem aus dem Host-Prozessor 306, dem ersten Beschleuniger 310a, dem zweiten Beschleuniger 310b und dem dritten Beschleuniger 310c gemeinsam verwendete Speichereinrichtung. In dem Beispiel von 3 ist der Systemspeicher 203 eine physikalische Speichereinrichtung, die lokal zu dem Berechnungssystem 300 ist; in anderen Beispielen kann der Systemspeicher 302 jedoch außerhalb des Berechnungssystems 300 und/oder anderweitig entfernt in Bezug darauf sein. In weiteren Beispielen kann der Systemspeicher 302 eine virtuelle Speichereinrichtung sein. In dem Beispiel von 3 ist der Systemspeicher eine persistente Speichereinrichtung (z. B. Festwertspeicher (ROM), programmierbarer ROM (PROM), löschbarer PROM (EPROM), elektrisch löschbarer PROM (EEPROM) usw.). In anderen Beispielen kann der Systemspeicher 302 ein persistentes Basis-Eingabe/Ausgabe-System (BIOS) oder ein Flash-Speicher sein. In weiteren Beispielen kann der Systemspeicher 302 ein flüchtiger Speicher sein.
  • In 3 ist das heterogene System 304 mit dem Systemspeicher 302 gekoppelt. In dem Beispiel von 3 verarbeitet das heterogene System 304 eine Arbeitslast durch Ausführen der Arbeitslast auf dem Host-Prozessor 306 und/oder einem oder mehreren aus dem ersten Beschleuniger 310a, dem zweiten Beschleuniger 310b oder dem dritten Beschleuniger 310c. In 3 ist das heterogene System 304 ein SoC. Alternativ kann das heterogene System 304 irgendein anderer Typ eines Berechnungs- oder Hardware-Systems sein.
  • In dem Beispiel von 3 ist der Host-Prozessor 306 ein Verarbeitungselement, das Anweisungen (z. B. maschinenlesbare Anweisungen) ausführt, um Operationen, die einem Computer oder einer Berechnungsvorrichtung (z. B. dem Berechnungssystem 300) zugeordnet sind, ablaufen zu lassen, auszuführen und/oder ihre Fertigstellung zu unterstützen. In dem Beispiel von 3 ist der Host-Prozessor 306 ein primäres Verarbeitungselement für das heterogene System 304 und enthält wenigstens einen Kern. Alternativ kann der Host-Prozessor 306 ein coprimäres Verarbeitungselement sein (z. B. in einem Beispiel, in dem mehr als eine CPU genutzt wird), während der Host-Prozessor 3006 in anderen Beispielen ein sekundäres Verarbeitungselement sein kann.
  • In dem dargestellten Beispiel von 3 sind einer oder mehrere aus dem ersten Beschleuniger 310a, dem zweiten Beschleuniger 310b und/oder dem dritten Beschleuniger 310c Verarbeitungselemente, die durch ein Programm, das auf dem heterogenen System 304 abläuft, für Berechnungsaufgaben, wie z. B. Hardware-Beschleunigung, genutzt werden können. Beispielsweise ist der erste Beschleuniger 310a ein Verarbeitungselement, das Verarbeitungsbetriebsmittel enthält, die konstruiert und/oder anderweitig konfiguriert oder strukturiert sind, um die Verarbeitungsgeschwindigkeit und Gesamtleistung der Verarbeitung von Aufgaben für maschinelles Sehen für AI zu verbessern (z. B. eine VPU).
  • In hier offenbarten Beispielen ist jeder aus dem Host-Prozessor 306, dem ersten Beschleuniger 310a, dem zweiten Beschleuniger 310b und dem dritten Beschleuniger 310c in Kommunikation mit den anderen Elementen des Berechnungssystems 300 und/oder dem Systemspeicher 302. Beispielsweise sind der Host-Prozessor 306, der erste Beschleuniger 310a, der zweite Beschleuniger 310b, der dritte Beschleuniger 310c und/oder der Systemspeicher 302 über den ersten Kommunikationsbus 308 in Kommunikation. In einigen hier offenbarten Beispielen können der Host-Prozessor 306, der erste Beschleuniger 310a, der zweite Beschleuniger 310b, der dritte Beschleuniger 310c und/oder der Systemspeicher 302 über irgendein geeignetes drahtgebundenes und/oder drahtloses Kommunikationssystem in Kommunikation sein. Zusätzlich können in einigen hier offenbarten Beispielen jeder aus dem Host-Prozessor 306, dem ersten Beschleuniger 310a, dem zweiten Beschleuniger 310b, dem dritten Beschleuniger 310c und/oder dem Systemspeicher 302 mit irgendeiner Komponente außerhalb des Berechnungssystems 300 über irgendein geeignetes drahtgebundenes und/oder drahtloses Kommunikationssystem in Kommunikation sein.
  • In dem Beispiel von 3 enthält der erste Beschleuniger 310a eine beispielhafte Faltungs-Engine 312, eine beispielhaft RNN-Engine 314, einen beispielhaften Speicher 316, eine beispielhafte Speichermanagementeinheit (MMU) 318, einen beispielhaften DSP 320, eine beispielhafte Steuereinheit 322 und eine beispielhafte Speicherdirektzugriffs- (DMA-) Einheit 324. Zusätzlich enthält jede der beispielhaften Faltungs-Engine 312, der beispielhaften RNN-Engine 314, der beispielhaften DMA-Einheit 324, des beispielhaften DSP 320 und der beispielhaften Steuereinheit 322 einen beispielhaften ersten Scheduler 326, einen beispielhaften zweiten Scheduler 328, einen beispielhaften dritten Scheduler 330, einen beispielhaften vierten Scheduler 332 bzw. einen beispielhaften fünften Scheduler 334. Jeder aus dem beispielhaften DSP 320 und der beispielhaften Steuereinheit 322 enthält zusätzlich eine beispielhafte erste Kernel-Bibliothek 336 und eine beispielhafte zweite Kernel-Bibliothek 338.
  • In dem dargestellten Beispiel von 3 ist die Faltungs-Engine 312 eine Vorrichtung, die konfiguriert ist, die Verarbeitung von Aufgaben, die der Faltung zugeordnet ist, zu verbessern. Außerdem verbessert die Faltungs-Engine 312 die Verarbeitung von Aufgaben, die der Analyse visueller Bilder zugeordnet sind, und/oder anderer Aufgaben, die CNNs zugeordnet sind. In 3 ist die RNN-Engine 314 eine Vorrichtung, die konfiguriert ist, die Verarbeitung von Aufgaben, die RNNs zugeordnet sind, zu verbessern. Zusätzlich verbessert die RNN-Engine 314 die Verarbeitung von Aufgaben, die der Analyse nicht segmentierter, verbundener Handschrifterkennung, Spracherkennung zugeordnet sind, und/oder anderer Aufgaben, die RNNs zugeordnet sind.
  • In dem Beispiel von 3 ist der Speicher 316 eine von wenigstens einer aus der Faltungs-Engine 312, der RNN-Engine 314, der MMU 318, dem DSP 320, der Steuereinheit 322 und der DMA-Einheit 324 gemeinsam verwendete Speichereinrichtung. In dem Beispiel von 3 ist der Speicher 316 eine physikalische Speichereinrichtung, die lokal zu dem ersten Beschleuniger 310a ist; in anderen Beispielen kann der Speicher 316 jedoch außerhalb des ersten Beschleunigers 310a und/oder anderweitig entfernt in Bezug darauf sein. In weiteren Beispielen kann der Speicher 316 eine virtuelle Speichereinrichtung sein. In dem Beispiel von 3 ist der Speicher 316 eine persistente Speichereinrichtung (z. B. ROM, PROM, EPROM, EEPROM usw.). In anderen Beispielen kann der Speicher 316 ein persistentes BIOS oder ein Flash-Speicher sein. In weiteren Beispielen kann der Speicher 316 ein flüchtiger Speicher sein.
  • In dem dargestellten Beispiel von 3 ist die beispielhafte MMU eine Vorrichtung, die Referenzen auf die Adressen des Speichers 316 und/oder des Systemspeichers 302 enthält. Die MMU 318 übersetzt zusätzlich virtuelle Speicheradressen, die durch eine oder mehrere aus der Faltungs-Engine 312, der RNN-Engine 314, dem DSP 320 und/oder der Steuereinheit 322 benutzt werden, in physikalische Adressen in dem Speicher 316 und/oder dem Systemspeicher 302.
  • In dem Beispiel von 3 ist der DSP 320 eine Vorrichtung, die die Verarbeitung digitaler Signale verbessert. Beispielsweise unterstützt der DSP 320 die Verarbeitung zum Messen, Filtern und/oder Komprimieren kontinuierlicher Signale aus der realen Welt wie z. B. Daten aus Kameras und/oder anderen Sensoren, die zu Computersehen gehören. In 3 ist die Steuereinheit 322 als eine Steuerungseinheit des ersten Beschleunigers 310a implementiert. Beispielsweise leitet die Steuereinheit 322 den Betrieb des ersten Beschleunigers 310a. In einigen Beispielen implementiert die Steuereinheit 322 einen Credit-Manager. Außerdem kann die Steuereinheit 322 eine oder mehrere aus der Faltungs-Engine 312, der RNN-Engine 314, dem Speicher 316, der MMU 318 und/oder dem DSP 320 anweisen, wie auf maschinenlesbare Anweisungen, die von dem Host-Prozessor 306 empfangen werden, zu reagieren ist.
  • In dem dargestellten Beispiel von 3 ist die DMA-Einheit 324 eine Vorrichtung, die es wenigstens einer aus der Faltungs-Engine 312, der RNN-Engine 314, dem DSP 320 und der Steuereinheit 322 ermöglicht, unabhängig von dem Host-Prozessor 306 auf den Systemspeicher 302 zuzugreifen. Beispielsweise kann die DMA-Einheit 324 durch eine oder mehrere analoge oder digitale Schaltung(en), Logikschaltung(en), programmierbare Prozessor(en), programmierbare Steuereinheit(en), Grafikverarbeitungseinheit(en) (GPU(s)), digitale Signalprozessor(en) (DSP(s)), anwendungsspezifische integrierte Schaltung(en) (ASIC(s)), programmierbare Logikvorrichtung(en) (PLD(s)) und/oder im Feld programmierbare Logikvorrichtung(en) (FPLD(s)) implementiert sein.
  • In dem Beispiel von 3 ist jeder aus dem ersten Scheduler 326, dem zweiten Scheduler 328, dem dritten Scheduler 330, dem vierten Scheduler 332 und dem fünften Scheduler 334 eine Vorrichtung, die bestimmt, wann die Faltungs-Engine 312, die RNN-Engine 314, die DMA-Einheit 324, der DSP 320 bzw. die Steuereinheit 322 einen Abschnitt einer Arbeitslast, die entladen und/oder auf andere Weise zu dem ersten Beschleuniger 3 10a gesendet worden ist, ausführt. Zusätzlich ist jede aus der ersten Kernel-Bibliothek 336 und der zweiten Kernel-Bibliothek 338 eine Datenstruktur, die einen oder mehrere Kernel enthält. Die Kernel der ersten Kernel-Bibliothek 336 und der zweiten Kernel-Bibliothek 338 sind beispielsweise Routinen, die für hohen Durchsatz auf dem DSP 320 bzw. der Steuereinheit 322 zusammengestellt sind. Die Kernel entsprechen beispielsweise ausführbaren Unterabschnitten eines ausführbaren Programms, das auf dem Berechnungssystem 300 ablaufen soll.
  • In hier offenbarten Beispielen ist jede aus der Faltungs-Engine 312, der RNN-Engine 314, dem Speicher 316, der MMU 318, dem DSP 320, der Steuereinheit 322 und der DMA-Einheit 324 in Kommunikation mit den anderen Elementen des ersten Beschleunigers 310a. Beispielsweise sind die Faltungs-Engine 312, die RNN-Engine 314, der Speicher 316, die MMU 318, der DSP 320, die Steuereinheit 322 und die DMA-Einheit 324 über einen beispielhaften zweiten Kommunikationsbus 340 in Kommunikation. In einigen Beispielen kann der zweite Kommunikationsbus 340 durch ein Konfigurations- und Steuer-(CnC-) Fabric und ein Daten-Fabric implementiert sein. In einigen hier offenbarten Beispielen können die Faltungs-Engine 312, die RNN-Engine 314, der Speicher 316, die MMU 318, der DSP 320, die Steuereinheit 322 und die DMA-Einheit 324 über irgendein geeignetes drahtgebundenes und/oder drahtloses Kommunikationssystem in Kommunikation sein. Zusätzlich kann in einigen hier offenbarten Beispielen jedes aus der Faltungs-Engine 312, der RNN-Engine 314, de, Speicher 316, der MMU 318, dem DSP 320, der Steuereinheit 322 und der DMA-Einheit 324 über irgendein geeignetes drahtgebundenes und/oder drahtloses Kommunikationssystem in Kommunikation mit irgendeiner Komponente außerhalb des ersten Beschleunigers 310a sein.
  • Wie vorstehend erwähnt enthält jeder aus dem beispielhaften ersten Beschleuniger 310a dem beispielhaften zweiten Beschleuniger 310b und dem beispielhaften dritten Beschleuniger 310c eine Vielzahl von CBBs, von denen einige für den Betrieb eines Beschleunigers generisch sind und einige für den Betrieb der jeweiligen Beschleuniger spezifisch sind. Beispielsweise enthält jeder aus dem ersten Beschleuniger 310a, dem zweiten Beschleuniger 310b und dem dritten Beschleuniger 310c generische CBBs wie z. B. Speicher, eine MMU, eine Steuereinheit und jeweilige Scheduler für jeden der CBBs.
  • Während in dem Beispiel von 3 der erste Beschleuniger 310a eine VPU implementiert und die Faltungs-Engine 312, die RNN-Engine 314 und den DSP 320 enthält (z. B. CBBs, die spezifisch für den Betrieb des ersten Beschleunigers 310a sind), können der zweite Beschleuniger 310b und der dritte Beschleuniger 310c zusätzliche oder alternative CBBs enthalten, die für den Betrieb des zweiten Beschleunigers 310b und/oder des dritten Beschleunigers 310c spezifisch sind. Beispielsweise falls der zweite Beschleuniger 310b eine GPU implementiert, können die CBBs, die für den Betrieb des zweiten Beschleunigers 310b spezifisch sind, einen Thread-Dispatcher, eine Grafiktechnologieschnittstelle und/oder irgendeinen anderen CBB, der wünschenswert ist, um die Verarbeitungsgeschwindigkeit und Gesamtleistung zum Verarbeiten von Computergrafik und/oder für Bildverarbeitung zu verbessern, enthalten. Außerdem können, falls der dritte Beschleuniger 310c eine FPGA implementiert, die CBBs, die für den Betrieb des dritten Beschleunigers 310c spezifisch sind, eine oder mehrere Arithmetiklogikeinheiten (ALUs) und/oder irgendeinen anderen CBB, der wünschenswert ist, um die Verarbeitungsgeschwindigkeit und Gesamtleistung zur Verarbeitung allgemeiner Berechnungen zu verbessern, enthalten.
  • Obwohl das heterogene System 304 von 3 den Host-Prozessor 206, den ersten Beschleuniger 310a, den zweiten Beschleuniger 310b und den dritten Beschleuniger 310c enthält, kann in einigen Beispielen das heterogene System 304 irgendeine Anzahl von Verarbeitungselementen (z. B. Host-Prozessoren und/oder Beschleuniger) enthalten, die Prozessoren mit anwendungsspezifischem Befehlssatz (ASIPs), physikalische Verarbeitungseinheiten (PPUs), designierte DSPs, Bildprozessoren, Coprozessoren, Gleitkommaeinheiten, Netzprozessoren, Mehrkernprozessoren und Frontend-Prozessor enthalten.
  • Außerdem können, obwohl in dem Beispiel von 3 die Faltungs-Engine 312, die RNN-Engine 314, der Speicher 316, die MMU 318, der DSP 320, die Steuereinheit 322, die DMA-Einheit 324, der erste Scheduler 326, der zweite Scheduler 328, der dritte Scheduler 330, der vierte Scheduler 332, der fünfte Scheduler 334, die erste Kernel-Bibliothek 336 und die zweite Kernel-Bibliothek 338 auf dem ersten Beschleuniger 310a implementiert sind, eines oder mehrere aus der Faltungs-Engine 312, der RNN-Engine 314, dem Speicher 316, der MMU 318, dem DSP 320, der Steuereinheit 322, der DMA-Einheit 324, dem ersten Scheduler 326, dem zweiten Scheduler 328, dem dritten Scheduler 330, dem vierten Scheduler 332, dem fünften Scheduler 334, der ersten Kernel-Bibliothek 336 und der zweiten Kernel-Bibliothek 338 auf dem Host-Prozessor 306, dem zweiten Beschleuniger 310b und/oder dem dritten Beschleuniger 310c implementiert sein.
  • 4 ist ein Blockdiagramm, das ein beispielhaftes Berechnungssystem 400 darstellt, das Beispiele eines oder mehrerer Scheduler enthält. In einigen Beispielen kann das Berechnungssystem 400 dem Berechnungssystem 300 von 3 entsprechen. In dem Beispiel von 4 enthält das Berechnungssystem 400 eine beispielhafte Eingabe 402, einen beispielhaften Compiler 404 und einen beispielhaften Beschleuniger 406. In einigen Beispielen kann der Beschleuniger 406 dem ersten Beschleuniger 310a von 3 entsprechen. In 4 ist die Eingabe 402 mit dem Compiler 404 gekoppelt. Die Eingabe 402 ist eine Arbeitslast, die durch den Beschleuniger 406 auszuführen ist. In einigen Beispielen kann der Compiler 404 dem Host-Prozessor 306 von 3 und/oder einer externen Vorrichtung entsprechen.
  • In dem Beispiel von 4 ist die Eingabe 402 beispielsweise eine Funktion, ein Algorithmus, ein Programm, eine Anwendung und/oder anderer Code, der durch den Beschleuniger 406 auszuführen ist. In einigen Beispielen ist die Eingabe 402 eine Graphenbeschreibung einer Funktion, eines Algorithmus, eines Programms, einer Anwendung und/oder von anderem Code. In zusätzlichen oder alternativen Beispielen ist die Eingabe 402 eine Arbeitslast, die sich auf AI-Verarbeitung bezieht, wie z. B. tiefes Lernen und/oder Computersehen.
  • In dem dargestellten Beispiel von 4 ist der Compiler 404 mit der Eingabe 402 und dem Beschleuniger 406 gekoppelt. Der Compiler 404 empfängt die Eingabe 402 und kompiliert die Eingabe 402 in ein oder mehrere ausführbare Programme, die durch den Beschleuniger 406 auszuführen sind. Beispielsweise ist der Compiler 404 ein Graphen-Compiler, der die Eingabe 402 empfängt und verschiedene Arbeitslastknoten der Arbeitslast (z. B. der Eingabe 402) verschiedenen CBBs des Beschleunigers 406 zuweist. Zusätzlich weist der Compiler 404 Speicher für einen oder mehrere Puffer in dem Speicher des Beschleunigers 406 zu.
  • In dem Beispiel von 4 ist der Beschleuniger 406 mit dem Compiler 404 gekoppelt und enthält einen beispielhaften Credit-Manager 408, ein beispielhaftes CnC-Fabric 410, ein beispielhaftes Daten-Fabric 411, eine beispielhafte Faltungs-Engine 412, eine beispielhafte DMA-Einheit 414, eine beispielhafte RNN-Engine 416, einen beispielhaften DSP 418, einen beispielhaften Speicher 420 und eine beispielhafte MMU 422. Zusätzlich enthält jedes aus der beispielhaften Faltungs-Engine 412, der beispielhaften DMA-Einheit 414, der beispielhaften RNN-Engine 416 und dem beispielhaften DSP 418 einen beispielhaften ersten Scheduler 424, einen beispielhaften zweiten Scheduler 426, einen beispielhaften dritten Scheduler 428 bzw. einen beispielhaften vierten Scheduler 430. Außerdem enthält der beispielhafte DSP 418 eine beispielhafte Kernel-Bibliothek 432. In einigen Beispielen kann der erste Scheduler 424 dem ersten Scheduler 326 von 3 entsprechend. In zusätzlichen oder alternativen Beispielen kann der zweite Scheduler 426 dem dritten Scheduler 330 von 3 entsprechen. In weiteren Beispielen kann der dritte Scheduler 428 dem zweiten Scheduler 328 von 3 entsprechen. In einigen Beispielen kann der vierte Scheduler 430 dem vierten Scheduler 332 von 4 entsprechend.
  • In dem dargestellten Beispiel von 4 ist der Credit-Manager 408 mit dem Compiler 404 und dem CnC-Fabric 410 gekoppelt. Der Credit-Manager 408 ist eine Vorrichtung, die Credits managt, die einem oder mehreren aus der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und/oder dem DSP 418 zugeordnet sind. In einigen Beispielen kann der Credit-Manager 408 durch eine Steuereinheit als eine Credit-Manager-Steuereinheit implementiert sein. Credits sind für Daten, die Arbeitslastknoten zugeordnet sind, die in dem Speicher 420 verfügbar sind, und/oder die Größe des Platzes, der in dem Speicher 420 für die Ausgabe des Arbeitslastknotens verfügbar ist, repräsentativ. Beispielsweise kann der Credit-Manager 408 den Speicher 420 in einen oder mehrere Puffer partitionieren, die jedem Arbeitslastknoten einer gegebenen Arbeitslast zugeordnet sind, basierend auf einem oder mehreren ausführbaren Programmen, die von dem Compiler 404 empfangen werden. Falls ein Arbeitslastknoten konfiguriert ist, Daten in einen Puffer zu schreiben, ist der Arbeitslastknoten ein Produzent, und falls der Arbeitslastknoten konfiguriert ist, Daten aus einem Puffer zu lesen, ist der Arbeitslastknoten ein Verbraucher.
  • In dem Beispiel von 4 ist der Credit-Manager 408 zusätzlich konfiguriert, Credits zu einer oder mehreren aus der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und/oder dem DSP 418 zu senden und/oder Credits von ihnen zu empfangen. In einem Beispiel ist der Credit-Manager 408 als eine Steuerungseinheit des Beschleunigers 406 implementiert. Beispielsweise kann der Credit-Manager 408 den Betrieb des Beschleunigers 406 leiten. Außerdem kann der Credit-Manager 408 eine oder mehrere aus der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und/oder dem DSP 418 anweisen, wie auf ausführbare Programme und/oder andere maschinenlesbar Anweisungen, die von dem Compiler 404 empfangen werden, zu reagieren ist.
  • In dem Beispiel von 4 ist das CnC-Fabric 410 mit dem Credit-Manager 408, der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und dem DSP 418 gekoppelt. Das CnC-Fabric 410 ist ein Netz aus elektronischen Zusammenschaltungen und wenigstens einer Logikschaltung, die ermöglicht, dass eines oder mehrere aus dem Credit-Manager 408, der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und/oder dem DSP 418 Credits zu einem oder mehreren aus dem Credit-Manager 408, der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und/oder dem DSP 418 senden und/oder von ihnen empfangen. In einigen Beispielen kann das CnC-Fabric 410 dem zweiten Kommunikationsbus 340 von 3 entsprechen.
  • In dem Beispiel von 4 ist das Daten-Fabric 411 mit der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416, dem DSP 418, dem Speicher 420 und der MMU 422 gekoppelt. Das Daten-Fabric 411 ist ein Netz aus elektronischen Zusammenschaltungen und wenigstens einer Logikschaltung, die ermöglicht, dass eines oder mehrere aus dem Credit-Manager 408, der Faltungs-Engine 412, der RNN-Engine 416, dem DSP 418, dem Speicher 420 und/oder der MMU 422 Daten zu einem oder mehreren aus dem Credit-Manager 408, der Faltungs-Engine 412, der RNN-Engine 416, dem DSP 418, dem Speicher 420 und/oder der MMU 422 senden und/oder von ihnen empfangen. In einigen Beispielen kann das Daten-Fabric 411 dem zweiten Kommunikationsbus 340 von 3 entsprechen.
  • In dem dargestellten Beispiel von 4 ist die Faltungs-Engine 412 mit dem CnC-Fabric 410 und dem Daten-Fabric 411 gekoppelt. Die Faltungs-Engine 412 ist eine Vorrichtung, die konfiguriert ist, die Verarbeitung von Aufgaben, die der Faltung zugeordnet sind, zu verbessern. Außerdem verbessert die Faltungs-Engine 412 die Verarbeitung von Aufgaben, die der Analyse visueller Bilder zugeordnet sind, und/oder anderer Aufgaben, die CNNs zugeordnet sind. In einigen Beispielen kann die Faltungs-Engine 412 der Faltungs-Engine 312 von 3 entsprechen.
  • In dem dargestellten Beispiel von 4 ist die DMA-Einheit 414 mit dem CnC-Fabric 410 und dem Daten-Fabric 411 gekoppelt. Die DMA-Einheit 414 ist eine Vorrichtung, die es wenigstens einem aus der Faltungs-Engine 412, der RNN-Engine 416 oder dem DSP 418 ermöglicht, auf einen Speicher (z. den Systemspeicher 302), der zu dem Beschleuniger 406 entfernt ist, unabhängig von einem entsprechenden Prozessor (z. B. dem Host-Prozessor 306) zuzugreifen. In einigen Beispielen kann die DMA-Einheit 414 der DMA-Einheit 324 von 3 entsprechen. Beispielsweise kann die DMA-Einheit 414 durch eine oder mehrere analoge oder digitale Schaltung(en), Logikschaltungen, programmierbare Prozessor(en), programmierbare (Steuereinheit(en), GPU(s), DSP(s), ASIC(s), PLD(s) und/oder FPLD(s) implementiert sein.
  • In 4 ist die RNN-Engine 416 mit dem CnC-Fabric 410 und dem Daten-Fabric 411 gekoppelt. Die RNN-Engine 416 ist eine Vorrichtung, die konfiguriert ist, die Verarbeitung von Aufgaben, die RNNs zugeordnet sind, zu verbessern. Zusätzlich verbessert die RNN-Engine 416 die Verarbeitung von Aufgaben, die der Analyse nicht segmentierter, Handschrifterkennung, Spracherkennung zugeordnet sind, und/oder anderer Aufgaben, die RNNs zugeordnet sind. In einigen Beispielen kann die RNN-Engine 416 der RNN-Engine 314 von 3 entsprechen.
  • In dem Beispiel von 4 ist der DSP 418 mit dem CnC-Fabric 410 und dem Daten-Fabric 411 gekoppelt. Der DSP 418 ist eine Vorrichtung, die die Verarbeitung digitaler Signale verbessert. Beispielsweise unterstützt der DSP 418 die Verarbeitung zum Messen, Filtern und/oder Komprimieren kontinuierlicher Signale aus der realen Welt wie z. B. Daten aus Kameras und/oder anderen Sensoren, die zu Computersehen gehören. In einigen Beispielen kann der DSP 418 dem DSP 320 von 3 entsprechen.
  • In dem Beispiel von 4 ist der Speicher 420 mit dem Daten-Fabric 411 gekoppelt. Der Speicher 420 ist eine Speichereinrichtung, die von wenigstens einem aus der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und dem DSP 418 gemeinsam verwendet wird. In einigen Beispielen kann der Speicher 420 dem Speicher 316 von 3 entsprechen. Der Speicher 420 kann in einen oder mehrere Puffer partitioniert sein, die einem oder mehreren Arbeitslastknoten einer Arbeitslast zugeordnet sind, die einem ausführbaren Programm zugeordnet ist, das durch den Credit-Manager 408 empfangen wird. In dem Beispiel von 4 ist der Speicher 420 eine physikalische Speichereinrichtung, die lokal zu dem ersten Beschleunige 406 ist. In anderen Beispielen kann der Speicher 420 jedoch außerhalb des ersten Beschleunigers 406 und/oder anderweitig entfernt in Bezug dazu sein. In weiteren Beispielen kann der Speicher 420 eine virtuelle Speichereinrichtung sein. In dem Beispiel von 4 ist der Speicher 420 eine persistente Speichereinrichtung (z. B. ROM, PROM, EPROM, EEPROM usw.). In anderen Beispielen kann der Speicher 420 ein persistentes BIOS oder ein Flash-Speicher sein. In weiteren Beispielen kann der Speicher 420 ein flüchtiger Speicher sein.
  • In dem dargestellten Beispiel von 4 ist die beispielhafte MMU 422 mit dem Daten-Fabric 411 gekoppelt. Die MMU 422 ist eine Vorrichtung, die Referenzen auf die Adressen des Speichers 420 und/oder eines Speichers, der in Bezug auf den Beschleuniger 406 entfernt ist, enthält. Die MMU 422 übersetzt zusätzlich virtuelle Speicheradressen, die durch eine oder mehrere aus der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 und dem DSP 418 genutzt werden, in physikalische Adressen in dem Speicher 420 und/oder dem Speicher, der in Bezug auf den Beschleuniger 406 entfernt ist. In einigen Beispielen kann die MMU 422 der MMU 318 von 3 entsprechen.
  • In dem Beispiel von 4 ist jeder aus dem ersten Scheduler 424, dem zweiten Scheduler 426, dem dritten Scheduler 428 und dem vierten Scheduler 430 eine Vorrichtung, die bestimmt, wann die Faltungs-Engine 412, die DMA-Einheit 414, die RNN-Engine 416 bzw. der DSP 412 einen Abschnitt einer Arbeitslast (z. B. einen Arbeitslastknoten), der der Faltungs-Engine 412, der DMA-Einheit 414, der RNN-Engine 416 bzw. dem DSP 418 durch den Credit-Manager 408 und/oder einen zusätzlichen CBB des Beschleunigers 406 zugewiesen worden ist, ausführt. Abhängig von der Aufgabe und/oder anderen Operationen eines gegebenen Arbeitslastknotens kann der Arbeitslastknoten ein Produzent oder ein Verbraucher sein. Ein Produzenten-Arbeitslastknoten produziert Daten, die durch einen weiteren Arbeitslastknoten benutzt werden, während ein Verbraucher-Arbeitslastknoten Daten, die durch einen weiteren Arbeitslastknoten produziert werden, verbraucht und/oder anderweitig verarbeitet.
  • In dem dargestellten Beispiel von 4 ist die Kernel-Bibliothek 432 eine Datenstruktur, die einen oder mehrere Kernel enthält. In einigen Beispielen kann die Kernel-Bibliothek 432 der ersten Kernel-Bibliothek 336 von 3 entsprechen. Die Kernel der Kernel-Bibliothek 432 sind beispielsweise Routinen, die durch hohen Durchsatz auf dem DSP 418 zusammengestellt sind. Die Kernel entsprechen beispielsweise ausführbaren Unterabschnitten eines ausführbaren Programms, das auf dem Beschleuniger 406 ablaufen soll. Obwohl in dem Beispiel von 4 der Beschleuniger 406 eine VPU implementiert und den Credit-Manager 408, das CnC-Fabric 410, das Daten-Fabric 411, die Faltungs-Engine 412, die DMA-Einheit 414, die RNN-Engine 416, den DSP 418, den Speicher 420 und die MMU 422 enthält, kann der Beschleuniger 406 zusätzliche oder alternative CBBs zu den in 4 dargestellten enthalten.
  • In dem Beispiel von 4 lädt im Betrieb der erste Scheduler 424 die Credits, die den Eingangspuffern in einen Arbeitslastknoten und Ausgangspuffern von einem Arbeitslastknoten für Arbeitslastknoten, die der Faltungs-Engine 412 zugewiesen sind, entsprechen. Beispielsweise ist ein Eingangspuffer ein Puffer, für den ein Arbeitslastknoten konfiguriert ist, Daten daraus zu lesen, während ein Ausgangspuffer ein Puffer ist, in den Daten zu schreiben ein Arbeitslastknoten konfiguriert ist. In einigen Beispielen kann der Eingangspuffer eines ersten Arbeitslastknotens der Ausgangspuffer eines zweiten Arbeitslastknotens sein. Außerdem empfängt der erste Scheduler 424 Credits von dem Credit-Manager 408 oder erhält sie auf andere Weise von ihm.
  • In dem Beispiel von 4 wählt im Betrieb der erste Scheduler 424 einen Arbeitslastknoten, der der Faltungs-Engine 412 zugewiesen ist, aus und bestimmt, ob der erste Scheduler 424 eine Schwellenwertmenge von Credits empfangen hat, um auf den in dem Eingangspuffer zu dem ausgewählten Arbeitslastknoten gespeicherten Daten zu arbeiten. Beispielsweise vergleicht der erste Scheduler 424 eine Anzahl von Credits, die von einem Produzenten-Arbeitslastknoten für den Eingangspuffer empfangen werden, mit einer Schwellenwertmenge von Credits für den Eingangspuffer. Falls der erste Scheduler 424 die Schwellenwertmenge von Credits nicht empfangen hat, wiederholt der erste Scheduler 424 den Prozess auf einem weiteren Arbeitslastknoten, der der Faltungs-Engine 412 zugewiesen ist.
  • In dem in 4 dargestellten Beispiel bestimmt im Betrieb, falls der erste Scheduler 424 die Schwellenwertmenge von Credits empfangen hat, um auf den in dem Eingangspuffer zu dem ausgewählten Arbeitslastknoten gespeicherten Daten zu arbeiten, der erste Scheduler 424, ob der erste Scheduler 424 eine Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer für den ausgewählten Arbeitslastknoten zu schreiben. Beispielsweise vergleicht der erste Scheduler 424 eine Anzahl von Credits, die von einem Verbraucher-Arbeitslastknoten für den Ausgangspuffer empfangen werden, mit einer Schwellenwertmenge von Credits für den Ausgangspuffer für den ausgewählten Arbeitslastknoten. Falls der erste Scheduler 424 die Schwellenwertmenge von Credits nicht empfangen hat, wiederholt der erste Scheduler 424 den Prozess auf einem weiteren Arbeitslastknoten, der der Faltungs-Engine 412 zugewiesen ist. Falls der erste Scheduler 424 die Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer zu schreiben, zeigt der erste Scheduler 424 an, dass der ausgewählte Arbeitslastknoten zur Ausführung bereit ist. Nachfolgend wiederholt der erste Scheduler 424 diesen Prozess für zusätzliche Arbeitslastknoten, die der Faltungs-Engine 412 zugewiesen sind.
  • In dem Beispiel von 4 plant im Betrieb, nachdem der Arbeitslastknoten, der der Faltungs-Engine 412 zugewiesen ist, analysiert worden ist, der erste Scheduler 424 die Arbeitslastknoten, die zum Ausführen bereit sind. Der erste Scheduler 424 verteilt nachfolgend die Arbeitslastknoten gemäß der Planung. Nachdem der verteilte Arbeitslastknoten durch die Faltungs-Engine 412 ausgeführt worden ist, sendet der erste Scheduler 424 die Credits, die dem Eingangspuffer und/oder dem Ausgangspuffer entsprechen, zu dem Credit-Manager 408. Der erste Scheduler 424 bestimmt, ob zusätzliche Arbeitslastknoten in der Planung zur Ausführung vorhanden sind. Falls zusätzliche Arbeitslastknoten in der Planung sind, veranlasst der erste Scheduler 424, dass der nächste Arbeitslastknoten in der Planung auf der Faltungs-Engine 412 ausgeführt wird.
  • 5 ist ein Blockdiagramm eines beispielhaften Schedulers 500, der einen oder mehrere Scheduler der 3 und 4 implementieren kann. Beispielsweise ist der Scheduler 500 eine Beispielimplementierung des ersten Schedulers 326, des zweiten Schedulers 328, des dritten Schedulers 330, des vierten Schedulers 332 und/oder des fünften Schedulers 334 von 3 und/oder des ersten Schedulers 424, des zweiten Schedulers 426, des dritten Schedulers 428 und/oder des vierten Schedulers 430 von 4 und/oder des Schedulers 600 von 6 und/oder des ersten Schedulers 722, des zweiten Schedulers 724, des dritten Schedulers 726 und/oder des vierten Schedulers 728 von 7.
  • In dem Beispiel von 5 enthält der Scheduler 500 eine beispielhafte Arbeitslastschnittstelle 502, eine beispielhafte Puffer-Credit-Speichereinrichtung 504, eine beispielhafte Credit-Vergleichseinheit 506, einen beispielhaften Arbeitslastknoten-Dispatcher 508 und einen beispielhaften Kommunikationsbus 510. Der Scheduler 500 ist eine Vorrichtung, die bestimmt, wann ein CBB, dem der Scheduler 500 zugeordnet ist, einen Abschnitt einer Arbeitslast (z. B. einen Arbeitslastknoten), der dem CBB, dem der Scheduler 500 zugeordnet ist, zugewiesen worden ist, ausführt.
  • In dem dargestellten Beispiel von 5 ist die Arbeitslastschnittstelle 502 eine Vorrichtung, die konfiguriert ist, mit anderen Vorrichtungen außerhalb des Schedulers 500, der Puffer-Credit-Speichereinrichtung 504, der Credit-Vergleichseinheit 506 und/oder dem Arbeitslastknoten-Dispatcher 508 zu kommunizieren. Beispielsweise kann die Arbeitslastschnittstelle 502 Arbeitslastknoten empfangen und/oder anderweitig erhalten, die durch den CBB, dem der Scheduler 500 zugeordnet ist, auszuführen sind. Zusätzlich oder alternativ kann die Arbeitslastschnittstelle 502 Credits zu anderen Schedulern, anderen CBBs und/oder anderen Vorrichtungen senden oder von ihnen empfangen. Außerdem kann die Arbeitslastschnittstelle 502 die Credits, die den Eingangspuffern zu einem Arbeitslastknoten und/oder Ausgangspuffern von einem Arbeitslastknoten entsprechen, in die und/oder aus der Puffer-Credit-Speichereinrichtung 504 laden.
  • In einigen Beispielen implementiert die beispielhafte Arbeitslastschnittstelle 502 beispielhafte für Schnittstellenmittel. Die Schnittstellenmittel sind durch ausführbare Anweisungen implementiert, wie z. B. durch wenigstens die Blöcke 802, 818 und 822 von 8 implementiert. Beispielsweise können die ausführbaren Anweisungen der Blöcke 802, 828 und 822 von 8 auf wenigstens einem Prozessor wie z. B. dem beispielhaften Prozessor 910 und/oder dem beispielhaften Beschleuniger 912, die in dem Beispiel von 9 gezeigt sind, ausgeführt werden. In anderen Beispielen sind die Schnittstellenmittel durch Hardware-Logik, Hardware implementierte Zustandsautomaten, Logikschaltungsanordnung und/oder irgendeine andere Kombination aus Hardware, Software und/oder Firmware implementiert.
  • In dem in 5 dargestellten Beispiel ist die Puffer-Credit-Speichereinrichtung 504 eine Speichereinrichtung, die von wenigstens einem aus der Arbeitslastschnittstelle 502, der Credit-Vergleichseinheit 506 und/oder dem Arbeitslastknoten-Dispatcher 508 gemeinsam verwendet wird. Die Puffer-Credit-Speichereinrichtung 504 ist eine physikalische Speichereinrichtung lokal zu dem Scheduler 500; in anderen Beispielen kann die Puffer-Credit-Speichereinrichtung 504 jedoch außerhalb des Schedulers 500 oder anderweitig entfernt in Bezug auf ihn sein. In weiteren Beispielen kann die Puffer-Credit-Speichereinrichtung 504 eine virtuelle Speichereinrichtung sein. In dem Beispiel von 5 ist die Puffer-Credit-Speichereinrichtung 504 eine persistente Speichereinrichtung (z. B. ROM, PROM, EPROM, EEPROM usw.). In anderen Beispielen kann die Puffer-Credit-Speichereinrichtung 504 ein persistentes BIOS oder ein Flash-Speicher sein. In weiteren Beispielen kann die Puffer-Credit-Speichereinrichtung 504 ein flüchtiger Speicher sein.
  • In dem Beispiel von 5 ist die Puffer-Credit-Speichereinrichtung 504 ein Speicher, der dem Speichern von Credits zugeordnet ist, die Eingangspuffern zu Arbeitslastknoten und/oder Ausgangspuffern von Arbeitslastknoten entsprechen, die Arbeitslastknoten zugeordnet sind, die dem CBB zugewiesen sind, dem der Scheduler 500 zugeordnet ist. Beispielsweise kann die Puffer-Credit-Speichereinrichtung 504 als eine Datenstruktur implementiert sein, die Felder für jeden Arbeitslastknoten, der dem CBB zugewiesen ist, dem der Scheduler 500 zugeordnet ist, und Felder für jeden Eingangspuffer zu Arbeitslastknoten und/oder jedem Ausgangspuffer aus Arbeitslastknoten, die Arbeitslastknoten zugeordnet sind, die dem CBB zugewiesen sind, dem der Scheduler 500 zugeordnet ist, enthält.
  • In dem dargestellten Beispiel von 5 kann die Puffer-Credit-Speichereinrichtung 504 zusätzlich oder alternativ Arbeitslastknoten, die dem CBB zugewiesen worden sind, dem der Scheduler 500 zugeordnet ist, und/oder eine Schwellenwertmenge von Credits, die Eingangspuffern zu Arbeitslastknoten und/oder Ausgangspuffern aus den Arbeitslastknoten entspricht, speichern. Außerdem enthält die Puffer-Credit-Speichereinrichtung 504 ein Feld, das einer Schwellenwertanzahl von Credits für Eingangspuffer zu jedem Arbeitslastknoten und/oder Ausgangspuffern aus jedem Arbeitslastknoten zugeordnet ist.
  • In dem Beispiel von 5 entspricht, wenn der Arbeitslastknoten ein Produzent ist (z. B. der Arbeitslastknoten erzeugt Daten, die durch einen weiteren Arbeitslastknoten benutzt werden sollen), die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Platzes in einem Ausgangspuffer (z. B. einem partitionierten Platz in dem Speicher 420), die erfüllt sein muss, bevor der CBB, dem der Scheduler 500 zugeordnet ist, den Produzenten-Arbeitslastknoten ausführen kann. Zusätzlich entspricht, wenn der Arbeitslastknoten ein Verbraucher ist (z. B. der Arbeitslastknoten verarbeitet Daten, die durch einen weiteren Arbeitslastknoten erzeugt werden), die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in einem Eingangspuffer (z. B. einem partitionierten Platz in dem Speicher 420), die erfüllt sein muss, bevor der CBB, dem der Scheduler 500 zugeordnet ist, den Verbraucher-Arbeitslastknoten ausführen kann.
  • In einigen Beispielen implementiert die beispielhafte Puffer-Credit-Speichereinrichtung 504 Beispielmittel zum Speichern. Die Speichermittel können durch ausführbare Anweisungen wie z. B. den in 8 implementierten implementiert sein. Beispielsweise können die ausführbaren Anweisungen auf wenigstens einem Prozessor wie z. B. dem beispielhaften Prozessor 910 und/oder dem beispielhaften Beschleuniger 912, die in dem Beispiel von 9 gezeigt sind, ausgeführt werden. In anderen Beispielen sind die Speichermittel durch Hardware-Logik, Hardware implementierte Zustandsautomaten, Logikschaltungsanordnung und/oder irgendeine andere Kombination aus Hardware, Software und/oder Firmware implementiert.
  • In dem in 5 dargestellten Beispiel ist die Credit-Vergleichseinheit 506 eine Vorrichtung, die konfiguriert ist zu bestimmen, ob die Schwellenwertanzahl von Credits, die den Eingangspuffern zu Arbeitslastknoten und/oder Ausgangspuffern aus Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler zugeordnet ist, entspricht, empfangen worden ist. Die Credit-Vergleichseinheit 506 ist konfiguriert, einen Arbeitslastknoten, der dem CBB zugewiesen ist, dem der Scheduler 500 zugeordnet ist, auszuwählen.
  • In dem beispielhaft von 5 ist die Credit-Vergleichseinheit zusätzlich konfiguriert zu bestimmen, ob der Scheduler 500 eine Schwellenwertmenge von Credits empfangen hat, um auf den Daten, die in dem Eingangspuffer für den ausgewählten Arbeitslastknoten gespeichert sind, zu arbeiten. Beispielsweise vergleicht die Credit-Vergleichseinheit 506 ein Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Anzahl von Credits, die von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) empfangen werden, zugeordnet ist, mit einem Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Schwellenwertanzahl von Credits für den Eingangspuffer zu dem ausgewählten Arbeitslastknoten zugeordnet ist. Falls der Scheduler 500 die Schwellenwertmenge von Credits nicht empfangen hat, wiederholt die Credit-Vergleichseinheit 506 den Prozess auf einem weiteren Arbeitslastknoten, der dem CBB zugewiesen ist, dem der Scheduler 500 zugeordnet ist.
  • In dem in 5 dargestellten Beispiel bestimmt, falls der Scheduler 500 die Schwellenwertmenge von Credits empfangen hat, um auf den in dem Eingangspuffer gespeicherten Daten zu arbeiten, die Credit-Vergleichseinheit 506, ob der Scheduler 500 die Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer für den ausgewählten Arbeitslastknoten zu schreiben. Beispielsweise vergleicht die Credit-Vergleichseinheit 506 ein Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Anzahl von Credits, die von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) für den Ausgangspuffer für den ausgewählten Arbeitslastknoten empfangen werden, zugeordnet ist, mit einem Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Schwellenwertanzahl von Credits für den Ausgangspuffer zugeordnet ist.
  • In dem Beispiel von 5 wiederholt, falls der Scheduler 500 die Schwellenwertmenge von Credits nicht empfangen hat, die Credit-Vergleichseinheit 506 den Prozess auf einem weiteren Arbeitslastknoten, der dem CBB zugewiesen ist, dem der Scheduler 500 zugeordnet ist. Falls der Scheduler 500 die Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer zu schreiben, zeigt die Credit-Vergleichseinheit 506 an, dass der ausgewählte Arbeitslastknoten zur Ausführung bereit ist. Nachfolgend wiederholt die Credit-Vergleichseinheit 506 diesen Prozess für zusätzliche Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 500 zugeordnet ist.
  • In einigen Beispielen implementiert die Credit-Vergleichseinheit 506 Beispielmittel zum Vergleichen. Die Vergleichsmittel sind durch ausführbare Anweisungen implementiert, wie z. B. durch wenigstens die Blöcke 804, 806, 808, 810 und 812 von 8 implementiert. Beispielsweise können die ausführbaren Anweisungen der Blöcke 804, 806, 808, 810 und 812 von 8 auf wenigstens einem Prozessor wie z. B. dem beispielhaften Prozessor 910 und/oder dem beispielhaften Beschleuniger 912, die in dem Beispiel von 9 gezeigt sind, ausgeführt werden. In anderen Beispielen sind die Vergleichsmittel durch Hardware-Logik, Hardware implementierte Zustandsautomaten, Logikschaltungsanordnung und/oder irgendeine andere Kombination aus Hardware, Software und/oder Firmware implementiert.
  • In dem Beispiel von 5 ist der Arbeitslastknoten-Dispatcher 508 eine Vorrichtung, die einen oder mehrere Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 500 zugeordnet ist, plant, auf dem CBB, dem der Scheduler 500 zugeordnet ist, ausgeführt zu werden. Beispielsweise plant der Arbeitslastknoten-Dispatcher 508, nachdem die Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 500 zugeordnet ist, analysiert worden sind, die Arbeitslastknoten, die bereit zum Ausführen sind. Beispielsweise plant der Arbeitslastknoten-Dispatcher 508 die Arbeitslastknoten, die bereit zum Ausführen sind, basierend auf einem Planungsalgorithmus wie z. B. einer Rundlauf-Planung. Der Arbeitslastknoten-Dispatcher 508 verteilt nachfolgend die Arbeitslastknoten gemäß der Planung. In anderen Beispielen kann der Arbeitslastknoten-Dispatcher 508 irgendeinen anderen geeigneten Entscheidungsalgorithmus verwenden, um die Arbeitslastknoten, die zum Ausführen bereit sind, zu planen.
  • In dem in 5 dargestellten Beispiel sendet, wenn der verteilte Arbeitslastknoten durch den CBB, dem der Scheduler 500 zugeordnet ist, ausgeführt wird, die Arbeitslastschnittstelle 502 die Credits, die dem Eingangspuffer zugeordnet ist, zu der externen Vorrichtung, von der die Arbeitslastschnittstelle 502 die Credits empfangen hat (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.). Der Arbeitslastknoten-Dispatcher 508 bestimmt zusätzlich, ob zusätzliche Arbeitslastknoten in der Planung zur Ausführung vorhanden sind. Falls zusätzliche Arbeitslastknoten in der Planung vorhanden sind, verteilt der Arbeitslastknoten-Dispatcher 508 den nächsten Arbeitslastknoten in der Planung.
  • In einigen Beispielen implementiert der beispielhafte Arbeitslastknoten-Dispatcher 508 beispielhafte für Mittel zum Verteilen. Die Verteilungsmittel sind durch ausführbare Anweisungen implementiert, wie z. B. durch wenigstens die Blöcke 814, 816 und 820 von 8 implementiert. Beispielsweise können die ausführbaren Anweisungen der Blöcke 814, 816 und 820 von 8 auf wenigstens einem Prozessor wie z. B. dem beispielhaften Prozessor 910 und/oder dem beispielhaften Beschleuniger 912, die in dem Beispiel von 9 gezeigt sind, ausgeführt werden. In anderen Beispielen sind die Verteilungsmittel durch Hardware-Logik, Hardware implementierte Zustandsautomaten, Logikschaltungsanordnung und/oder irgendeine andere Kombination aus Hardware, Software und/oder Firmware implementiert.
  • In hier offenbarten Beispielen ist jedes aus der Arbeitslastschnittstelle 502, der Puffer-Credit-Speichereinrichtung 54, der Credit-Vergleichseinheit 506 und dem Arbeitslastknoten-Dispatcher 508 in Kommunikation mit den anderen Elementen des Schedulers 500. Beispielsweise sind die Arbeitslastschnittstelle 502, die Puffer-Credit-Speichereinrichtung 504, die Credit-Vergleichseinheit 506 und der Arbeitslastknoten-Dispatcher 508 in Kommunikation über einen beispielhaften Kommunikationsbus 510. In einigen hier offenbarten Beispielen können die Arbeitslastschnittstelle 502, die Puffer-Credit-Speichereinrichtung 504, die Credit-Vergleichseinheit 506 und der Arbeitslastknoten-Dispatcher 508 über irgendein geeignetes drahtgebundenes und/oder drahtloses Kommunikationssystem in Kommunikation sein. Zusätzlich kann in einigen hier offenbarten Beispielen jedes aus der Arbeitslastschnittstelle 502, der Puffer-Credit-Speichereinrichtung 504, der Credit-Vergleichseinheit 506 und dem Arbeitslastknoten-Dispatcher 508 mit irgendwelchen Komponenten außerhalb des Schedulers 500 über irgendein geeignetes drahtgebundenes und/oder drahtloses Kommunikationssystem in Kommunikation sein.
  • 6 ist ein Blockdiagramm eines beispielhaften Schedulers 600, das weitere Einzelheiten der Puffer-Credit-Speichereinrichtung 504 von 5 zeigt. Der Scheduler 600 ist eine Beispielimplementierung des ersten Schedulers 326, des zweiten Schedulers 328, des dritten Schedulers 330, des vierten Schedulers 332 und/oder des fünften Schedulers 334 von 3 und/oder des ersten Schedulers 424, des zweiten Schedulers 426, des dritten Schedulers 428 und/oder des vierten Schedulers 430 von 4 und/oder des Schedulers 500 von 5 und/oder des ersten Schedulers 722, des zweiten Schedulers 724, des dritten Schedulers 726 und/oder des vierten Schedulers 728 von 7.
  • In dem Beispiel von 6 enthält der Scheduler 600 die beispielhafte Arbeitslastschnittstelle 502, die beispielhafte Puffer-Credit-Speichereinrichtung 504, die beispielhafte Credit-Vergleichseinheit 506 und den beispielhaften Arbeitslastknoten-Dispatcher 508. Der Scheduler 600 ist eine Vorrichtung, die bestimmt, wann ein CBB, dem der Scheduler 600 zugeordnet ist, einen Abschnitt einer Arbeitslast (z. B. einen Arbeitslastknoten), der dem CBB, dem der Scheduler 600 zugeordnet ist, zugewiesen worden ist, ausführt.
  • In dem dargestellten Beispiel von 6 ist die Arbeitslastschnittstelle 502 mit einer oder mehreren Vorrichtungen außerhalb des Schedulers 600, der Puffer-Credit-Speichereinrichtung 504 und dem Arbeitslastknoten-Dispatcher 508 gekoppelt. Die Arbeitslastschnittstelle 502 ist eine Vorrichtung, die konfiguriert ist, mit anderen Vorrichtungen außerhalb des Schedulers 600, der Puffer-Credit-Speichereinrichtung 504 und/oder dem Arbeitslastknoten-Dispatcher 508 zu kommunizieren. Beispielsweise kann die Arbeitslastschnittstelle 502 Arbeitslastknoten empfangen und/oder anderweitig erhalten, die durch den CBB, dem der Scheduler 600 zugeordnet ist, auszuführen sind. Zusätzlich oder alternativ kann die Arbeitslastschnittstelle 502 Credits zu einer oder mehreren Vorrichtungen außerhalb des Schedulers 600 senden und/oder von ihnen empfangen. Außerdem kann die Arbeitslastschnittstelle 502 Credits, die den Eingangspuffern zu einem Arbeitslastknoten und/oder Ausgangspuffern von einem Arbeitslastknoten entsprechen, in die und/oder aus Puffer-Credit-Speichereinrichtung 504 laden.
  • In dem in 6 dargestellten Beispiel ist die Puffer-Credit-Speichereinrichtung 504 eine Speichereinrichtung, die durch wenigstens eines aus der Arbeitslastschnittstelle 502, der Credit-Vergleichseinheit 506 und/oder dem Arbeitslastknoten-Dispatcher 508 gemeinsam verwendet wird. Die Puffer-Credit-Speichereinrichtung 504 ist eine physikalische Speichereinrichtung lokal zu dem Scheduler 500. In anderen Beispielen kann die Puffer-Credit-Speichereinrichtung 504 jedoch außerhalb des Schedulers 500 oder anderweitig entfernt in Bezug auf ihn sein. In weiteren Beispielen kann die Puffer-Credit-Speichereinrichtung 504 eine virtuelle Speichereinrichtung sein. In dem Beispiel von 5 ist die Puffer-Credit-Speichereinrichtung 504 eine persistente Speichereinrichtung (z. B. ROM, PROM, EPROM, EEPROM usw.). In anderen Beispielen kann die Puffer-Credit-Speichereinrichtung 504 ein persistentes BIOS oder ein Flash-Speicher sein. In weiteren Beispielen kann die Puffer-Credit-Speichereinrichtung 504 ein flüchtiger Speicher sein.
  • In dem Beispiel von 6 ist die Puffer-Credit-Speichereinrichtung 504 eine Datenstruktur, die Zeilen enthält, die einem ersten Arbeitslastknoten WN[0], einem zweiten Arbeitslastknoten (WN[1], und einem n-ten Arbeitslastknoten WN[n] entsprechen. Die Puffer-Credit-Speichereinrichtung 504 enthält zusätzlich Spalten, die einem Eingangspuffer für einen ersten Verbraucher (z. B. Verbraucher[0]), einem Eingangspuffer für einen 1-ten Verbraucher (z. B. Verbraucher[1]), einem Ausgangspuffer für einen ersten Produzenten (z. B. Prozent[0]) und einen Ausgangspuffer für einen m-ten Produzenten (z. B. Produzent[m]) entsprechen. Die Puffer-Credit-Speichereinrichtung 504 enthält ferner eine Spalte, die einer Schwellenwertanzahl von Credits für Eingangspuffer zu jedem Arbeitslastknoten und/oder Ausgangspuffern aus jedem Arbeitslastknoten entspricht.
  • In dem dargestellten Beispiel von 6 ist jeder aus dem ersten Arbeitslastknoten WN[0], dem zweiten Arbeitslastknoten WN[1], und dem n-ten Arbeitslastknoten WN[n] dem CBB zugewiesen, dem der Scheduler 600 zugeordnet ist. In der Puffer-Credit-Speichereinrichtung 504 repräsentiert der Schnittpunkt zwischen den Zeilen, die dem ersten Arbeitslastknoten WN[0], dem zweiten Arbeitslastknoten WN[1], und dem n-ten Arbeitslastknoten WN[n] entsprechen, und den Spalten, die dem Eingangspuffer für den ersten Verbraucher (z. B. Verbraucher[0]), dem Eingangspuffer für den 1-ten Verbraucher (z. B. Verbraucher [1]), dem Ausgangspuffer für den ersten Produzenten (z. B. Produzent[0]) und dem Ausgangspuffer für den m-ten Produzenten (z. B. Produzent[m]) entsprechen, Felder, die der Anzahl von Credits entsprechen, die von einer oder mehreren externen Vorrichtungen für diesen Puffer empfangen werden. Außerdem repräsentiert die Spalte, die der Schwellenwertanzahl von Credits für Eingangspuffer zu jedem Arbeitslastknoten und/oder Ausgangspuffer von jedem Arbeitslastknoten entspricht, eine Schwellenwertanzahl von Credits, die für einen Puffer erfüllt sein muss, bevor der CBB, dem der Scheduler 600 zugeordnet ist, auf dem jeweiligen Arbeitslastknoten arbeiten kann.
  • In dem Beispiel von 6 werden die Felder in der Puffer-Credit-Speichereinrichtung 504 an dem Schnittpunkt zwischen den Zeilen, die dem ersten Arbeitslastknoten WN[0], dem zweiten Arbeitslastknoten WN[1] und dem n-ten Arbeitslastknoten WN[n] entsprechen, und den Spalten, die dem Eingangspuffer für den ersten Verbraucher (z. B. Verbraucher[0]), dem Eingangspuffer für den 1-ten Verbraucher (z. B. Verbraucher [1]) entsprechen, durch eine externe Vorrichtung (z. B. den Credit-Manager 408, die Steuereinheit 322 usw.) auf einen Wert von Null initialisiert. Zusätzlich werden die Felder in der Puffer-Credit-Speichereinrichtung 504 an dem Schnittpunkt zwischen den Zeilen, die dem ersten Arbeitslastknoten WN[0], dem zweiten Arbeitslastknoten WN[1] und dem n-ten Arbeitslastknoten WN[n] entsprechen, und den Spalten, die dem Ausgangspuffer für den ersten Produzenten (z. B. Produzent[0]) und dem Ausgangspuffer für den m-ten Produzenten (z. B. Produzent[m]) entsprechen, durch die externe Vorrichtung (z. B. den Credit-Manager 408, die Steuereinheit 322 usw.) auf einen Wert initialisiert, der einer Größe des Speichers, der in dem zugeordneten Puffer partitioniert ist, entspricht. Außerdem wird die Spalte, die der Schwellenwertanzahl von Credits für Eingangspuffer und/oder Ausgangspuffer entspricht, durch eine externe Vorrichtung (z. B. den Credit-Manager 408, die Steuereinheit 322, Software, die auf dem Host-Prozessor 306 abläuft, usw.) initialisiert.
  • In dem in 6 dargestellten Beispiel ist die Credit-Vergleichseinheit 506 mit der Puffer-Credit-Speichereinrichtung 504 und dem Arbeitslastknoten-Dispatcher 508 gekoppelt. Die Credit-Vergleichseinheit 506 ist eine Vorrichtung, die konfiguriert ist zu bestimmen, ob die Schwellenwertanzahl von Credits empfangen worden ist, die den Eingangspuffern zu Arbeitslastknoten und/oder Ausgangspuffern aus Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 600 zugeordnet ist, entspricht. In dem Beispiel von 6 ist der Arbeitslastknoten-Dispatcher 508 mit der Arbeitslastschnittstelle 502, der Puffer-Credit-Speichereinrichtung 504, der Credit-Vergleichseinheit 506 und einer oder mehreren Vorrichtungen außerhalb des Schedulers 600 gekoppelt. Der Arbeitslastknoten-Dispatcher 508 ist beispielsweise eine Vorrichtung, die einen oder mehrere Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 600 zugeordnet ist, plant, auf dem CBB, dem der Scheduler 600 zugeordnet ist, ausgeführt zu werden.
  • In dem Beispiel von 6 lädt im Betrieb, wenn die Arbeitslastschnittstelle 502 Arbeitslastknoten von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) empfängt oder anderweitig erhält, die Arbeitslastschnittstelle 502 die Arbeitslastknoten in entsprechende Felder in der Puffer-Credit-Speichereinrichtung 504, die den Arbeitslastknoten entsprechen. Außerdem wählt die Credit-Vergleichseinheit 506 einen Arbeitslastknoten aus, der dem CBB zugewiesen ist, dem der Scheduler 600 zugeordnet ist.
  • In dem dargestellten Beispiel von 6 bestimmt die Credit-Vergleichseinheit 506, ob der Scheduler 600 eine Schwellenwertmenge von Credits empfangen hat, um auf den Daten zu arbeiten, die in dem Eingangspuffer für den ausgewählten Arbeitslastknoten gespeichert sind. Beispielsweise vergleicht die Credit-Vergleichseinheit 506 das Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Anzahl von Credits, die von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) empfangen werden, zugeordnet ist, mit dem Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Schwellenwertanzahl von Credits für den Eingangspuffer des ausgewählten Arbeitslastknoten zugeordnet ist. Die Schwellenwertanzahl von Credits entspricht einer Schwellenwertmenge von Daten in einem Eingangspuffer (z. B. einem partitionierten Platz in dem Speicher 420), die erfüllt sein muss, bevor der CBB, dem der Scheduler 600 zugeordnet ist, den Verbraucher-Arbeitslastknoten ausführen kann. Falls der Scheduler 600 die Schwellenwertmenge von Credits nicht empfangen hat, wiederholt die Credit-Vergleichseinheit 506 den Prozess auf einem weiteren Arbeitslastknoten, der dem CBB zugewiesen ist, dem der Scheduler 600 zugeordnet ist.
  • In dem in 6 dargestellten Beispiel bestimmt, falls der Scheduler 600 die Schwellenwertmenge von Credits empfangen hat, um auf den in dem Eingangspuffer gespeicherten Daten zu arbeiten, die Credit-Vergleichseinheit 506, ob der Scheduler 600 die Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer für den ausgewählten Arbeitslastknoten zu schreiben. Beispielsweise vergleicht die Credit-Vergleichseinheit 506 ein Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Anzahl von Credits, die von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) für den Ausgangspuffer für den ausgewählten Arbeitslastknoten empfangen werden, zugeordnet ist, mit einem Feld in der Puffer-Credit-Speichereinrichtung 504, das einer Schwellenwertanzahl von Credits für den Ausgangspuffer zugeordnet ist. Die Schwellenwertanzahl von Credits kann einer Schwellenwertmenge des Platzes in einem Ausgangspuffer (z. B. einem partitionierten Platz in dem Speicher) entsprechen, die erfüllt sein muss, bevor der CBB, dem der Scheduler 600 zugeordnet ist, den Produzenten-Arbeitslastknoten ausführen kann.
  • In dem Beispiel von 6 wiederholt, falls der Scheduler 600 die Schwellenwertmenge von Credits nicht empfangen hat, die Credit-Vergleichseinheit 506 den Prozess auf einem weiteren Arbeitslastknoten, der dem CBB zugewiesen ist, dem der Scheduler 600 zugeordnet ist. Falls der Scheduler 600 die Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer zu schreiben, zeigt die Credit-Vergleichseinheit 506 an, dass der ausgewählte Arbeitslastknoten zur Ausführung bereit ist. Nachfolgend wiederholt die Credit-Vergleichseinheit 506 diesen Prozess für zusätzliche Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 600 zugeordnet ist.
  • In dem Beispiel von 6 ist der Arbeitslastknoten-Dispatcher 508 eine Vorrichtung, die einen oder mehrere Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 600 zugeordnet ist, plant, auf dem CBB, dem der Scheduler 600 zugeordnet ist, ausgeführt zu werden. Beispielsweise plant der Arbeitslastknoten-Dispatcher 508, nachdem die Arbeitslastknoten, die dem CBB zugewiesen sind, dem der Scheduler 600 zugeordnet ist, analysiert worden sind, die Arbeitslastknoten, die bereit zum Ausführen sind. Beispielsweise plant der Arbeitslastknoten-Dispatcher 508 die Arbeitslastknoten, die bereit zum Ausführen sind, basierend auf einem Planungsalgorithmus wie z. B. einer Rundlauf-Planung. Der Arbeitslastknoten-Dispatcher 508 verteilt nachfolgend die Arbeitslastknoten gemäß der Planung. In anderen Beispielen kann der Arbeitslastknoten-Dispatcher 508 irgendeinen anderen geeigneten Entscheidungsalgorithmus verwenden, um die Arbeitslastknoten, die zum Ausführen bereit sind, zu planen.
  • In dem in 6 dargestellten Beispiel sendet, wenn der verteilte Arbeitslastknoten durch den CBB, dem der Scheduler 600 zugeordnet ist, ausgeführt wird, die Arbeitslastschnittstelle 502 die Credits, die dem Eingangspuffer zugeordnet ist, zu der externen Vorrichtung, von der die Arbeitslastschnittstelle 502 die Credits empfangen hat (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.). Der Arbeitslastknoten-Dispatcher 508 bestimmt zusätzlich, ob zusätzliche Arbeitslastknoten in der Planung zur Ausführung vorhanden sind. Falls zusätzliche Arbeitslastknoten in der Planung vorhanden sind, verteilt der Arbeitslastknoten-Dispatcher 508 den nächsten Arbeitslastknoten in der Planung.
  • 7 ist eine grafische Darstellung eines beispielhaften Graphen 700, der eine Arbeitslast repräsentiert, die auf einem Beschleuniger eines heterogenen Systems, das Pipelines und Puffer implementiert, abläuft. Beispielsweise ist der Beschleuniger der erste Beschleuniger 310a, und das heterogene System ist das heterogene System 304 von 3. Der beispielhafte Graph 700 enthält einen beispielhaften ersten Arbeitslastknoten 702 (WN[0]), einen beispielhaften zweiten Arbeitslastknoten 704 (WN[1]), einen beispielhaften dritten Arbeitslastknoten 706 (WN[2]), einen beispielhaften vierten Arbeitslastknoten 708 (WN[3]) und einen beispielhaften fünften Arbeitslastknoten 710 (WN[4]).). In dem Beispiel von 7 ist der Beschleuniger konfiguriert, die durch den Graphen 700 repräsentierte Arbeitslast basierend auf einer Planung von einem beispielhaften Credit-Manager 712, der Arbeitslastknoten verschiedenen CBBs zuweist, auszuführen. Beispielsweise weist der Credit-Manager 712 und/oder eine weitere Steuereinheit den ersten Arbeitslastknoten 702 (WN[0]) einem beispielhaften ersten CBB 714, den zweiten Arbeitslastknoten 704 (WN[1]) einem beispielhaften zweiten CBB 716, den dritten Arbeitslastknoten 706 (WN[2]) einem beispielhaften dritten CBB 718, den vierten Arbeitslastknoten 708 (WN[3]) einem beispielhaften vierten CBB 720 und den fünften Arbeitslastknoten 710 (WN[4]) dem beispielhaften zweiten CBB 716 zu.
  • In dem Beispiel von 7 enthält jeder aus dem beispielhaften ersten CBB 714, dem beispielhaften zweiten CBB 716, dem beispielhaften dritten CBB 718 und dem beispielhaften vierten CBB 720 einen beispielhaften ersten Scheduler 722, einen beispielhaften zweiten Scheduler 724, einen beispielhaften dritten Scheduler 726 und einen beispielhaften vierten Scheduler 728. Jeder aus dem ersten Scheduler 722, dem zweiten Scheduler 724, dem dritten Scheduler 726 und dem vierten Scheduler 728 kann durch den Scheduler 500 von 5 und/oder den Scheduler 600 von 6 implementiert sein.
  • In dem dargestellten Beispiel von 7 sind der erste Arbeitslastknoten WN[702]) und der zweite Arbeitslastknoten 704 (WN[1]) einem beispielhaften ersten Puffer 730 zugeordnet. Der erste Puffer 730 ist ein Ausgangspuffer des ersten Arbeitslastknotens 702 (WN[0]) und ein Eingangspuffer zu dem zweiten Arbeitslastknoten 704 (WN[1]).). Der zweite Arbeitslastknoten (WN[1]) und der dritte Arbeitslastknoten 706 (WN[2]) sind einem beispielhaften zweiten Puffer 732 zugeordnet. Der zweite Puffer 732 ist der Ausgangspuffer des zweiten Arbeitslastknotens 704 (WN[1]) und ein Eingangspuffer zu dem dritten Arbeitslastknoten 706 (WN[2]). Der vierte Arbeitslastknoten 708 (WN[3]) und der fünfte Arbeitslastknoten 710 (WN[4]) sind einem beispielhaften dritten Puffer 734 zugeordnet. Der dritte Puffer 734 ist ein Ausgangspuffer des vierten Arbeitslastknotens 708 (WN[3]) und ein Eingangspuffer zu dem fünften Arbeitslastknoten 710 (WN[4]). Jeder aus dem ersten Puffer 730, dem zweiten Puffer 732 und dem dritten Puffer 734 kann durch einen zyklischen Puffer implementiert sein. In dem Beispiel von 7 enthält jeder aus dem ersten Puffer 703, dem zweiten Puffer 732 und dem dritten Puffer 734 fünf Partitionen des Speichers des Beschleunigers, von denen jeder eine Kachel von Daten speichern kann.
  • In dem in 7 dargestellten Beispiel initialisiert, da der erste Arbeitslastknoten 702 (WN[0]) ein Produzenten-Arbeitslastknoten ist, der Credit-Manager 712 den ersten Scheduler 722 mit fünf Credits für den ersten Puffer 730. Ähnlich initialisiert der Credit-Manager 712, weil der zweite Arbeitslastknoten 704 (WN[1]) ein Produzenten-Arbeitslastknoten ist, den zweiten Scheduler 724 mit fünf Credits für den zweiten Puffer 732. Zusätzlich initialisiert der Credit-Manager 712, weil der vierte Arbeitslastknoten 708 (WN[3]) ein Produzenten-Arbeitslastknoten ist, den vierten Scheduler 728 mit fünf Credits für den dritten Puffer 734.
  • Die fünf Credits, die für jeden aus dem ersten Scheduler 722, dem zweiten Scheduler 724 und dem vierten Scheduler 728 bereitgestellt sind, sind für die Größe des ersten Puffers 730, des zweiten Puffers 732 und des dritten Puffers 734 repräsentativ. Zusätzlich initialisiert der Credit-Manager 712, da der zweite Arbeitslastknoten 704 (WN[1]) auch ein Verbraucher-Arbeitslastknoten ist, den zweiten Scheduler 724 mit null Credits für den ersten Puffer 730. Außerdem initialisiert der Credit-Manager 712, weil der dritte Arbeitslastknoten 706 (WN[2]) ein Verbraucher-Arbeitslastknoten ist, den dritten Scheduler 726 mit null Credits für den zweiten Puffer 732. Darüber hinaus initialisiert der Credit-Manager 712, da der fünfte Arbeitslastknoten 710 (WN[4]) ein Verbraucher-Arbeitslastknoten ist, den zweiten Scheduler 724 mit null Credits für den dritten Puffer 734.
  • In dem Beispiel von 7 verteilt der erste Scheduler 722, weil der erste Scheduler 722 die Schwellenwertanzahl von Credits sowohl für die Eingangspuffer zu dem als auch die Ausgangspuffer aus dem ersten Arbeitslastknoten 702 (WN[0]) empfangen hat, den ersten Arbeitslastknoten 702 (WN[0]) zum Ausführen auf dem ersten CBB 714. Zusätzlich verteilt der vierte Scheduler 728, weil der vierte Scheduler 728 die Schwellenwertanzahl von Credits sowohl für die Eingangspuffer zu dem als auch die Ausgangspuffer aus dem vierten Arbeitslastknoten 708 (WN[3]) empfangen hat, den vierten Arbeitslastknoten 708 (WN[3]) zum Ausführen auf dem vierten CBB 720. Da der erste Arbeitslastknoten 702 (WN[0]) auf dem ersten CBB 714 abläuft, sendet der erste CBB 714 Daten zu dem ersten Puffer 730. Ähnlich sendet, da der vierte Arbeitslastknoten 708 (WN[3]) auf dem vierten CBB 720 abläuft, der vierte CBB 720 Daten zu dem dritten Puffer 734.
  • In dem in 7 dargestellten Beispiel senden, da jeder aus dem ersten CBB 714 und dem vierten CBB 720 Kacheln von Daten sendet, die dem ersten Arbeitslastknoten 702 (WN[0]) bzw. dem vierten Arbeitslastknoten 708 (WN[3]) zugeordnet sind, der erste Scheduler 722 und der vierte Scheduler 728 Credits zu dem Credit-Manager 712 für jede Kachel von Daten, die zu dem ersten Puffer 730 und dem dritten Puffer 734 von dem ersten CBB 714 bzw. dem vierten CBB 720 gesendet werden. Der Credit-Manager 712 sendet die Credits, die von dem ersten Scheduler 722 empfangen werden, zu dem zweiten Scheduler 724, und die Credits, die von dem vierten Scheduler 728 empfangen werden, zu dem zweiten Scheduler 724. Da der vierte CBB 720 den vierten Arbeitslastknoten 708 (WN[3]) ausführt, erzeugt der vierte CBB 720 zwei Kacheln von Daten zum Speichern in dem dritten Puffer 734. Ähnlich erzeugt, da der erste CBB 714 den ersten Arbeitslastknoten 702 (WN[0]) ausführt, der erste CBB 714 fünf Kacheln von Daten zum Speichern in dem ersten Puffer 730.
  • In dem Beispiel von 7 führt der vierte CBB 720 den vierten Arbeitslastknoten 708 (WN[3]) schneller aus als der erste CBB 714 den ersten Arbeitslastknoten 702 (WN[0]) ausführt. Obwohl Speicher in dem zweiten Puffer 732 verfügbar ist, weil die Daten, von denen der fünfte Arbeitslastknoten 710 (WN[4]) abhängt, bereit sind, bevor die Daten, von denen der zweite Arbeitslastknoten 704 (WN[1]) abhängt, bereit sind, wählt der zweite Scheduler 724 den fünften Arbeitslastknoten 710 (WN[4]) zum Ausführen auf dem zweiten CBB 716 im Gegensatz zu dem zweiten Arbeitslastknoten 704 (WN[1]) aus.
  • In dem dargestellten Beispiel von 7 sendet, da der fünfte Arbeitslastknoten 710 (WN[4]) auf dem zweiten CBB 716 abläuft und der zweite CBB 716 Kacheln von Daten, die in dem dritten Puffer 734 gespeichert sind, verbraucht, der zweite Scheduler 724 die Credits, die dem dritten Puffer 734 zugeordnet sind, zurück zu dem Credit-Manager 712 für jede Kachel von Daten, die durch den zweiten CBB 716 aus dem dritten Puffer 734 verbraucht wird. Danach verteilt, da die Schwellenwertmenge von Credits für den ersten Puffer 730 und den zweiten Puffer 732 erfüllt sind, der zweite Scheduler 724 den zweiten Arbeitslastknoten 704 (WN[1]) zur Ausführung auf dem zweiten CBB 716. Da der zweite CBB 716 Kacheln von Daten erzeugt, die dem zweiten Arbeitslastknoten 704 (WN[1]) zugeordnet sind, und die Daten zu dem zweiten Puffer 732 ausgibt, sendet der zweite Scheduler 724 die Credits, die dem zweiten Puffer 732 zugeordnet sind, zu dem Credit-Manager 712 für jede Kachel von Daten, die von dem zweiten CBB 716 zu dem zweiten Puffer 732 gesendet wird.
  • In dem Beispiel von 7 sendet der Credit-Manager 712, da er die Credits, die dem zweiten Puffer 732 zugeordnet sind, von dem zweiten Scheduler 724 empfangen hat, die Credits, die dem zweiten Puffer 732 zugeordnet sind, zu dem dritten Scheduler 726. Wenn der dritte Scheduler 726 eine Schwellenwertmenge von Credits, die dem zweiten Puffer 732 zugeordnet sind, empfängt, verteilt der dritte Scheduler 726 den dritten Arbeitslastknoten 706 (WN[2]) zur Ausführung auf dem dritten CBB 718. Da der dritte CBB 718 den dritten Arbeitslastknoten 706 (WN[2]) ausführt und der dritte CBB 718 Kacheln von Daten, die in dem zweiten Puffer 732 gespeichert sind, verbraucht, sendet der dritte Scheduler 726 Credits, die dem zweiten Puffer 732 zugeordnet sind, zurück zu dem Credit-Manager 712 für jede Kachel von Daten aus dem zweiten Puffer 732, die durch den dritten CBB 718 verbraucht wird.
  • In zusätzlichen oder alternativen Beispielen kann der erste CBB 714 der Faltungs-Engine 412 von 4 entsprechen, und der erste Scheduler 722 kann dem ersten Scheduler 424 von 4 entsprechen. In einigen Beispielen kann der zweite CBB 716 der RNN-Engine 416 von 4 entsprechen, und der zweite Scheduler 724 kann dem dritten Scheduler 428 von 4 entsprechen. In weiteren Beispielen kann der dritte CBB 718 der DMA-Einheit 414 von 4 entsprechen, und der dritte Scheduler 716 kann dem zweiten Scheduler 426 von 4 entsprechen. In einigen Beispielen kann der vierte CBB 720 dem DSP 418 von 4 entsprechen, und der vierte Scheduler 728 kann dem vierten Scheduler 430 von 4 entsprechen.
  • Obwohl in 5 und/oder 6 eine beispielhafte Weise zum Implementieren des ersten Schedulers 326, des zweiten Schedulers 328, des dritten Schedulers 330, des vierten Schedulers 332 und/oder des fünften Schedulers 334 von 3 und/oder des ersten Schedulers 424, des zweiten Schedulers 426, des dritten Schedulers 428 und/oder des vierten Schedulers 430 von 4 und/oder des ersten Schedulers 722, des zweiten Schedulers 724, des dritten Schedulers 726 und/oder des vierten Schedulers 728 von 7 dargestellt ist, können ein oder mehrere der Elemente, Prozesse und/oder Vorrichtungen, die in 5 und/oder 6 dargestellt sind, kombiniert, aufgeteilt, umgeordnet, weggelassen, eliminiert und/oder auf irgendeine andere Weise implementiert sein. Ferner können die beispielhafte Arbeitslastschnittstelle 502, die beispielhafte Puffer-Credit-Speichereinrichtung 504, die beispielhafte Credit-Vergleichseinheit 506, der beispielhafte Arbeitslastknoten-Dispatcher 508, der beispielhafte Kommunikationsbus 510 und allgemeiner der beispielhafte Scheduler 500 von 5 und/oder der beispielhafte Scheduler 600 von 6 durch Hardware, Software, Firmware und/oder irgendeine Kombination aus Hardware, Software und/oder Firmware implementiert sein. Somit könnte beispielsweise irgendeines aus der beispielhaften Arbeitslastschnittstelle 502, der beispielhaften Puffer-Credit-Speichereinrichtung 504, der beispielhaften Credit-Vergleichseinheit 506, dem beispielhaften Arbeitslastknoten-Dispatcher 508, dem beispielhaften Kommunikationsbus 510 und/oder allgemeiner dem beispielhaften Scheduler 500 von 5 und/oder dem beispielhaften Scheduler 600 von 6 durch eine oder mehrere analoge oder digitale Schaltung(en), Logikschaltungen, programmierbare Prozessor(en), programmierbare Steuereinheit(en), Grafikverarbeitungseinheit(en) (GPU(s)), digitale Signalprozessor(en) (DSP(s)), anwendungsspezifische integriert Schaltung(en) (ASIC(s)), programmierbare Logikvorrichtung(en) (PLD(s)) und/oder im Feld programmierbare Logikvorrichtung(en) (FPLD(s)) implementiert sein. Wenn irgendeiner aus den Einrichtungs- oder Systemansprüchen dieses Patents gelesen wird, um eine reine Software- und/oder Firmware-Implementierung abzudecken, ist wenigstens eines aus der beispielhaften Arbeitslastschnittstelle 502, der beispielhaften Puffer-Credit-Speichereinrichtung 504, der beispielhaften Credit-Vergleichseinheit 506, dem beispielhaften Arbeitslastknoten-Dispatcher 508, dem beispielhaften Kommunikationsbus 510 und/oder allgemeiner dem beispielhaften Scheduler 500 von 5 und/oder dem beispielhaften Scheduler 600 von 6 hierdurch ausdrücklich so definiert, dass sie eine nicht-transitorische computerlesbare Speichervorrichtung oder Speicherplatte wie z. B. einen Speicher, eine „Digital Versatile Disk“ (DVD), eine Compact-Disc (CD) eine Blu-Ray-Disk usw. enthält, die die Software und/oder die Firmware enthält. Des Weiteren kann der beispielhafte Scheduler 500 von 5 und/oder der beispielhafte Scheduler 600 von 6 ein oder mehrere Elemente, Prozesse und/oder Vorrichtungen zusätzlich zu den oder anstelle der in 5 und/oder 6 dargestellten enthalten und/oder kann mehr als eines irgendeines der oder aller dargestellten Elemente, Prozesse und Vorrichtungen enthalten. Wie sie hier verwendet ist, beinhaltet der Ausdruck „in Kommunikation“, einschließlich seiner Variationen, direkte Kommunikation und/oder indirekte Kommunikation über eine oder mehrere dazwischenliegende Komponenten und erfordert keine direkte physikalische (z. B. drahtgebundene) Kommunikation und/oder konstante Kommunikation, sondern enthält vielmehr zusätzlich selektive Kommunikation in periodischen Zeitabständen, geplanten Zeitabständen, aperiodischen Zeitabständen und/oder einmalige Ereignisse.
  • Ein Ablaufplan, der für beispielhafte Hardware-Logik, maschinenlesbare Anweisungen, Hardware implementierte Zustandsautomaten und/oder irgendeine Kombination daraus zum Implementieren des Schedulers 500 von 5 und/oder des Schedulers 600 von 6 repräsentativ ist, ist in 8 gezeigt. Die maschinenlesbaren Anweisungen können ein oder mehrere ausführbare Programme oder Abschnitt(e) eines ausführbaren Programms zur Ausführung durch einen Computer-Prozessor sein, wie z. B. den Prozessor 910 und/oder den Beschleuniger 912, die in der beispielhaften Prozessorplattform 900 gezeigt sind, die nachstehend in Verbindung mit 9 diskutiert ist. Das Programm kann in Software verwirklicht sein, die auf einem nicht-transitorischen computerlesbaren Speichermedium wie z. B. einer CD-ROM, einer Floppy-Disk, einem Festplattenlaufwerk, einer DVD, einer Blu-Ray-Disk oder einem Speicher, der dem Prozessor 910 und/oder dem Beschleuniger 912 zugeordnet ist, gespeichert ist, alternativ könnte jedoch das gesamte Programm und/oder Teile davon durch eine Vorrichtung ausgeführt werden, die nicht der Prozessor 910 und/oder der Beschleuniger 912 ist, und/oder in Firmware oder dedizierter Hardware verwirklicht sein. Ferner können, obwohl das beispielhafte Programm mit Bezug auf den in 8 dargestellten Ablaufplan beschrieben ist, viele andere Verfahren zum Implementieren des beispielhaften Schedulers 500 von 5 und/oder des Schedulers 600 von 6 alternativ verwendet werden. Beispielsweise kann die Reihenfolge der Ausführung der Blöcke verändert sein, und/oder einige der beschriebenen Blöcke können verändert, eliminiert oder kombiniert sein. Zusätzlich oder alternativ können irgendwelche der oder alle Blöcke durch eine oder mehrere Hardware-Schaltungen (z. B. diskrete und/oder integrierte analoge und/oder digitale Schaltungsanordnung, eine FPGA, eine ASIC, einen Komparator, einen Operationsverstärker (Op-Amp), eine Logikschaltung usw.) implementiert sein, die strukturiert sind, die entsprechende Operation ohne Ausführung von Software oder Firmware auszuführen.
  • Die hier beschriebenen maschinenlesbaren Anweisungen können in einem oder mehreren aus einem komprimierten Format, einem verschlüsselten Format, einem fragmentierten Format, einem kompilierten Format, einem ausführbaren Format, einem gepackten Format usw. gespeichert sein. Maschinenlesbare Anweisungen, wie sie hier beschrieben sind, können als Daten (z. B. Abschnitte von Anweisungen, Code, Repräsentationen von Code usw.) gespeichert sein, die benutzt werden können, um maschinenlesbare Anweisungen zu erzeugen, herzustellen und/oder zu produzieren. Beispielsweise können die maschinenlesbaren Anweisungen fragmentiert und auf einer oder mehreren Speichervorrichtungen und/oder Berechnungsvorrichtungen (z. B. Servern) gespeichert sein. Die maschinenlesbaren Anweisungen können eines oder mehrere aus Installation, Modifikation, Anpassung, Aktualisieren, Kombinieren, Ergänzen, Konfigurieren, Entschlüsseln, Dekomprimieren, Entpacken, Verteilen, Neuzuweisen, Kompilieren usw. erfordern, um sie direkt lesbar, interpretierbar und/oder durch eine Berechnungsvorrichtung und/oder andere Maschine ausführbar zu machen. Beispielsweise können die maschinenlesbaren Anweisungen in mehreren Teilen gespeichert sein, die einzeln komprimiert, verschlüsselt und auf separaten Berechnungsvorrichtungen gespeichert sind, wobei die Teile, wenn sie entschlüsselt, dekomprimiert und kombiniert sind, eine Gruppe ausführbarer Anweisungen bilden, die ein Programm wie z. B. das hier beschriebene implementieren.
  • In einem weiteren Beispiel können die maschinenlesbaren Anweisungen in einem Zustand gespeichert sein, in dem sie durch einen Computer gelesen werden können, jedoch das Hinzufügen einer Bibliothek (z. B. einer dynamischen Link-Bibliothek (DLL)), eines Software-Entwicklungs-Kit (SKD), einer Anwendungsprogrammierschnittstelle (API) usw. erfordern, um die Anweisungen auf einer speziellen Berechnungsvorrichtung oder anderen Vorrichtung auszuführen. In einem weiteren Beispiel kann es notwendig sein, die maschinenlesbaren Anweisungen zu konfigurieren (z. B. Einstellungen zu speichern, Daten einzugeben, Netzadressen aufzuzeichnen usw.), bevor die maschinenlesbaren Anweisungen und/oder die entsprechenden Programm(e) insgesamt oder teilweise ausgeführt werden können. Somit sind die offenbarten maschinenlesbaren Anweisungen und/oder entsprechenden Programm(e) dafür vorgesehen, solche maschinenlesbaren Anweisungen und/oder Programm(e) einzuschließen, ungeachtet des speziellen Formats oder Zustands der maschinenlesbaren Anweisungen und/oder Programm(e), wenn sie gespeichert oder anderweitig in Ruhe oder in der Übertragung sind.
  • Die hier beschriebenen maschinenlesbaren Anweisungen können durch irgendeine vergangene, gegenwärtige oder zukünftige Anweisungssprache, Skriptsprache, Programmiersprache usw. repräsentiert sein. Beispielsweise können die maschinenlesbaren Anweisungen unter Verwendung irgendeiner der folgenden Sprachen repräsentiert sein: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift usw.
  • Wie vorstehend erwähnt können die beispielhaften Prozesse von 8 unter Verwendung ausführbarer Anweisungen (z. B. computer- und/oder maschinenlesbarer Anweisungen), die auf einem nicht-transitorischen computer- oder maschinenlesbaren Medium gespeichert sind, wie z. B. einem Festplattenlaufwerk, einem Flash-Speicher, einem Festwertspeicher, einer Compact-Disk, einer „Digital Versatile Disk“, einem Cache, einem Direktzugriffsspeicher und/oder irgendeiner anderen Speichervorrichtung oder Speicherplatte, in der Informationen für irgendeine Dauer (z. B. für längere Zeiträume, permanent, für kurze Zeiträume, zum temporären Puffern und/oder zum Zwischenspeichern der Informationen) gespeichert sind. Wie er hier verwendet ist, ist der Begriff nicht-transitorisches computerlesbares Medium ausdrücklich so definiert, dass es irgendeinen Typ einer computerlesbaren Speichervorrichtung und/oder Speicherplatte enthält und sich ausbreitende Signale ausschließt und Übertragungsmedien ausschließt.
  • „Enthalten“ und „umfassen“ (und alle Formen und Zeiten davon) sind hier als offene Begriffe verwendet. Somit ist, wann immer ein Anspruch irgendeine Form von „enthalten“ oder „umfassen“ (z. B. umfasst, enthält, umfassend, enthaltend, aufweisend usw.) als eine Präambel oder innerhalb eines Anspruchsvortrags irgendeiner Art einsetzt, zu verstehen, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne aus dem Schutzbereich des entsprechenden Anspruchs oder Vortrags herauszufallen. Wie er hier verwendet ist, ist, wenn der Ausdruck „wenigstens“ als der Überleitungsbegriff in beispielsweise der Präambel eines Anspruchs verwendet ist, er auf die gleiche Weise offen wie der Begriff „umfassen“ und „enthalten“ offen sind. Der Begriff „und/oder“, wenn er beispielsweise in einer Form wie z. B. A, B und/oder C verwendet ist, bezieht sich auf irgendeine Kombination oder Teilmenge von A, B, C, wie z. B. (1) allein A, (2) allein B, (3) allein C, (4) A mit B, (5) A mit C, (6) B mit C und (7) A mit B und mit C. Wie hier im Kontext der Beschreibung von Strukturen, Komponenten, Elementen, Objekten und/oder Dingen verwendet ist der Ausdruck „wenigstens eines aus A und B“ dafür vorgesehen, dass er sich auf Implementierungen bezieht, die irgendeines aus (1) wenigstens einem A, (2) wenigstens einem B und (3) wenigstens einem A und wenigstens einem B enthalten. Ähnlich ist, wie hier im Kontext der Beschreibung von Strukturen, Komponenten, Elementen, Objekten und/oder Dingen verwendet, der Ausdruck „wenigstens eines aus A oder B“ dafür vorgesehen, dass er sich auf Implementierungen bezieht, die irgendeines aus (1) wenigstens einem A, (2) wenigstens einem B und (3) wenigstens einem A und wenigstens einem B enthalten. Wie hier im Kontext der Beschreibung der Leistung oder Ausführung von Prozessen, Anweisungen, Aktionen, Aktivitäten und/oder Schritten verwendet ist der Ausdruck „wenigstens eines aus A und B“ dafür vorgesehen, dass er sich auf Implementierungen bezieht, die irgendeines aus (1) wenigstens einem A, (2) wenigstens einem B und (3) wenigstens einem A und wenigstens einem B enthalten. Ähnlich ist, wie hier im Kontext der Beschreibung der Leistung oder Ausführung von Prozessen, Anweisungen, Aktionen, Aktivitäten und/oder Schritten verwendet, der Ausdruck „wenigstens eines aus A oder B“ dafür vorgesehen, dass er sich auf Implementierungen bezieht, die irgendeines aus (1) wenigstens einem A, (2) wenigstens einem B und (3) wenigstens einem A und wenigstens einem B enthalten.
  • Wie hier verwendet schließen Bezugnahmen im Singular (z. B. „ein“, „erstes“, „zweites“ usw.) mehrere nicht aus. Der Begriff „eine“ Entität, wie er hier verwendet ist, bezieht sich auf eine oder mehrere dieser Entität. Die Begriffe „ein“, „ein oder mehrere“ und „wenigstens eines“ können hier austauschbar verwendet sein. Darüber hinaus können, obwohl sie individuell aufgelistet sind, mehrere Mittel, Elemente oder Verfahrensaktionen z. B. durch eine/n einzige/n Einheit oder Prozessor implementiert sein. Zusätzlich können, obwohl individuelle Merkmale in unterschiedlichen Beispielen oder Ansprüchen enthalten sein können, dies möglicherweise kombiniert sein, und das Aufnehmen in unterschiedliche Beispiele oder Ansprüche impliziert nicht, dass eine Kombination aus Merkmalen nicht machbar und/oder vorteilhaft ist.
  • 8 ist ein Ablaufplan, der für einen Prozess 800 repräsentativ ist, der durch maschinenlesbare Anweisungen implementiert sein kann, die ausgeführt werden können, um den Scheduler 500 von 5 und/oder den Scheduler 600 von 6 zu implementieren. Der Prozess 800 beginnt bei Block 802, wo die Arbeitslastschnittstelle 502 Credits, die den Eingangspuffern zu und/oder den Ausgangspuffern von Arbeitslastknoten entsprechen, die dem CBB zugewiesen sind, dem der Scheduler 500 und/oder der Scheduler 600 zugeordnet ist, in die Puffer-Credit-Speichereinrichtung 504 lädt.
  • In dem in 8 dargestellten Beispiel fährt der Prozess 800 mit Block 804 fort, wo die Credit-Vergleichseinheit 506 einen Arbeitslastknoten auswählt, der dem CBB zugewiesen ist, dem der Scheduler 500 und/oder der Scheduler 600 zugeordnet ist. Bei Block 806 bestimmt die Credit-Vergleichseinheit 506, ob der Scheduler 500 und/oder der Scheduler 600 eine Schwellenwertmenge von Credits empfangen hat, um auf den Daten, die in dem Eingangspuffer für den ausgewählten Arbeitslastknoten gespeichert sind, zu arbeiten. Beispielsweise vergleicht die Credit-Vergleichseinheit 506 ein Feld in dem Array oder der anderen Datenstruktur, das/die einer Anzahl von Credits, die von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) empfangen werden, zugeordnet ist, mit einem Feld in dem Array oder der anderen Datenstruktur, das/die einer Schwellenwertanzahl von Credits für den Eingangspuffer des ausgewählten Arbeitslastknoten zugeordnet ist. Falls die Credit-Vergleichseinheit 506 bestimmt, dass der Scheduler 500 und/oder der Scheduler 600 keine Schwellenwertmenge von Credits empfangen hat, um auf den Daten, die in dem Eingangspuffer für den ausgewählten Arbeitslastknoten gespeichert sind, zu arbeiten (Block 806: NEIN), fährt der Prozess 800 zu Block 812 fort.
  • In dem Beispiel von 8 fährt der Prozess, falls die Credit-Vergleichseinheit 506 bestimmt, dass der Scheduler 500 und/oder der Scheduler 600 die Schwellenwertmenge von Credits empfangen hat, um auf den Daten, die in dem Eingangspuffer gespeichert sind, zu arbeiten (Block 806: JA), zu Block 808 fort. Bei Block 808 bestimmt die Credit-Vergleichseinheit 506, ob der Scheduler 500 und/oder der Scheduler 600 eine Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer für den ausgewählten Arbeitslastknoten zu schreiben. Beispielsweise vergleicht die Credit-Vergleichseinheit 506 ein Feld in einem Array oder einer anderen Datenstruktur, das/die einer Anzahl von Credits, die von einer externen Vorrichtung (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.) für den Ausgangspuffer für den ausgewählten Arbeitslastknoten empfangen werden, zugeordnet ist, mit einem Feld in dem Array oder der anderen Datenstruktur, das/die einer Schwellenwertanzahl von Credits für den Ausgangspuffer zugeordnet ist. Falls die Credit-Vergleichseinheit 506 bestimmt, dass der Scheduler 500 und/oder der Scheduler 600 die Schwellenwertmenge von Credits nicht empfangen hat (Block 808: NEIN), führt der Prozess 800 zu Block 812 fort. Falls die Credit-Vergleichseinheit 506 bestimmt, dass der Scheduler 500 und/oder der Scheduler 600 die Schwellenwertmenge von Credits empfangen hat, um Daten in den Ausgangspuffer zu schreiben (Block 808: JA), zeigt der Credit-Komparator 506 bei Block 810 an, dass der ausgewählte Arbeitslastknoten zum Ausführen bereit ist.
  • In dem Beispiel von 8 die Credit-Vergleichseinheit 506 bestimmt bei Block 812, ob ein zusätzlicher Arbeitslastknoten vorhanden ist, der zu verarbeiten ist. Falls die Credit-Vergleichseinheit 506 bestimmt, dass ein zusätzlicher Arbeitslastknoten vorhanden ist, der zu verarbeiten ist (Block 812: JA), wählt die Credit-Vergleichseinheit 506 einen zusätzlichen Arbeitslastknoten aus, und der Prozess 800 fährt zu Block 806 fort. Falls die Credit-Vergleichseinheit 506 bestimmt, dass kein zusätzlicher Arbeitslastknoten vorhanden ist, der zu verarbeiten ist (Block 812: NEIN), fährt der Prozess 800 zu Block 814 fort.
  • In dem dargestellten Beispiel von 8 plant bei Block 814 der Arbeitslastknoten-Dispatcher 508 die Arbeitslastknoten, die zum Ausführen bereit sind. Bei Block 816 verteilt der Arbeitslastknoten-Dispatcher 508 einen Arbeitslastknoten gemäß der Planung. Bei Block 818 sendet, wenn der verteilte Arbeitslastknoten durch den CBB, dem der Scheduler 500 und/oder dem Scheduler 600 zugeordnet ist, ausgeführt wird, die Arbeitslastschnittstelle 502 die Credits, die dem Eingangspuffer zugeordnet ist, zu der externen Vorrichtung, von der die Arbeitslastschnittstelle 502 die Credits empfangen hat (z. B. dem Credit-Manager 408, der Steuereinheit 322 usw.).
  • In dem in 8 dargestellten Beispiel bestimmt der Arbeitslastknoten-Dispatcher 508 bei Block 820, ob zusätzliche Arbeitslastknoten in der Planung sind, die auszuführen sind. Falls der Arbeitslastknoten-Dispatcher 508 bestimmt, dass zusätzliche Arbeitslastknoten in der Planung sind (Block 820: JA), fährt der Prozess 800 zu Block 816 fort. Falls der Arbeitslastknoten-Dispatcher 508 bestimmt, dass keine zusätzlichen Arbeitslastknoten in der Planung sind (Block 820: NEIN), fährt der Prozess 800 zu Block 822 fort.
  • In dem Beispiel von 8 bestimmt bei Block 822 die Arbeitslastschnittstelle 502, ob der Betrieb fortgesetzt werden soll. Beispielsweise enthält eine Bedingung, die die Arbeitslastschnittstelle 502 veranlassen würde zu bestimmen, den Betrieb fortzusetzen, das Empfangen zusätzlicher Arbeitslastknoten. Falls die Arbeitslastschnittstelle 502 bestimmt, den Betrieb fortzusetzen (Block 822: JA), fährt der Prozess 800 zu Block 802 fort. Falls die Arbeitslastschnittstelle 502 bestimmt, den Betrieb nicht fortzusetzen (Block 822: NEIN), endet der Prozess 800.
  • 9 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 900, die strukturiert ist, die Anweisungen von 8 auszuführen, um eine oder mehrere Instanziierungen des Schedulers 500 von 5 und/oder des Schedulers 600 von 6 zu implementieren. Die Prozessorplattform 900 kann beispielsweise ein Server, ein Personalcomputer, ein Arbeitsplatzrechner, eine selbstlernende Maschine (z. B. ein neuronales Netz), eine mobile Vorrichtung (z. B. ein Mobiltelefon, ein Smartphone, ein Tablet wie z. B. ein iPad™), ein persönlicher digitaler Assistent (PDA), eine Internet-Einrichtung, ein DVD-Player, ein CD-Player, ein digitaler Videorecorder, ein Blu-Ray-Player, eine Spielekonsole, ein persönlicher Videorecorder, eine Set-Top-Box, ein Kopfhörer oder eine andere am Körper tragbare Vorrichtung oder irgendein anderer Typ einer Berechnungsvorrichtung sein.
  • Die Prozessorplattform 900 des dargestellten Beispiels enthält einen Prozessor 910 und einen Beschleuniger 912. Der Prozessor 910 des dargestellten Beispiels ist Hardware. Beispielsweise kann der Prozessor 910 durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, Mikroprozessoren, GPUs, DSPs oder Steuereinheiten von irgendeiner/irgendeinem gewünschten Familie oder Hersteller implementiert sein. Der Hardware-Prozessor kann eine halbleiterbasierte (z. B. Silizium-basierte) Vorrichtung sein. Zusätzlich kann der Beschleuniger 912 beispielsweise durch eine oder mehrere Logikschaltungsanordnung, Mikroprozessoren, GPUs, DSPs, FPGAs, VPUs, Steuereinheiten und/oder andere CBBs von irgendeiner/irgendeinem gewünschten Familie oder Hersteller implementiert sein. Der Beschleuniger 912 des dargestellten Beispiels ist Hardware. Der Hardware-Beschleuniger kann eine halbleiterbasierte (z. B. Silizium-basierte) Vorrichtung sein. In diesem Beispiel implementiert der Beschleuniger 912 die beispielhafte Faltungs-Engine 312, die beispielhafte RNN-Engine 314, den beispielhaften Speicher 316, die beispielhafte MMU 318, den beispielhaften DSP 320, die beispielhafte Steuereinheit 322 und die beispielhafte DMA-Einheit 324. Außerdem enthält jede der beispielhaften Faltungs-Engine 312, der beispielhaften RNN-Engine 314, der beispielhaften DMA-Einheit 324, des beispielhaften DSP 320 und der beispielhaften Steuereinheit 322, den beispielhaften ersten Scheduler 326, den beispielhaften zweiten Scheduler 328, den beispielhaften dritten Scheduler 330, den beispielhaften vierten Scheduler 332 bzw. den beispielhaften fünften Scheduler 334. In dem Beispiel von 9 enthält jeder aus dem beispielhaften ersten Scheduler 326, dem beispielhaften zweiten Scheduler 328, dem beispielhaften dritten Scheduler 330, dem beispielhaften vierten Scheduler 332 und dem beispielhaften fünften Scheduler 334 die beispielhafte Arbeitslastschnittstelle 502, die beispielhafte Puffer-Credit-Speichereinrichtung 504, die beispielhafte Credit-Vergleichseinheit 506, den beispielhaften Arbeitslastknoten-Dispatcher 508 und/oder allgemeiner den Scheduler 500.
  • In zusätzlichen oder alternativen Beispielen implementiert der Prozessor 910 die beispielhafte Faltungs-Engine 312, die beispielhafte RNN-Engine 314, den beispielhaften Speicher 316, die beispielhafte MMU 318, den beispielhaften DSP 320, die beispielhafte Steuereinheit 322 und die beispielhafte DMA-Einheit 324. Außerdem enthält in solchen zusätzlichen oder alternativen Beispielen jede der beispielhaften Faltungs-Engine 312, der beispielhaften RNN-Engine 314, der beispielhaften DMA-Einheit 324, des beispielhaften DSP 320 und der beispielhaften Steuereinheit 322, den beispielhaften ersten Scheduler 326, den beispielhaften zweiten Scheduler 328, den beispielhaften dritten Scheduler 330, den beispielhaften vierten Scheduler 332 bzw. den beispielhaften fünften Scheduler 334. In solchen zusätzlichen oder alternativen Beispielen enthält jeder aus dem beispielhaften ersten Scheduler 326, dem beispielhaften zweiten Scheduler 328, dem beispielhaften dritten Scheduler 330, dem beispielhaften vierten Scheduler 332 und dem beispielhaften fünften Scheduler 334 die beispielhafte Arbeitslastschnittstelle 502, die beispielhafte Puffer-Credit-Speichereinrichtung 504, die beispielhafte Credit-Vergleichseinheit 506, den beispielhaften Arbeitslastknoten-Dispatcher 508 und/oder allgemeiner den Scheduler 500.
  • Der Prozessor 910 des dargestellten Beispiels enthält einen lokalen Speicher 911 (z. B. einen Cache). Der Prozessor 910 des dargestellten Beispiels ist über einen Bus 918 in Kommunikation mit einem Hauptspeicher, der einen flüchtigen Speicher 914 und einen nichtflüchtigen Speicher 916 enthält. Außerdem enthält der Beschleuniger 912 des dargestellten Beispiels einen lokalen Speicher 913 (z. B. einen Cache). Der Beschleuniger 912 des dargestellten Beispiels ist über den Bus mit einem Hauptspeicher, der den flüchtigen Speicher 914 und den nichtflüchtigen Speicher 916 enthält, in Kommunikation. Der flüchtige Speicher 914 kann durch synchronen dynamischen Direktzugriffsspeicher (SDRAM), dynamischen Direktzugriffsspeicher (DRAM), dynamischen RAMBUS®-Direktzugriffsspeicher (RDRAM®) und/oder irgendeinen anderen Typ einer Direktzugriffsspeichervorrichtung implementiert sein. Der nichtflüchtige Speicher 916 kann durch Flash-Speicher und/oder irgendeinen anderen gewünschten Typ einer Speichervorrichtung implementiert sein. Der Zugriff auf den Hauptspeicher 914, 916 wird durch eine Speichersteuereinheit gesteuert.
  • Die Prozessorplattform 900 des dargestellten Beispiels enthält außerdem eine Schnittstellenschaltung 902. Die Schnittstellenschaltung 920 kann durch irgendeinen Typ eines Schnittstellenstandards implementiert sein, wie z. B. eine Ethernet-Schnittstelle, einen universellen seriellen Bus (USB), eine Bluetooth®-Schnittstelle, eine Nahfeldkommunikations- (NFC-) Schnittstelle und/oder eine PCI-Express-Schnittstelle.
  • In dem dargestellten Beispiel sind eine oder mehrere Eingabevorrichtungen 922 mit der Schnittstellenschaltung 920 verbunden. Die Eingabevorrichtung(en) 922 ermöglichen einem Anwender, Daten und/oder Befehle in den Prozessor 910 und/oder den Beschleuniger 912 einzugeben. Die Eingabevorrichtung(en) können beispielsweise durch einen Audiosensor, ein Mikrofon, eine Kamera (Standbild oder Video), eine Tastatur, eine Taste, eine Maus, einen berührungssensitiven Bildschirm, ein Track-Pad, einen Trackball, Isopoint und/oder ein Spracherkennungssystem implementiert sein.
  • Eine oder mehrere Ausgabevorrichtungen 924 sind ebenfalls mit der Schnittstellenschaltung 920 des dargestellten Beispiels verbunden. Die Ausgabevorrichtungen 924 können beispielsweise durch Anzeigevorrichtungen (z. B. eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeigevorrichtung (LCD), eine Kathodenstrahlröhrenanzeigevorrichtung (CRT), eine „In-Place-Switching“- (IPS-) Anzeigevorrichtung, einen berührungssensitiven Bildschirm usw.), eine tastbare Ausgabevorrichtung, einen Drucker und/oder Lautsprecher implementiert sein. Die Schnittstellenschaltung 920 des dargestellten Beispiels enthält somit typischerweise eine Grafiktreiberkarte, einen Grafiktreiber-Chip und/oder einen Grafiktreiberprozessor.
  • Die Schnittstellenschaltung 920 des dargestellten Beispiels enthält außerdem eine Kommunikationsvorrichtung wie z. B. einen Sender, einen Empfänger, einen Sender/Empfänger, ein Modem, ein residentes Gateway, einen drahtlosen Zugangspunkt und/oder eine Netzschnittstelle, um den Austausch von Daten mit externen Maschinen (z. B. Berechnungsvorrichtungen irgendeiner Art) über ein Netz 926 zu unterstützen. Die Kommunikation kann beispielsweise über eine Ethernet-Verbindung, eine Verbindung über eine digitale Teilnehmerleitung (DSL), eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Sichtliniensystem, ein Mobiltelefonsystem usw. stattfinden.
  • Die Prozessorplattform 900 des dargestellten Beispiels enthält außerdem ein oder mehrere Massenspeichervorrichtung 928 zum Speichern von Software und/oder Daten. Beispiele für solche Massenspeichervorrichtungen 928 enthalten Floppy-Disk-Laufwerke, Festplattenlaufwerke, Compact-Disk-Laufwerke, Blu-Ray-Disk-Laufwerke, Systeme mit redundanter Anordnung unabhängiger Platten (RAID) und Laufwerke für „Digitale Versatile Disk“ (DVD).
  • Die durch eine Maschine ausführbaren Anweisungen 932 von 8 können in der Massenspeichervorrichtung 928, in dem flüchtigen Speicher 914, in dem nichtflüchtigen Speicher 916 und/oder auf einem herausnehmbaren nicht-transitorischen computerlesbaren Speichermedium wie z. B. einer CD oder DVD gespeichert sein.
  • Aus dem Vorstehenden ist zu erkennen, dass beispielhafte Verfahren, Einrichtungen und Herstellungsgegenstände offenbart worden sind, die „Out-of-Order“-Pipeline-Ausführung statischer Abbildung einer Arbeitslast ermöglichen. Außerdem sind die beispielhaften Verfahren, Einrichtungen und Herstellungsgegenstände offenbart worden, die ermöglichen, dass ein Berechnungsbaustein Arbeitslastknoten ausführt, wenn die Daten, von denen ein Arbeitslastknoten abhängig ist, verfügbar sind und ausreichend Speicher verfügbar ist, um die Ausgabe, die durch Ausführen des Arbeitslastknotens erzeugt wird, zu speichern. Zusätzlich ermöglichen die hier offenbarten Beispiele, dass Arbeitslastknoten durch die Berechnungsbausteine ausgeführt werden, denen die Arbeitslastknoten zugewiesen sind, unabhängig von einer Planung und/oder einer anderen Reihenfolge. Die offenbarten Verfahren, Einrichtungen und Herstellungsgegenstände verbessern die Effizienz der Verwendung einer Berechnungsvorrichtung durch Erhöhen der Nutzung einer Verarbeitungsvorrichtung. Außerdem reduzierten die beispielhaften Verfahren, Einrichtungen und Herstellungsgegenstände wie sie hier offenbart sind die Anzahl von Berechnungszyklen, die durch eine Verarbeitungsvorrichtung benutzt werden, um eine Arbeitslast zu verarbeiten und/oder anderweitig auszuführen. Die offenbarten Verfahren, Einrichtungen und Herstellungsgegenstände richten sich dementsprechend auf eine oder mehrere Verbesserung(en) der Funktionsweise eines Computers.
  • Beispielhafte Verfahren, Einrichtungen, Systeme und Herstellungsgegenstände, um „Out-of-Order“-Pipeline-Ausführung statischer Abbildung einer Arbeitslast zu ermöglichen, sind hier offenbart. Weitere Beispiele und Kombinationen daraus enthalten das Folgende: Beispiel 1 enthält eine Einrichtung, die Folgendes umfasst: eine Schnittstelle zum Laden einer ersten Anzahl von Credits in den Speicher, eine Vergleichseinheit zum Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist, und einem Dispatcher zum, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, Auswählen eines Arbeitslastknotens der Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist.
  • Beispiel 2 enthält die Einrichtung von Beispiel 1, wobei die Schnittstelle zum Laden der ersten Anzahl von Credits in den Speicher, wenn die Schnittstelle die erste Anzahl von Credits von einem Credit-Manager empfängt, und wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem ersten aus dem einen oder mehreren Berechnungsbausteinen zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede zu dem Puffer gesendete Kachel dient.
  • Beispiel 3 enthält die Einrichtung von Beispiel 1, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  • Beispiel 4 enthält die Einrichtung von Beispiel 1, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Beispiel 5 enthält die Einrichtung von Beispiel 1, wobei der Puffer ein erster Puffer ist, die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, die Vergleichseinheit zum Vergleichen einer zweiten Anzahl von Credits mit einer zweiten Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem zweiten Puffer zugeordnet ist, dient, der Dispatcher zum, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) die zweite Anzahl von Credits die zweite Schwellenwertanzahl von Credits erfüllt, Auswählen des Arbeitslastknotens, der in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, dient.
  • Beispiel 6 enthält die Einrichtung von Beispiel 5, wobei der zweite Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die zweite Anzahl von Credits dem Eingangspuffer entspricht und die zweite Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Beispiel 7 enthält die Einrichtung von Beispiel 1, wobei die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, der Arbeitslastknoten ein erster Arbeitslastknoten ist, und wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) eine zweite Anzahl von Credits eine zweite Schwellenwertanzahl von Credits erfüllt, der Dispatcher zum Planen des ersten Arbeitslastknotens und eines zweiten Arbeitslastknotens, die in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen sind, dient.
  • Beispiel 8 enthält ein nicht-transitorisches computerlesbares Speichermedium, das Anweisungen umfasst, die dann, wenn sie ausgeführt werden, wenigstens einen Prozessor veranlassen, wenigstens eine erste Anzahl von Credits in den Speicher zu laden, die erste Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist, zu vergleichen, und wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, einen Arbeitslastknoten der Arbeitslast auszuwählen, der in einem Berechnungsbaustein auszuführen ist.
  • Beispiel 9 enthält das nicht-transitorische computerlesbare Speichermedium von Beispiel 8, wobei die Anweisungen, wenn sie ausgeführt werden, den wenigstens einen Prozessor veranlassen, die erste Anzahl von Credits in den Speicher zu laden, wenn die erste Anzahl von Credits von einem Credit-Manager empfangen wird, und wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem Berechnungsbaustein zu dem Puffer gesendet werden, für jede Kachel, die zu dem Puffer gesendet wird, einen Credit zu dem Credit-Manager zu senden.
  • Beispiel 10 enthält das nicht-transitorische computerlesbare Speichermedium von Beispiel 8, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  • Beispiel 11 enthält das nicht-transitorische computerlesbare Speichermedium von Beispiel 8, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Beispiel 12 enthält das nicht-transitorische computerlesbare Speichermedium von Beispiel 8, wobei der Puffer ein erster Puffer ist, die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, und wobei die Anweisungen, wenn sie ausgeführt werden, den wenigstens einen Prozessor veranlassen, eine zweite Anzahl von Credits mit einer zweiten Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem zweiten Puffer zugeordnet ist, zu vergleichen, und wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) die zweite Anzahl von Credits die zweite Schwellenwertanzahl von Credits erfüllt, den Arbeitslastknoten auszuwählen, der in dem Berechnungsbaustein auszuführen ist.
  • Beispiel 13 enthält das nicht-transitorische computerlesbare Speichermedium von Beispiel 12, wobei der zweite Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die zweite Anzahl von Credits dem zweiten Puffer entspricht und die zweite Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Beispiel 14 enthält das nicht-transitorische computerlesbare Speichermedium von Beispiel 8, wobei die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, der Arbeitslastknoten ein erster Arbeitslastknoten ist, und wobei die Anweisungen, wenn sie ausgeführt werden, den wenigstens einen Prozessor veranlassen, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) eine zweite Anzahl von Credits eine zweite Schwellenwertanzahl von Credits erfüllt, den ersten Arbeitslastknoten und einen zweiten Arbeitslastknoten zu planen, in dem Berechnungsbaustein ausgeführt zu werden.
  • Beispiel 15 enthält eine Einrichtung, die Folgendes umfasst: Schnittstellenmittel, wobei die Schnittstellenmittel zum Laden einer ersten Anzahl von Credits in den Speicher dienen, Vergleichsmittel, wobei die Vergleichsmittel zum Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist, dienen, und Verteilungsmittel wobei die Verteilungsmittel, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, zum Auswählen eines Arbeitslastknotens der Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, dienen.
  • Beispiel 16 enthält die Einrichtung von Beispiel 15, wobei die Schnittstellenmittel zum Laden der ersten Anzahl von Credits in den Speicher, wenn die Schnittstellenmittel die erste Anzahl von Credits von einem Credit-Manager empfangen, und wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem ersten aus dem einen oder mehreren Berechnungsbausteinen zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede zu dem Puffer gesendete Kachel dienen.
  • Beispiel 17 enthält die Einrichtung von Beispiel 15, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  • Beispiel 18 enthält die Einrichtung von Beispiel 15, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Beispiel 19 enthält die Einrichtung von Beispiel 15, wobei der Puffer ein erster Puffer ist, die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, die Vergleichsmittel zum Vergleichen einer zweiten Anzahl von Credits mit einer zweiten Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem zweiten Puffer zugeordnet ist, dienen und die Verteilungsmittel zum, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) die zweite Anzahl von Credits die zweite Schwellenwertanzahl von Credits erfüllt, Auswählen des Arbeitslastknotens, der in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, dienen.
  • Beispiel 20 enthält die Einrichtung von Beispiel 19, wobei der zweite Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die zweite Anzahl von Credits dem Eingangspuffer entspricht und die zweite Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Beispiel 21 enthält die Einrichtung von Beispiel 15, wobei die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, der Arbeitslastknoten ein erster Arbeitslastknoten ist, und wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) eine zweite Anzahl von Credits eine zweite Schwellenwertanzahl von Credits erfüllt, die Verteilungsmittel zum Planen des ersten Arbeitslastknotens und eines zweiten Arbeitslastknotens, die in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen sind, dienen.
  • Beispiel 22 enthält ein Verfahren, das Folgendes umfasst: Laden einer ersten Anzahl von Credits in den Speicher, Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist, und wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, Auswählen eines Arbeitslastknotens der Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist.
  • Beispiel 23 enthält das Beispiel von Beispiel 22, das ferner Laden der ersten Anzahl von Credits in den Speicher, wenn die erste Anzahl von Credits von einem Credit-Manager empfangen wird, und wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem ersten aus dem einen oder mehreren Berechnungsbausteinen zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede zu dem Puffer gesendete Kachel enthält.
  • Beispiel 24 enthält das Beispiel von Beispiel 22, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  • Beispiel 25 enthält das Beispiel von Beispiel 22, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  • Obwohl spezielle beispielhafte Verfahren, Einrichtungen und Herstellungsgegenstände hier offenbart worden sind, ist der Umfang der Abdeckung dieses Patents nicht darauf eingeschränkt. Im Gegenteil deckt dieses Patent alle Verfahren, Einrichtungen und Herstellungsgegenstände ab, die gerechterweise in den Schutzbereich der Ansprüche dieses Patents fallen.
  • Die folgenden Ansprüche sind hierdurch in diese ausführliche Beschreibung durch Bezugnahme mit aufgenommen, wobei jeder Anspruch für sich als eine separate Ausführungsform der vorliegenden Offenbarung steht.

Claims (25)

  1. Einrichtung, die Folgendes umfasst: eine Schnittstelle zum Laden einer ersten Anzahl von Credits in den Speicher; eine Vergleichseinheit zum Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist; und einen Dispatcher, um dann, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, einen Arbeitslastknoten einer Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, auszuwählen.
  2. Einrichtung nach Anspruch 1, wobei die Schnittstelle dient zum: Laden der ersten Anzahl von Credits in den Speicher, wenn die Schnittstelle die erste Anzahl von Credits von einem Credit-Manager empfängt; und wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem ersten des einen oder der mehreren Berechnungsbausteine zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede Kachel, die zu dem Puffer gesendet wird.
  3. Einrichtung nach einem der Ansprüche 1-2, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  4. Einrichtung nach einem der Ansprüche 1-3, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  5. Einrichtung nach einem der Ansprüche 1-4, wobei der Puffer ein erster Puffer ist, die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, die Vergleichseinheit zum Vergleichen einer zweiten Anzahl von Credits mit einer zweiten Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem zweiten Puffer zugeordnet ist, dient und der Dispatcher dazu dient, dann, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) die zweite Anzahl von Credits die zweite Schwellenwertanzahl von Credits erfüllt, den Arbeitslastknoten, der in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, auszuwählen.
  6. Einrichtung nach einem der Ansprüche 1-5, wobei der zweite Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die zweite Anzahl von Credits dem Eingangspuffer entspricht und die zweite Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  7. Einrichtung nach einem der Ansprüche 1-6, wobei die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, der Arbeitslastknoten ein erster Arbeitslastknoten ist, und dann, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) eine zweite Anzahl von Credits eine zweite Schwellenwertanzahl von Credits erfüllt, der Dispatcher zum Planen des ersten Arbeitslastknotens und eines zweiten Arbeitslastknotens, die in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen sind, dient.
  8. Computerlesbares Speichermedium, das Anweisungen umfasst, die dann, wenn sie ausgeführt werden, wenigstens einen Prozessor wenigstens zu dem Folgenden veranlassen: Laden einer ersten Anzahl von Credits in den Speicher; Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist; und dann, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, Auswählen eines Arbeitslastknotens einer Arbeitslast, der in einem Berechnungsbaustein auszuführen ist.
  9. Computerlesbares Speichermedium nach Anspruch 8, wobei die Anweisungen, wenn sie ausgeführt werden, den wenigstens einen Prozessor veranlassen zum: Laden der ersten Anzahl von Credits in den Speicher, wenn die erste Anzahl von Credits von einem Credit-Manager empfangen wird; und dann, wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem Berechnungsbaustein zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede Kachel, die zu dem Puffer gesendet wird.
  10. Computerlesbares Speichermedium nach einem der Ansprüche 8-9, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  11. Computerlesbares Speichermedium nach einem der Ansprüche 8-10, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  12. Computerlesbares Speichermedium nach einem der Ansprüche 8-11, wobei der Puffer ein erster Puffer ist, die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, und wobei die Anweisungen, wenn sie ausgeführt werden, den wenigstens einen Prozessor veranlassen zum: Vergleichen einer zweiten Anzahl von Credits mit einer zweiten Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem zweiten Puffer zugeordnet ist; und dann, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) die zweite Anzahl von Credits die zweite Schwellenwertanzahl von Credits erfüllt, Auswählen des Arbeitslastknotens, der in dem Berechnungsbaustein auszuführen ist.
  13. Computerlesbares Speichermedium nach einem der Ansprüche 8-12, wobei der zweite Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die zweite Anzahl von Credits dem zweiten Puffer entspricht und die zweite Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  14. Computerlesbares Speichermedium nach einem der Ansprüche 8-13, wobei die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, der Arbeitslastknoten ein erster Arbeitslastknoten ist, und wobei die Anweisungen, wenn sie ausgeführt werden, den wenigstens einen Prozessor veranlassen, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) eine zweite Anzahl von Credits eine zweite Schwellenwertanzahl von Credits erfüllt, den ersten Arbeitslastknoten und den zweiten Arbeitslastknoten zu planen, in dem Berechnungsbaustein ausgeführt zu werden.
  15. Einrichtung, die Folgendes umfasst: Schnittstellenmittel, wobei die Schnittstellenmittel zum Laden einer ersten Anzahl von Credits in den Speicher dienen; Vergleichsmittel, wobei die Vergleichsmittel zum Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist, dienen; und Verteilungsmittel, wobei die Verteilungsmittel, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, zum Auswählen eines Arbeitslastknoten einer Arbeitslast dienen, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist.
  16. Einrichtung nach Anspruch 15, wobei die Schnittstellenmittel dienen zum: Laden der ersten Anzahl von Credits in den Speicher, wenn die Schnittstellenmittel die erste Anzahl von Credits von einem Credit-Manager empfangen; und dann, wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem ersten des einen oder der mehreren Berechnungsbausteine zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede Kachel, die zu dem Puffer gesendet wird.
  17. Einrichtung nach einem der Ansprüche 15-16, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  18. Einrichtung nach einem der Ansprüche 15-17, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  19. Einrichtung nach einem der Ansprüche 15-18, wobei der Puffer ein erster Puffer ist, die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, die Vergleichsmittel zum Vergleichen einer zweiten Anzahl von Credits mit einer zweiten Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem zweiten Puffer zugeordnet ist, dienen und die Verteilungsmittel dann, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) die zweite Anzahl von Credits die zweite Schwellenwertanzahl von Credits erfüllt, zum Auswählen des Arbeitslastknotens, der in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist, dienen.
  20. Einrichtung nach einem der Ansprüche 15-19, wobei der zweite Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die zweite Anzahl von Credits dem Eingangspuffer entspricht und die zweite Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
  21. Einrichtung nach einem der Ansprüche 15-20, wobei die Schwellenwertanzahl von Credits eine erste Schwellenwertanzahl von Credits ist, der Arbeitslastknoten ein erster Arbeitslastknoten ist, und dann, wenn (1) die erste Anzahl von Credits die erste Schwellenwertanzahl von Credits erfüllt und (2) eine zweite Anzahl von Credits eine zweite Schwellenwertanzahl von Credits erfüllt, die Verteilungsmittel zum Planen des ersten Arbeitslastknotens und eines zweiten Arbeitslastknotens, die in dem ersten des einen oder der mehreren Berechnungsbausteine auszuführen sind, dienen.
  22. Verfahren, das Folgendes umfasst: Laden einer ersten Anzahl von Credits in den Speicher; Vergleichen der ersten Anzahl von Credits mit einer Schwellenwertanzahl von Credits, die der Speicherverfügbarkeit in einem Puffer zugeordnet ist; und dann, wenn die erste Anzahl von Credits die Schwellenwertanzahl von Credits erfüllt, Auswählen eines Arbeitslastknotens einer Arbeitslast, der in einem ersten des einen oder der mehreren Berechnungsbausteine auszuführen ist.
  23. Verfahren nach Anspruch 22, das ferner Folgendes aufweist: Laden der ersten Anzahl von Credits in den Speicher, wenn die erste Anzahl von Credits von einem Credit-Manager empfangen wird; und dann, wenn eine oder mehrere Kacheln von Daten, die dem Arbeitslastknoten zugeordnet sind, von dem ersten des einen oder der mehreren Berechnungsbausteine zu dem Puffer gesendet werden, Senden eines Credit zu dem Credit-Manager für jede Kachel, die zu dem Puffer gesendet wird.
  24. Verfahren nach einem der Ansprüche 22 bis 23, wobei der Puffer ein Ausgangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Ausgangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge des Speichers in dem Ausgangspuffer entspricht.
  25. Verfahren nach einem der Ansprüche 22 bis 24, wobei der Puffer ein Eingangspuffer ist, der dem Arbeitslastknoten zugeordnet ist, die erste Anzahl von Credits dem Eingangspuffer entspricht und die Schwellenwertanzahl von Credits einer Schwellenwertmenge von Daten in dem Eingangspuffer entspricht.
DE102020119519.2A 2019-08-15 2020-07-23 Verfahren und einrichtungen zum ermöglichen einer "out-of-order"-pipeline-ausführung der statischen abbildung einer arbeitslast Pending DE102020119519A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/542,012 2019-08-15
US16/542,012 US11231963B2 (en) 2019-08-15 2019-08-15 Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload

Publications (1)

Publication Number Publication Date
DE102020119519A1 true DE102020119519A1 (de) 2021-02-18

Family

ID=68693863

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020119519.2A Pending DE102020119519A1 (de) 2019-08-15 2020-07-23 Verfahren und einrichtungen zum ermöglichen einer "out-of-order"-pipeline-ausführung der statischen abbildung einer arbeitslast

Country Status (5)

Country Link
US (2) US11231963B2 (de)
JP (1) JP7400169B2 (de)
CN (2) CN112395010A (de)
DE (1) DE102020119519A1 (de)
TW (1) TWI802800B (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10901657B2 (en) * 2018-11-29 2021-01-26 International Business Machines Corporation Dynamic write credit buffer management of non-volatile dual inline memory module
US11231963B2 (en) 2019-08-15 2022-01-25 Intel Corporation Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
US11875247B1 (en) * 2020-06-18 2024-01-16 Amazon Technologies, Inc. Input batching with serial dynamic memory access
US11704058B2 (en) * 2020-07-28 2023-07-18 Samsung Electronics Co., Ltd. Systems and methods for resource-based scheduling of commands
US11620159B2 (en) 2021-04-23 2023-04-04 Samsung Electronics Co., Ltd. Systems and methods for I/O command scheduling based on multiple resource parameters
US12001701B2 (en) * 2022-01-26 2024-06-04 Western Digital Technologies, Inc. Storage biasing for solid state drive accelerators

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5418953A (en) * 1993-04-12 1995-05-23 Loral/Rohm Mil-Spec Corp. Method for automated deployment of a software program onto a multi-processor architecture
JP3892829B2 (ja) 2003-06-27 2007-03-14 株式会社東芝 情報処理システムおよびメモリ管理方法
JP5349515B2 (ja) * 2011-03-14 2013-11-20 株式会社東芝 バッファ管理装置、バッファ管理方法及び記憶装置
EP3982234A3 (de) 2014-07-30 2022-05-11 Movidius Ltd. Computergestützte bildgebung mit geringem stromverbrauch
US10002099B2 (en) * 2014-11-13 2018-06-19 Cavium, Inc. Arbitrated access to resources among multiple devices
GB2569271B (en) * 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
US10649813B2 (en) * 2018-03-29 2020-05-12 Intel Corporation Arbitration across shared memory pools of disaggregated memory devices
US11231963B2 (en) 2019-08-15 2022-01-25 Intel Corporation Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload

Also Published As

Publication number Publication date
JP7400169B2 (ja) 2023-12-19
TW202109285A (zh) 2021-03-01
US11847497B2 (en) 2023-12-19
CN112395010A (zh) 2021-02-23
US20190370073A1 (en) 2019-12-05
US11231963B2 (en) 2022-01-25
JP2021034020A (ja) 2021-03-01
US20220197703A1 (en) 2022-06-23
KR20210021263A (ko) 2021-02-25
CN114895965A (zh) 2022-08-12
TWI802800B (zh) 2023-05-21

Similar Documents

Publication Publication Date Title
DE102020119519A1 (de) Verfahren und einrichtungen zum ermöglichen einer "out-of-order"-pipeline-ausführung der statischen abbildung einer arbeitslast
JP2020537784A (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
DE102020108374A1 (de) Verfahren und vorrichtung zur laufzeitmehrfachplanung von software, die in einem heterogenen system ausgeführt wird
DE102019106669A1 (de) Verfahren und anordnungen zum verwalten von speicher in kaskadierten neuronalen netzen
DE102016118210A1 (de) Granulare Dienstqualität für Computer-Ressourcen
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE112011101725T5 (de) Sub-Puffer-Objekte
DE102021102589A1 (de) Berechnungsgraph-optimierung
DE112012002905T5 (de) Technik zum Kompilieren und Ausführen von Programmen in höheren Programmiersprachen auf heterogenen Computern
DE102020110655A1 (de) Verfahren und vorrichtung zum verbessern der verwendung eines heterogenen systems, das software ausführt
DE102019122935A1 (de) Verfahren und vorrichtungen zum zuweisen einer arbeitslast an einen beschleuniger unter verwendung von maschinenlernen
DE102020102783A1 (de) Verfahren und einrichtungen zum verbessern einer leistungsdatensammlung einer hochleistungsberechnungsanwendung
DE102020101814A1 (de) Effiziente ausführung anhand von aufgabengraphen festgelegter arbeitslasten
DE102021104561A1 (de) Asynchrone datenbewegungspipeline
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE102018006537A1 (de) Dynamische Leistungsbeeinflussung in einem Prozessor
DE102020201154A1 (de) Verfahren und vorrichtung zum speichern von und zugreifen auf mehrdimensionale daten
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren
DE112020000865T5 (de) Speicherverwaltungssystem
US8681166B1 (en) System and method for efficient resource management of a signal flow programmed digital signal processor code
DE102020121601A1 (de) Persistenter Notizblockspeicher zum Datenaustausch zwischen Programmen
CN113592066A (zh) 硬件加速方法、装置、设备、计算机程序产品及存储介质
DE102021106797A1 (de) Techniken zur orchestrierung von phasen der thread-synchronisation
DE102022129946A1 (de) Verfahren und vorrichtungen zum bestimmen eines verfeinerten kontexts für softwarefehlererkennung und - korrektur
DE102020118005A1 (de) Verfahren und einrichtung zum dynamischen drosseln von rechenengines

Legal Events

Date Code Title Description
R130 Divisional application to

Ref document number: 102020008218

Country of ref document: DE