DE102004061339A1 - Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren - Google Patents

Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren Download PDF

Info

Publication number
DE102004061339A1
DE102004061339A1 DE102004061339A DE102004061339A DE102004061339A1 DE 102004061339 A1 DE102004061339 A1 DE 102004061339A1 DE 102004061339 A DE102004061339 A DE 102004061339A DE 102004061339 A DE102004061339 A DE 102004061339A DE 102004061339 A1 DE102004061339 A1 DE 102004061339A1
Authority
DE
Germany
Prior art keywords
thread
context
threads
scheduling
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE102004061339A
Other languages
English (en)
Inventor
Lorenzo Di Gregorio
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.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
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 Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102004061339A priority Critical patent/DE102004061339A1/de
Priority to DE202004021684U priority patent/DE202004021684U1/de
Priority to US11/305,336 priority patent/US7793296B2/en
Publication of DE102004061339A1 publication Critical patent/DE102004061339A1/de
Ceased legal-status Critical Current

Links

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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Complex Calculations (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)

Abstract

Die Erfindung betrifft eine Einrichtung (3) zur Verwendung bei einem Scheduling-Verfahren und ein Scheduling-Verfahren, insbesondere Kontext-Scheduling-Verfahren, welches die Schritte aufweist: DOLLAR A - Durchführen eines Schedulings für von einem Multithreaded(MT)-Prozessor (11) abzuarbeitende Threads, DOLLAR A dadurch gekennzeichnet, dass das Scheduling in Abhängigkeit von den Threads zugeordneten Index-Variablen durchgeführt wird. DOLLAR A Dabei kann jeweils derjenige Thread als durch den Prozessor (11) abzuarbeitender Thread ausgewählt werden, dessen Index-Variable den höchsten oder - bei einer Alternative - den niedrigsten Wert aufweist.

Description

  • Die Erfindung betrifft ein Scheduling-Verfahren, insbesondere Kontext-Scheduling-Verfahren, und eine Einrichtung zur Verwendung bei einem Scheduling-Verfahren.
  • Herkömmliche digitale Rechenschaltkreise (z.B. entsprechende, auf einem Mikrochip angeordnete Mikrocontroller- bzw. Mikroprozessor-Systeme) weisen eine oder mehrere (zentrale) Steuer- bzw. Recheneinheiten auf (Central Processing Units (CPUs), bzw. CPU „Cores").
  • Die CPU oder die CPUs sind – über einen System-Bus (und ggf. ein oder mehrere weitere Bus-Systeme) – mit einer oder mehreren (externen oder internen) Speicher-Einrichtungen verbunden, z.B. einer Programm- und einer Datenspeichereinrichtung („Programmspeicher", und „Datenspeicher").
  • Der „Programmspeicher" enthält insbesondere die Folge der von dem bzw. den CPU Cores abzuarbeitenden Befehle, also das Programm (und ggf. zusätzlich entsprechende – von dem bzw. den CPU Cores zu verwendende – Daten-Konstanten).
  • Der Programmspeicher kann z.B. von einem EPROM (Erasable PROM bzw. Löschbaren Festwertspeicher) oder EEPROM (Electrically Erasable PROM bzw. Elektrisch Löschbarer Festwertspeicher) gebildet werden, insbesondere einem Flash-EEPROM-Bauelement.
  • Dadurch kann erreicht werden, dass das Programm auch bei unterbrochener Stromzufuhr auf der entsprechenden Speicher-Einrichtungen gespeichert bleibt.
  • Für häufig zu ändernde Programme können – alternativ – z.B. auch RAMs (RAM = Random Access Memory bzw. Schreib-Lese-Speicher), insbesondere DRAMs als Programmspeicher verwendet werden, die von einem externen Massenspeicher geladen werden können.
  • Im o.g. „Datenspeicher" können z.B. die – insbesondere von dem bzw. den CPU Cores beim Abarbeiten des Programms ggf. abzuändernden – Variablen gespeichert sein.
  • Der Datenspeicher kann z.B. von einem oder mehreren RAM-Bauelementen, insbesondere z.B, einem entsprechenden DRAM-Bauelement (DRAM = Dynamic Random Access Memory), oder SRAM-Bauelement (SRAM = Static Random Access Memory) gebildet werden.
  • Ein – durch den CPU Core abzuarbeitendes – Software-Programm (bzw. mehrere derartige Programme) kann in eine Vielzahl entsprechender Programmbefehlfolgen (Threads) unterteilt sein.
  • Dies hat z.B. den Vorteil, dass – insbesondere z.B. bei sog. Multithreaded (MT) Mikrocontroller- bzw. Mikroprozessor-Systemen – konkurrierend jeweils mehrere, verschiedene Programmbefehlfolgen in ein- und denselben CPU Core geladen, und dort abgearbeitet werden können.
  • Mit Hilfe von Multithreaded (MT) Mikrocontroller- bzw. Mikroprozessor-Systemen können bestimmte Resourcen – insbesondere z.B. die Execution Pipeline (Processing Pipeline) – effizienter genutzt werden.
  • Beispielsweise können Takt-Zeiten, in denen es bei einem bestimmten, in den CPU Core geladenen Thread aus bestimmten Gründen zu einer Verzögerung kommt, zur Bearbeitung eines weiteren – ebenso in den CPU Core geladenen – Threads verwendet werden.
  • Zum Speichern des Zustands bzw. „Kontexts" von – ggf. mehreren – in den CPU Core geladenen Threads sind bei einem Multithreaded (MT) Mikrocontroller- bzw. Mikroprozessor-System Elemente wie z.B. Programm-Zähler (PC bzw. Program Counter), Befehls-Zustands-Register (Execution Status Register), Register File, etc., etc. ggf. mehrfach vorhanden.
  • Dadurch können mehrere, verschiedene Threads gleichzeitig in ein- und demselben CPU Core gehalten, und kann zwischen den Threads entsprechend hin- und hergeschaltet werden.
  • Üblicherweise wird nur ein kleiner Teil der jeweils auszuführenden Threads simultan in dem CPU Core gehalten; die übrigen, auszuführenden Threads werden – bis sie in den CPU Core geladen werden – ausserhalb des CPU Cores zwischengespeichert.
  • Das Scheduling der Threads findet somit in zwei Stufen statt: Bei einer ersten Scheduling-Stufe wird entschieden, wann welche zur Abarbeitung anstehende (ausserhalb des CPU Cores zwischengespeicherte) Threads in den CPU Core geladen werden, und einem entsprechenden „Kontext" zugeordnet werden („Off-Core-Thread-Scheduling" bzw. „Thread-Scheduling"). Bei einer zweiten, nachgeordneten Stufe wird entschieden, wann welcher der in den CPU Core geladenen, einem Kontext zugeordneten Threads exekutiert werden soll („On-Core-Thread-Scheduling" bzw. „Context-Scheduling").
  • Bei herkömmlichen Multithreaded (MT) Mikrocontroller- bzw. Mikroprozessor-Systemen wird das „Context-Scheduling" üblicherweise hardware-mäßig, und das „Thread-Scheduling" software-mäßig gesteuert.
  • Für beide Scheduling-Stufen können jeweils unterschiedliche Scheduling-Strategien verwendet werden. Ziel des „Context-Schedulings" (und ggf. auch des „Thread-Schedulings") ist – allgemein formuliert – die Optimierung einer entsprechenden Kostenfunktion, insbesondere z.B. das Erzielen eines möglichst hohen Durchsatzes, die sog. Toleranz entsprechender Latenzen, bzw. ein möglichst optimaler Einsatz der Prozessor-Resourcen, etc., etc., und Ziel des „Thread-Scheduling" z.B. die Bestimmung einer konfliktfreien Folge von Programmflüssen, oder die Priorisierung von Programmflüssen anhand von Echtzeit-Anforderungen, etc.
  • Herkömmliche Context-Scheduling-Verfahren bzw. Context-Scheduling-Strategien basieren auf (fest vergebenen, den einzelnen, jeweils abzuarbeitenden Threads zugeordneten, „quasi-statischen") Prioritäten.
  • Dies hat zur Folge, dass i.d.R. – im Sinne der o.g., und/oder entsprechender weiterer Ziele des jeweiligen Schedulings (d.h. im Sinne der Optimierung einer entsprechenden Kostenfunktion) – kein optimales, bzw. relativ weit von einem optimalen Scheduling entferntes Context-Scheduling erreicht wird.
  • Die Erfindung hat zur Aufgabe, ein neuartiges Scheduling-Verfahren, insbesondere Kontext-Scheduling-Verfahren, und eine neuartige Einrichtung zur Verwendung bei einem Scheduling-Verfahren zur Verfügung zu stellen.
  • Sie erreicht dieses und weitere Ziele durch die Gegenstände der Ansprüche 1 und 11.
  • Vorteilhafte Weiterbildungen der Erfindung sind in den Unteransprüchen angegeben.
  • Gemäß einem ersten Aspekt der Erfindung wird ein Scheduling-Verfahren, insbesondere Kontext-Scheduling-Verfahren zur Verfügung gestellt, welches die Schritte aufweist:
    • – Durchführen eines Schedulings für von einem Multithreaded (MT) – Prozessor abzuarbeitende Threads dadurch gekennzeichnet, dass das Scheduling in Abhängigkeit von den Threads zugeordneten Index-Variablen durchgeführt wird.
  • Bei einer besonders vorteilhaften Ausgestaltung der Erfindung wird derjenige Thread als durch den Prozessor abzuarbeitender Thread ausgewählt, dessen Index-Variable den höchsten (oder – bei einer weiteren, alternativen, vorteilhaften Ausgestaltung – den niedrigsten) Wert aufweist.
  • Bei einer bevorzugten Weiterbildung der Erfindung kann der Wert der Index-Variable eines im aktiven Zustand befindlichen Threads während des aktiven Thread-Zustands geändert werden; insbesondere kann der Wert der Index-Variable des jeweils abgearbeiteten Threads im Verlauf der Thread-Abarbeitung geändert werden.
  • Vorteilhaft kann zur Änderung des Werts der Index-Variable eine Hardware-Schaltung, insbesondere eine Hardware-Interpolator-Schaltung verwendet werden.
  • Gemäß einem weiteren Aspekt der Erfindung wird eine Einrichtung, insbesondere eine Kontext-Schedule-Einrichtung zur Verwendung bei einem Scheduling-Verfahren zur Verfügung gestellt, bei welchem ein Scheduling für von einem Multithreaded (MT) – Prozessor abzuarbeitende Threads durchgeführt wird
    dadurch gekennzeichnet, dass die Einrichtung eine Vorrichtung aufweist zum Vergleichen von den Threads zugeordneten Index-Variablen.
  • Bei einer vorteilhaften Ausgestaltung ist die Vergleichs-Vorrichtung so ausgestaltet und eingerichtet, dass mit der Vergleichs-Vorrichtung derjenige Thread ermittelt wird, dessen Index-Variable den höchsten (oder alternativ z.B. den niedrigsten) Wert aufweist.
  • Vorteilhaft weist die Einrichtung eine Vorrichtung auf zum Erzeugen eines Thread-Wechsel-Signals (bzw. eines Context-Switch-Indikations-Signals), wenn durch die Vergleichs-Vorrichtung ermittelt wird, dass ein Wechsel beim Thread mit höchstem (oder alternativ: mit niedrigstem) Index-Variablen-Wert stattgefunden hat. Die Abarbeitung des zuletzt abgearbeiteten Threads kann dann unterbrochen, und stattdessen mit der Abarbeitung des Threads mit (dann) höchstem Index-Variablen-Wert begonnen werden.
  • Im folgenden wird die Erfindung anhand von Ausführungsbeispielen und der beigefügten Zeichnung näher erläutert. In der Zeichnung zeigt:
  • 1 eine schematische, vereinfachte Darstellung eines Mikrocontroller- bzw. Mikroprozessor-Systems gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 2 eine schematische Darstellung der bei dem in 1 gezeigten Mikrocontroller- bzw. Mikroprozessor-System bei einem Kontext-Scheduling verwendeten Kontext-Schedule-Vorrichtung, und der in 1 gezeigten CPU;
  • 3 eine schematische Detail-Darstellung der in 2 gezeigten Kontext-Schedule-Vorrichtung;
  • 4 eine schematische Detail-Darstellung einer der in der in 3 gezeigten Kontext-Schedule-Vorrichtung verwendeten Interpolator-Einrichtungen.
  • In 1 ist eine schematische Darstellung eines Mikrocontroller- bzw. Mikroprozessor-Systems 10 gemäß einem Ausführungsbeispiel der Erfindung gezeigt.
  • Bei dem Mikrocontroller- bzw. Mikroprozessor-System 10 kann es sich z.B. um ein 8 Bit Mikrocontroller- bzw. Mikroprozessor-System 10 handeln, oder um ein beliebiges anderes Mikrocontroller- bzw. Mikroprozessor-System, z.B. ein entsprechendes 16 Bit, 32 Bit oder 64 Bit Mikrocontroller- bzw. Mikroprozessor-System, etc., insbesondere um ein Multithreaded (MT) Mikrocontroller- bzw. Mikroprozessor-System, z.B. um ein auf einem „Fine Grain" Multithreaded Prozessor Mikro-Architektur-Protokoll der Fa. Infineon basierendes Mikrocontroller- bzw. Mikroprozessor-System.
  • Das Mikrocontroller- bzw. Mikroprozessor-System 10 weist eine oder mehrere, auf einem entsprechenden Mikrochip 15 angeordnete (zentrale) Steuer- bzw. Recheneinheiten 11 auf (Central Processing Units (CPUs), bzw. CPU „Cores").
  • Die CPU 11 oder die CPUs sind – über einen System-Bus 16 (und ggf. ein oder mehrere weitere Bus-Systeme) – mit einer oder mehreren internen (auf demselben Mikrochip 15, wie die CPU 11 vorgesehenen) Speicher-Einrichtungen 17 verbunden, sowie – z.B. über den System-Bus 16, und eine oder mehrere entsprechende Speicher-Steuereinrichtungen („memory controller") 12 – mit einer oder mehreren externen (auf einem anderen Mikrochip, als die CPU 11 vorgesehenen) Speicher-Einrichtungen 18.
  • Die Speicher-Einrichtungen 17, 18 können z.B. als Programmspeichereinrichtung, und/oder Datenspeichereinrichtung („Programmspeicher", und „Datenspeicher") fungieren.
  • Der „Programmspeicher" enthält insbesondere die Folge der von der bzw. den CPUs 11 abzuarbeitenden Befehle, also das Programm (und ggf. zusätzlich entsprechende – von der bzw. den CPUs 11 zu verwendende – Daten-Konstanten).
  • Der – z.B. von der Speicher-Einrichtung 17 gebildete – Programmspeicher kann z.B. von einem EPROM (Erasable PROM bzw. Löschbaren Festwertspeicher) oder EEPROM (Electrically Erasable PROM bzw. Elektrisch Löschbarer Festwertspeicher) gebildet werden, insbesondere einem Flash-EEPROM-Bauelement.
  • Dadurch kann erreicht werden, dass das Programm auch bei unterbrochener Stromzufuhr auf der entsprechenden Speicher-Einrichtungen gespeichert bleibt.
  • Für häufig zu ändernde Programme können – alternativ – z.B. auch RAMs (RAM = Random Access Memory bzw. Schreib-Lese-Speicher), insbesondere DRAMs als Programmspeicher verwendet werden, die von einem externen Massenspeicher geladen werden können.
  • Im o.g. – z.B. von der Speicher-Einrichtung 18 gebildeten – „Datenspeicher" können z.B. die – insbesondere von der bzw. den CPUs 11 beim Abarbeiten des Programms ggf. abzuändernden – Variablen gespeichert sein.
  • Der Datenspeicher kann z.B. von einem oder mehreren RAM-Bauelementen, insbesondere z.B. einem entsprechenden DRAM-Bauelement (DRAM = Dynamic Random Access Memory), oder SRAM-Bauelement (SRAM = Static Random Access Memory) gebildet werden.
  • Ein – durch die CPU bzw. den CPU Core 11 abzuarbeitendes – Software-Programm (bzw. mehrere derartige Programme) kann in eine Vielzahl entsprechender Software Tasks (Threads) unterteilt sein.
  • Dies hat z.B. den Vorteil, dass – insbesondere bei dem hier gezeigten Multithreaded (MT) Mikrocontroller- bzw.
  • Mikroprozessor-System 10 – parallel jeweils mehrere, verschiedenene Tasks gleichzeitig in den CPU Core 11 geladen, und dort abgearbeitet werden können.
  • Zum Speichern des Zustands bzw. „Kontexts" von – ggf. mehreren – in den CPU Core 11 geladenen Threads sind bei dem CPU Core 11 bestimmte Elemente wie z.B. Programm-Zähler (PC bzw. Program Counter), Befehls-Zustands-Register (Execution Status Register), Stack Pointer, Register File, etc., etc. ggf. mehrfach vorhanden (z.B. zwei-, drei-, vier- oder fünffach, etc.).
  • Jedem Thread ist ein als Thread-Kontext bezeichneter Satz von Zustandselementen zugeordnet. Hierdurch, und durch das mehrfache Vorsehen der o.g. Elemente können mehrere, verschiedene Threads (z.B. zwei, drei, vier oder fünf Threads, etc.) gleichzeitig in den CPU Core 11 geladen, und kann zwischen den Threads entsprechend hin- und hergeschaltet werden (insbesondere so, dass beim Umschalten nur wenige Zyklen, oder – besonders vorteilhaft – kein Zyklus verloren geht).
  • Auf diese Weise können bestimmte Prozessor-Resourcen – insbesondere z.B, die Execution Pipeline (Processing Pipeline) – effizienter genutzt werden; die Execution Pipeline kann verschiedenen Threads zugeordnete Befehle simultan bearbeiten.
  • Beispielsweise können Takt-Zeiten, in denen es bei einem bestimmten, in den CPU Core 11 geladenen Thread aus bestimmten Gründen zu einer Verzögerung kommt, zur Bearbeitung eines weiteren – parallel in den CPU Core geladenen – Threads verwendet werden.
  • Wie im folgenden noch genauer erläutert wird, wird i.d.R. nur ein (kleiner) Teil der jeweils auszuführenden Threads simultan in den CPU Core 11 geladen; die übrigen, auszuführenden Threads werden – bis sie in den CPU Core 11 geladen werden – ausserhalb des CPU Cores 11 zwischengespeichert (und hierzu z.B. aus der Speicher-Einrichtung 17 ausgelesen, und – zur Zwischenspeicherung – in einer nahe beim CPU Core 11 vorgesehenen (weiteren) Speichereinrichtung abgespeichert).
  • Das Scheduling der Threads findet somit in zwei Stufen statt: Bei einer ersten Scheduling-Stufe wird entschieden, wann welche zur Abarbeitung anstehende (ausserhalb des CPU Cores 11 in der o.g. weiteren Speichereinrichtung zwischengespeicherte) Threads in den CPU Core 11 geladen werden, und einem entsprechenden „Kontext" zugeordnet werden („Off-Core-Thread-Scheduling" bzw. „Thread-Scheduling").
  • Bei einer zweiten, nachgeordneten Stufe wird entschieden, wann welcher der in den CPU Core 11 geladenen Threads exekutiert werden soll („On-Core-Thread-Scheduling" bzw. „Context-Scheduling", z.B. mit Hilfe einer – hardwaremäßig verwirklichten, in 2 gezeigten – Kontext-Schedule-Vorrichtung 3).
  • Das Thread-Scheduling kann z.B. – entsprechend wie herkömmlich – software-mäßig (oder alternativ z.B. auch hardware-mäßig) gesteuert werden.
  • Die – für das „On-Core-Thread-Scheduling" bzw. „Context-Scheduling" verantwortliche – Kontext-Schedule-Vorrichtung 3 benötigt – für jeden in den CPU Core 11 geladenen On-Core-Thread – Informationen hinsichtlich des momentanen Kontext-Status, und Attribut-Informationen (z.B. hinsichtlich Thread-Index-Wert bzw. Default-Thread-Index-Wert (bzw. hinsichtlich entsprechender Interpolation-Type-Default-, und Expected-Reward-Default-Werte (s.u.))).
  • Diese Informationen können in einem entsprechenden Kontext-Status-Array-Speicher abgespeichert sein.
  • Im Kontext-Status-Array-Speicher können mehrere Kontext-Status-Elemente (CSE bzw. Context Status Element) enthalten sein, die jeweils – bezogenen auf jeweils einen Kontext – die o.g. Informationen hinsichtlich des momentanen Kontext-Status, und die o.g. Attribut-Informationen enthalten.
  • Jedes Kontext-Status-Element kann zwei Register aufweisen, und zwar ein erstes Register zum Speichern der Kontext-Status-Informationen, und ein zweites Register zum Speichern der Attribut-Informationen.
  • Das erste Register weist mindestens ein Bit auf, welches anzeigt, ob das jeweilige Kontext-Status-Element (bzw. der entsprechende Kontext) frei („free"), oder belegt („not free") ist (d.h. von einem entsprechenden Thread belegt ist, oder nicht) („occupied"-Bit).
  • Falls beim o.g. Thread-Scheduling ermittelt wird, dass ein Kontext-Status-Element (bzw, der entsprechende Kontext) frei („free") ist (d.h., falls das „occupied"-Bit in einem einen solchen Zustand anzeigenden (z.B. nicht gesetzten) Zustand ist), kann einer von mehreren zur Bearbeitung anstehenden, in der o.g. weiteren Speichereinrichtung zwischengespeicherten Kandidaten-Threads (entsprechend der beim Thread-Scheduling verwendeten Scheduling-Strategie (z.B. entsprechend wie bei herkömmlichen Verfahren jeweils der erste von mehreren in einer Kandidaten-Thread-Liste enthaltenen, in einem Bereit-Zustand befindlichen Threads)) in den CPU Core 11 geladen, der Thread mit dem entsprechenden Kontext verknüpft, und dann das „occupied"-Bit gesetzt werden (sowie z.B. ein weiteres Status-Bit, welches den Thread dann als im Zustand „idle" befindlich kennzeichnet).
  • Des weiteren können für den neu geladenen Thread die entsprechenden – z.B. im o.g. Programmspeicher 17 unter Zuordnung zum jeweiligen Thread abgespeicherten (und beim Laden des Threads in der o.g. weiteren Speichereinrichtung zwischengespeicherten) – Attribut-Informationen (Thread-Index- bzw. Default-Thread-Index-Wert (bzw. Interpolation-Type-Default-, und Expected-Reward-Default-Wert (s.u.))) in dem Kontext-Status-Array-Speicher, insbesondere in dem (zweiten) Register des entsprechenden Kontext-Status-Elements abgelegt werden, und kann die Start-Adresse des neu geladenen Threads in den entsprechenden Programm-Zähler (PC bzw. Program Counter) des CPU Core 11 geschrieben werden.
  • Ein von dem CPU Core 11 abzuarbeitender Thread kann sich – On-Core-mäßig betrachtet (d.h. für die Kontext-Schedule-Vorrichtung 3) – insbesondere z.B. in einem aktiven, oder einem nicht aktiven Zustand befinden:
    • – „" (nicht-aktivz.B. „idle": Thread bereit zum Starten bzw. zum Fortfahren mit der Ausführung, jedoch zum Zeitpunkt (momentan) nicht ausgeführt)
    • – „aktiv" bzw. „running": Thread zum Zeitpunkt ausgeführt, indem entsprechende Befehle ggf. geholt und durch die Execution Pipeline bzw. Processing Pipeline ausgeführt werden.
  • Im CPU Core 11 kann sich jeweils nur ein einziger Thread im Zustand „running" befinden:
    Der Zustand des o.g. – im Kontext-Status-Array-Speicher abgespeicherten – „idle"-Bits wird von der Kontext-Schedule-Vorrichtung 3 abgefragt; diese wählt – falls ein von dem CPU Core 11 in Abarbeitung befindlicher, d.h. im Zustand „running" befindlicher Kontext bzw. Thread durch einen neuen, abzuarbeitenden Thread ersetzt werden soll (bzw. neu ein Thread in einen Zustand „running" gebracht werden soll) – den nächsten, laufenden bzw. von dem CPU Core 11 abzuarbeitenden (d.h, in einen Zustand „running" zu bringenden) Kontext bzw. Thread unter solchen Kontexten bzw. Threads aus, die durch ein gesetztes „idle"-Bit als im Zustand „idle" befindlich gekennzeichnet sind.
  • Wie aus 2 ersichtlich ist, wird – z.B. mittels eines über eine Leitung 6 übertragenen Signals „Current Context" – von dem CPU Core 11 aus fortwährend der Kontext-Schedule-Vorrichtung 3 mitgeteilt, welcher Kontext bzw. Thread momentan in einem Zustand „running" ist, d.h. für welchen Thread durch die Execution Pipeline bzw. Processing Pipeline gerade entsprechende Befehle geholt, und ausgeführt werden (z.B. durch Übertragung einer den jeweils ausgeführten bzw. laufenden Thread kennzeichnenden Kontext-ID („Running context number")).
  • Gemäß 3 weist die Kontext-Schedule-Vorrichtung 3 eine – z.B. der Anzahl an (maximal) zur Verfügung stehenden Kontexten entsprechende, und diesen jeweils zugeordnete – Vielzahl von Interpolator-Einrichtungen 5a, 5b, etc. auf.
  • Eine erste Interpolator-Einrichtung (z.B. die Interpolator-Einrichtung 5a) kann beim vorliegenden Ausführungsbeispiel (vorübergehend oder dauerhaft) z.B. einem ersten der Vielzahl von Kontexten zugeordnet sein, z.B. einem momentan laufenden (in einem Zustand „running" befindlichen) Thread bzw. Kontext, und eine oder mehrere weitere Interpolator-Einrichtungen (z.B. die Interpolator-Einrichtung 5b, etc.) (vorübergehend, oder dauerhaft) z.B. jeweils einem oder mehreren weiteren Threads bzw. Kontexten, z.B. momentan bereiten, aber nicht laufenden (insbesondere in einem Zustand „idle" befindlichen) Threads bzw. Kontexten, etc.
  • Wie im folgenden noch genauer erläutert wird, wird beim vorliegenden Ausführungsbeispiel jeweils die dem momentan laufenden (in einem Zustand „running" befindlichen) Thread bzw. Kontext zugeordnete Interpolator-Einrichtung (z.B. die Interpolator-Einrichtung 5a) (und ggf. zusätzlich auch jeweils beim o.g. Thread-Scheduling jeweils aktuell neu geladenen Threads zugeordnete Interpolator-Einrichtungen) in einen „aktivierten" Zustand (Zustand „interpolator running") gebracht, und die Interpolator-Einrichtung(en) (z.B. die Interpolator-Einrichtung 5b) der übrigen – momentan bereiten, aber nicht laufenden – Threads bzw. Kontexts in einen „deaktivierten" Zustand (Zustand „interpolator idle").
  • Im aktivierten Zustand wird – wie ebenfalls weiter unten noch genauer erläutert wird – durch die entsprechende Interpolator-Einrichtung 5a jeweils ein neuer, aktualisierter, abgeänderter Thread-Index-Wert berechnet, und der jeweils (neu) berechnete Index-Wert mittels eines entsprechenden, an einer Leitung 20 ausgegebenen Signals an eine Vergleichs-Einrichtung 1 übertragen.
  • Demgegenüber wird von den jeweils deaktivierten Interpolator-Einrichtungen 5b – ohne Änderung – (weiter) der jeweils zuletzt berechnete Thread-Index-Wert ausgegeben, und mittels entsprechender, über entsprechende Leitungen 21 übertragenen Signalen – ebenfalls – der Vergleichs-Einrichtung 1 zugeführt.
  • Die Vergleichs-Einrichtung 1 ermittelt, welche der Interpolator-Einrichtungen 5a, 5b den jeweils größten Thread-Index-Wert liefert (d.h. für welchen Thread bzw. Kontext jeweils der größte Thread-Index-Wert vorliegt).
  • Wie aus 3 hervorgeht, wird von der Vergleichs-Einrichtung 1 an einer Leitung 8 ein den Thread bzw. Kontext mit dem jeweils größten Thread-Index-Wert kennzeichnendes Signal „Destination Context" zur Verfügung gestellt (z.B. ein die Kontext-ID des Threads bzw. Kontextes mit dem jeweils größten Thread-Index-Wert enthaltendes Signal).
  • Gemäß 2 wird das von der Vergleichs-Einrichtung 1 an der Leitung 8 ausgegebene Signal „Destination Context" an den CPU Core 11 weitergeleitet, sowie – wie aus 3 ersichtlich ist – über eine Leitung 22 an einen ersten Eingang einer Komparator-Einrichtung 2, und über eine Leitung 23 an einen Zwischenspeicher bzw. ein Latch 4.
  • Der Zwischenspeicher bzw. Latch 4 leitet das an der Leitung 23 anliegende – die Kontext-ID des Threads mit dem jeweils grössten Thread-Index-Wert angebende – Signal „Destination Context" mit einer gewissen Verzögerung behaftet über eine Leitung 24 an einen zweiten Eingang der Komparator-Einrichtung 2 weiter.
  • Kommt es zu einem Wechsel beim Thread bzw. Kontext mit jeweils grösstem Thread-Index-Wert – und damit auch zu einer Änderung beim die Kontext-ID des Threads mit dem jeweils grössten Thread-Index-Wert angebenden Signal „Destination Context"-, liegt – kurzzeitig – an den Leitungen 8, 22, 23 schon ein die neue Kontext-ID kennzeichnendes Signal „Destination Context neu" an, jedoch – aufgrund der o.g. Verzögerungswirkung des Zwischenspeichers bzw. Latches 4 – an der Leitung 24 noch ein die alte Kontext-ID kennzeichnendes Signal „Destination Context alt".
  • Aufgrund des – kurzzeitigen – Unterschiedes der – über die Leitung 22, und die Leitung 24 – an den ersten und zweiten Eingang der Komparator-Einrichtung 2 angelegten Signale wird von der Komparator-Einrichtung 2 dann – kurzzeitig – an einer Leitung 7 ein einen stattgefundenen Wechsel beim Thread bzw. Kontext mit jeweils grösstem Thread-Index-Wert kennzeichnendes Signal „Context Switch Indication" ausgegeben, und – wie aus 2 hervorgeht – an den CPU Core 11 weitergeleitet.
  • Durch die CPU Core 11 kann dann ein entsprechender Kontext-Wechsel vollzogen werden, wobei der durch das an den Leitungen 8 ausgegebene Signal „Destination Context" angegebene Kontext dann in einen laufenden Zustand (Zustand „running") gebracht wird, und der zuletzt laufende bzw. in einem Zustand „running" befindliche Kontext in einen nicht laufenden Zustand (insbesondere z.B. in einen Zustand „idle").
  • Wie oben bereits kurz erläutert wurde, wird – insbesondere – jeweils die dem momentan laufenden (in einem Zustand „running" befindlichen) Thread bzw. Kontext zugeordnete Interpolator-Einrichtung (z.B. die Interpolator-Einrichtung 5a) in einen aktivierten Zustand gebracht.
  • Hierzu wird – wie aus 4 hervorgeht – in jeder Interpolator-Einrichtung 5a die an der Leitung 6 mittels des Signals „Current Context" von dem CPU Core 11 aus übertragene, den jeweils ausgeführten bzw. laufenden Thread kennzeichnende Kontext-ID in einer Vergleichseinrichtung 30 mit der – z.B. in der Vergleichseinrichtung 30 abgespeicherten – Kontext-ID des der jeweiligen Interpolator-Einrichtung 5a zugeordneten Kontextes verglichen.
  • Falls die den jeweils ausgeführten bzw. laufenden Thread kennzeichnende Kontext-ID gleich ist, wie die Kontext-ID des der jeweiligen Interpolator-Einrichtung 5a zugeordneten Kontextes, wird durch die Vergleichseinrichtung 30 an einer Leitung 31 ein Aktivier- bzw. Freigabe-Signal ausgegebenen, insbesondere ein Signal „Write Enable".
  • Das Signal „Write Enable" wird an einen Freigabe-Eingang eines Register-Satzes 32 weitergeleitet, und an jeweils erste Eingänge entsprechender UND-Glieder 33, 34.
  • Hierdurch wird – wie im folgenden noch genauer erläutert wird – der Register-Satz 32 zum (Neu-)Beschreiben mit entsprechenden Werten freigegeben, und die UND-Glieder 33, 34 zur Weiterleitung entsprechender, an Leitungen 57, 58 anliegender Signale „Flush Indication" bzw. „Push Indication" an entsprechende Steuereingänge eines FIFO-Speichers 35 (FIFO = First-In-First-Out).
  • Wie aus 2 hervorgeht, und wie im folgenden noch genauer erläutert wird, werden von dem CPU Core 11 über entsprechende, mit der Kontext-Schedule-Vorrichtung 3 verbundene Leitungen 13, 14, 19 auf den jeweils laufenden Thread bzw. Context bezogene Signale „Interpolation Type", „Expected Reward", und „Stopping Time" zur Verfügung gestellt (bzw. – für den jeweils laufenden Thread bzw. Kontext – entsprechende Variablen-Werte für entsprechende – den jeweiligen Interpolations-Typ, den erwarteten Erfolg, und die Stopping Time kennzeichnende – Variablen (s.u.)).
  • Wie weiter unten noch genauer erläutert wird, werden die entsprechenden „Interpolation Type"-, „Expected Reward"-, und „Stopping Time"-Variablen-Werte in den dem jeweils laufenden Thread bzw. Kontext zugeordneten FIFO-Speicher 35 geladen.
  • Solange in dem FIFO-Speicher 35 noch keine entsprechenden Variablen-Werte gespeichert sind, solange der FIFO-Speicher 35 also in einem „leeren" Zustand ist, wird an einer Leitung 36 ein den „leeren" Zustand des FIFO-Speichers 35 kennzeichnendes Signal „Empty" ausgegeben.
  • Die Leitung 36 ist mit einem Steuer-Eingang eines ersten Multiplexers 37 verbunden.
  • Das an der Leitung 36 dem Steuer-Eingang des ersten Multiplexers 37 zugeführte Signal „Empty" führt dazu, dass entsprechende Ausgangs-Leitungen 39 des ersten Multiplexers 37 logisch mit entsprechenden – an einen Default-Register- Satz 38 angeschlossenen – Eingangs-Leitungen 40 verbunden werden, und dass die Ausgangs-Leitungen 39 des ersten Multiplexers 37 logisch von entsprechenden mit dem FIFO-Speicher 35 verbundenen Eingangs-Leitungen 41 getrennt werden.
  • Dies hat zur Folge, das in dem Default-Register-Satz 38 abgespeicherte Default-Werte für die o.g. Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" (insbesondere in einem Interpolation-Typ-Default-Register 38a, einem Expected-Reward-Default-Register 38b, und einem Stopping-Time-Default-Register 38c abgespeicherte Variablen-Werte) über die Multiplexer-Eingangs-Leitungen 40, und den ersten Multiplexer 37 an die Multiplexer-Ausgangs-Leitungen 39 weitergeleitet werden.
  • Als Interpolation-Type-Default-, und Expected-Reward-Default-Werte können in den entsprechenden Registern 38a, 38b z.B. die dem jeweiligen Kontext bzw. Thread zugeordneten, im o.g. Kontext-Status-Array-Speicher abgespeicherten Werte abgespeichert sein; des weiteren kann als Stopping-Time-Default-Wert im entsprechenden Register 38c z.B. – fest – der Wert „1" abgespeichert sein.
  • Wie sich aus den Ausführungen oben, und der Darstellung gemäß 4 ergibt, liegt an einer mit einem Steuer-Eingang eines zweiten Multiplexers 42 verbundenen Leitung 43 zunächst ein Signal „Stopping Time = 0" an, das dazu führt dazu, dass entsprechende Ausgangs-Leitungen 44 des zweiten Multiplexers 42 logisch mit den o.g. Ausgangs-Leitungen 39 des ersten Multiplexers 37 verbunden werden, und dass die Ausgangs-Leitungen 44 des zweiten Multiplexers 42 logisch von weiteren – im folgenden noch genauer erläuterten – Leitungen 45 getrennt werden.
  • Dies hat zur Folge, das die o.g. in dem Default-Register-Satz 38 abgespeicherten, an den Leitungen 39 anliegenden Default- Werte für die o.g. Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" an den Ausgangs-Leitungen 44 des zweiten Multiplexers 42 ausgegeben werden, und in den Register-Satz 32 geschrieben werden (insbesondere der Wert der in dem Interpolation-Typ-Default-Register 38a abgespeicherten Variablen „Default Interpolation Type" in ein erstes Register 32a, der Wert der in dem Expected-Reward-Default-Register 38b abgespeicherten Variablen „Default Expected Reward" in ein zweites Register 32b, und der Wert der in dem Stopping-Time-Default-Register 38c abgespeicherten Variablen „Default Stopping Time" in ein drittes Register 32c).
  • Wie aus 4 weiter hervorgeht, wird ein den in das Register 32a geschriebenen (Interpolation-Type-)Wert repräsentierendes Signal über eine Leitung 46, und eine Leitung 47 einem Steuer-Eingang eines dritten Multiplexers 50 zugeführt, sowie – ebenfalls über die Leitung 46, und eine Leitung 48 – einem Steuer-Eingang eines vierten Multiplexers 51.
  • Des weiteren wird – wie ebenfalls aus 4 hervorgeht – das den in das Register 32a geschriebenen (Interpolation-Type-)Wert repräsentierende, an der Leitung 46 anliegende Signal über eine erste Leitung 45a der o.g. Leitungen 45 dem zweiten Multiplexer 42 zugeführt.
  • Ein den in das Register 32b geschriebenen (Expected-Reward)Wert repräsentierendes Signal wird über eine Leitung 49 jeweils entsprechenden Eingängen entsprechender Expected-Reward-Variablen-Nachberechnungs-Einrichtungen 52a, 52b zugeführt, und jeweils entsprechenden ersten Eingängen entsprechender Thread-Index-Berechnungs-Einrichtungen 53a, 53b.
  • Des weiteren wird ein den in das Register 32c geschriebenen (Stopping-Time-)Wert repräsentierendes Signal über eine Leitung 54 jeweils entsprechenden zweiten Eingängen der entsprechenden Thread-Index-Berechnungs-Einrichtungen 53a, 53b zugeführt, und – über eine Leitung 54a – einem Eingang einer Stopping-Time-Dekrementier-Einrichtung 55.
  • Jede der Thread-Index-Berechnungs-Einrichtungen 53a, 53b berechnet mittels entsprechender Verfahren – insbesondere z.B. mittels entsprechender, herkömmlicher Gittin's-Index-Berechnungs-Verfahren –, und basierend auf dem in dem Register 32b bzw. 32c abgespeicherten Expected-Reward- und Stopping-Time-Wert den jeweils aktuellen, dem jeweiligen Thread bzw. Kontext zuzuordnenden – an der Leitung 20 auszugebenden – Thread-Index-Wert.
  • Mit Hilfe des den (Interpolation-Type-)Wert repräsentierenden, an den Leitungen 46, 48 anliegenden, und dem Steuer-Eingang des vierten Multiplexers 51 zugeführten Signals kann ausgewählt werden, welcher der von den verschiedenen Thread-Index-Berechnungs-Einrichtungen 53a, 53b – jeweils basierend auf unterschiedlichen Verfahren berechnete, und an verschiedenen Leitungen 51a, 51b ausgegebene – Thread-Index-Wert an die Leitung 20 weitergeschaltet werden soll.
  • Wie aus 4 weiter zu entnehmen ist, berechnet jede der Expected-Reward-Variablen-Nachberechnungs-Einrichtungen 52a, 52b – passend zu den jeweiligen, durch die Thread-Index-Berechnungs-Einrichtungen 53a, 53b basierend auf entsprechenden Interpolationsverfahren berechneten Thread-Index-Werten – mittels entsprechender Verfahren (insbesondere z.B. mittels entsprechender, bei herkömmlichen Gittin's-Index-Berechnungs-Verfahren angewandten Verfahren), und basierend auf dem in dem Register 32b abgespeicherten Expected-Reward-Wert jeweils entsprechende, angepasste Werte für die o.g. Expected-Reward-Variable.
  • Mit Hilfe des den (Interpolation-Type-)Wert repräsentierenden, an den Leitungen 46, 47 anliegenden, und dem Steuer-Eingang des dritten Multiplexers 50 zugeführten Signals kann ausgewählt werden, welcher der von den verschiedenen Expected-Reward-Variablen-Nachberechnungs-Einrichtungen 52a, 52b jeweils basierend auf unterschiedlichen Verfahren berechnete, und an verschiedenen Leitungen 50a, 50b ausgegebene, angepasste Expected-Reward-Variablen-Wert an eine zweite Leitung 45b der o.g. Leitungen 45, d.h. an den zweiten Multiplexer 42 weitergeschaltet werden soll.
  • Mit Hilfe der Stopping-Time-Dekrementier-Einrichtung 55 wird der dieser über die Leitung 54a jeweils zugeführte (Stopping-Time-)Wert dekrementiert (insbesondere, indem vom Stopping-Time-Wert der Wert „1" subtrahiert wird), und ein den dekrementierten Stopping-Time-Wert repräsentierendes Signal über eine Leitung 55a an eine Vergleichseinrichtung 56 weitergeleitet, und über eine dritte Leitung 45c der o.g. Leitungen 45 an den zweiten Multiplexer 42.
  • Sobald – wie oben erläutert – über die Leitungen 13, 14, 19 die entsprechenden „Interpolation Type"-, „Expected Reward"-, und „Stopping Time"-Variablen-Werte in den dem jeweils laufenden Thread bzw. Kontext zugeordneten FIFO-Speicher 35 geladen wurden, der FIFO-Speicher 35 also nicht mehr in einem „leeren" Zustand ist, wird an der Leitung 36 kein Signal „Empty" mehr ausgegeben.
  • Dies hat zur Folge, dass die o.g. Ausgangs-Leitungen 39 des ersten Multiplexers 37 dann logisch mit den entsprechenden mit dem FIFO-Speicher 35 verbundenen Eingangs-Leitungen 41 verbunden werden (und logisch von den – mit dem Default-Register-Satz 38 verbundenen – Eingangs-Leitungen 40 getrennt werden).
  • Aufgrund des bis dahin unveränderten Zustands des am Steuer-Eingang des zweiten Multiplexers 42 anliegenden Signals bleiben weiterhin die Ausgangs-Leitungen 44 des zweiten Multiplexers 42 logisch mit den o.g. Ausgangs-Leitungen 39 des ersten Multiplexers 37 verbunden, und bleiben weiterhin die Ausgangs-Leitungen 44 des zweiten Multiplexers 42 logisch von den o.g, weiteren Leitungen 45 getrennt.
  • Dies hat zur Folge, dass die o.g. in dem FIFO-Speicher abgespeicherten, von dem CPU Core 11 gelieferten Werte für die o.g. Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" über die Multiplexer 37, 42 an die Ausgangs-Leitungen 44 des zweiten Multiplexers 42 weitergeschaltet werden, und – neu – in den Register-Satz 32 geschrieben werden (insbesondere der in dem FIFO-Speicher 35 abgespeicherte Interpolation-Typ-Wert in das erste Register 32a, der in dem FIFO-Speicher 35 abgespeicherte Expected-Reward-Wert in das zweite Register 32b, und der im FIFO-Speicher 35 abgespeicherte Stopping-Time-Wert in das dritte Register 32c).
  • Auf Grundlage der geänderten, in den Registern 32b bzw. 32c abgespeicherten Expected-Reward- und Stopping-Time-Werte werden durch die o.g. Thread-Index-Berechnungs-Einrichtungen 53a, 53b jeweils entsprechend geänderte, aktualisierte Thread-Index-Werte berechnet, und einer dieser Werte – entsprechend der über den vierten Multiplexer 51 getroffenen Auswahl – als geänderter, dem jeweiligen Thread bzw. Kontext zuzuordnender Thread-Index-Wert an der Leitung 20 ausgegeben.
  • Entsprechend ähnlich werden auch durch die Expected-Reward-Variablen-Nachberechnungs-Einrichtungen 52a, 52b basierend auf dem in dem Register 32b abgespeicherten, geänderten Expected-Reward-Wert jeweils entsprechend geänderte, angepasste Expected-Reward-Variablen-Werte berechnet, und einer dieser Werte – entsprechend der über den dritten Multiplexer 50 getroffenen Auswahl – über die Leitung 45b dem zweiten Multiplexer 42 zugeführt.
  • Aufgrund der o.g. Änderung des Werts der im Register 32c abgespeicherten Stopping-Time-Variablen (insbesondere, da diese nicht mehr entsprechend dem o.g. Stopping-Time-Default-Wert = 1, bzw. nach erfolgter Dekrementierung = 0 ist) liegt an der mit dem Steuer-Eingang des zweiten Multiplexers 42 verbundenen Leitung 43 dann – zunächst – kein Signal „Stopping Time = 0" mehr an. Dies hat zur Folge, dass entsprechende Ausgangs-Leitungen 44 des zweiten Multiplexers 42 nicht mehr logisch mit den o.g. Ausgangs-Leitungen 39 des ersten Multiplexers 37 verbunden sind, sondern mit den o.g. Leitungen 45.
  • Dies hat zur Folge, dass der an der o.g. Leitung 45c anliegende – gegenüber dem an der Leitung 54a anliegenden, in dem dritten Register 32c abgespeicherte Stopping-Time-Variablen-Wert durch die Stopping-Time-Dekrementier-Einrichtung 55 entsprechend dekrementierte – Variablen-Wert über den zweiten Multiplexer 42 dem dritten Register 32c zugeführt, und dort abgespeichert wird.
  • Entsprechend ähnlich wird auch der an der o.g. Leitung 45b anliegende, von der durch den dritten Multiplexer 50 ausgewählten Expected-Reward-Variablen-Nachberechnungs-Einrichtung 52a, 52b gelieferte, angepasste Expected-Reward-Variablen-Wert über den zweiten Multiplexer 42 dem zweiten Register 32b zugeführt, und dort abgespeichert, und der an der Leitung 45a anliegende Wert der „Interpolation Type"-Variable über den Multiplexer 42 an das erste Register 32a (zurück-)geleitet, und (erneut) dort abgespeichert.
  • Auf Grundlage der – erneut – geänderten, in den Registern 32b bzw. 32c abgespeicherten Expected-Reward- und Stopping-Time-Werte werden durch die o.g. Thread-Index-Berechnungs-Einrichtungen 53a, 53b erneut jeweils entsprechend geänderte, aktualisierte Thread-Index-Werte berechnet, und einer dieser Werte – entsprechend der über den vierten Multiplexer 51 getroffenen Auswahl – als geänderter, dem jeweiligen Thread bzw. Kontext zuzuordnender Thread-Index-Wert an der Leitung 20 ausgegeben.
  • Entsprechend ähnlich werden auch – erneut – durch die Expected-Reward-Variablen-Nachberechnungs-Einrichtungen 52a, 52b basierend auf dem in dem Register 32b abgespeicherten, erneut geänderten Expected-Reward-Wert jeweils entsprechend geänderte, angepasste Expected-Reward-Variablen-Werte berechnet, usw.
  • Dabei wird – wie aus 4 hervorgeht – durch die Stopping-Time-Dekrementier-Einrichtung 55 der dieser über die Leitung 54a jeweils zugeführte (Stopping-Time-)Wert immer weiter dekrementiert (insbesondere, indem vom zuletzt geltenden Stopping-Time-Wert der Wert „1" subtrahiert wird), bis durch die Vergleichseinrichtung 56 ermittelt wird, dass der Stopping-Time-Wert den Wert Null erreicht hat.
  • Daraufhin wird von der Vergleichseinrichtung 56 (wieder) an der mit dem Steuer-Eingang des zweiten Multiplexers 42 verbundenen Leitung 43 ein Signal „Stopping Time = 0" angelegt, das dazu führt, dass die Ausgangs-Leitungen 44 des zweiten Multiplexers 42 logisch (wieder) mit den o.g. Ausgangs-Leitungen 39 des ersten Multiplexers 37 verbunden werden, und dass die Ausgangs-Leitungen 44 des zweiten Multiplexers 42 logisch (wieder) von den Leitungen 45 getrennt werden.
  • Dies hat zur Folge, das die o.g. in dem FIFO-Speicher abgespeicherten (bzw. neu abgespeicherten), von dem CPU Core 11 (ggf. neu) gelieferten Werte für die o.g. Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" über den ersten Multiplexer 37, und den zweiten Multiplexer 42 an den Register-Satz 32 weitergeleitet, und in den entsprechenden Registern 32a, 32b, 32c abgespeichert werden können.
  • Die o.g. Variable „Expected Reward" repräsentiert – entsprechend der (aus „Multi-Armed-Bandit-Problemen" bekannten) Theorie der Gittin'schen Indizes – die Güte des durch die Abarbeitung des jeweiligen Threads erreichten Erfolgs, z.B. die Grösse des nach der Abarbeitung des Threads freiwerdenden Speicherplatzes (also die jeweils zu optimierende Grösse), und die o.g. Variable „Stopping Time" einen sich aus der Theorie der Gittin'schen Indizes ergebenden (Wichtungs-)Parameter.
  • Zum Laden entsprechender Werte für die o.g. Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" in den FIFO-Speicher 35 kann durch den CPU Core 11 – wie in 2 und 4 gezeigt ist – an der Leitung 57 das o.g. Signal „Push Indication" ausgegeben werden (woraufhin die entsprechenden, an den Leitungen 13, 14, 19 anliegenden Variablen-Werte im FIFO-Speicher 35 abgespeichert werden).
  • Beispielsweise bei – z.B. bei Auftreten eines Fehlers im CPU Core 11 durchzuführenden – „Sprüngen" können mittels eines durch den CPU Core 11 an der Leitung 58 ausgegebenen Signals „Flush Indication" die bisher im FIFO-Speicher 35 gespeicherten Werte für die o.g. Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" (komplett) wieder gelöscht werden, woraufhin mittels eines an der Leitung 57 ausgegebenen Signals „Push Indication" erneut wieder – entsprechend den dann an den Leitungen 13, 14, 19 anliegenden Signalen – entsprechende Werte für die Variablen „Interpolation Type", „Expected Reward", und „Stopping Time" im FIFO-Speicher 35 abgespeichert werden können.
  • Die o.g. Thread-Index-Werte entsprechen – zur Optimierung der jeweiligen Kostenfunktion verwendeten, entsprechend der „Multi-Armed-Bandit-Theorie" berechneten – Werten (wobei bei der Lösung des Optimierungs-Problems insbesondere – wie oben angedeutet – eine Thread-Umschaltung ohne Zyklenverlust vorausgesetzt wird). Bei – geringfügiger – Verletzung dieser Bedingung ergeben sich entsprechend – in den meisten Fällen gering – von einer optimalen Lösung abweichende Werte.
  • 1
    Vergleichs-Einrichtung
    2
    Komparator-Einrichtung
    3
    Kontext-Schedule-Vorrichtung
    4
    Zwischenspeicher
    5a
    Interpolator-Einrichtung
    5b
    Interpolator-Einrichtung
    6
    Leitung
    7
    Leitung
    8
    Leitung
    10
    Mikroprozessor-System
    11
    CPU
    12
    Speicher-Steuereinrichtung
    13
    Leitung
    14
    Leitung
    15
    Mikrochip
    16
    System-Bus
    17
    Speicher-Einrichtung
    18
    Speicher-Einrichtung
    19
    Leitung
    20
    Leitung
    21
    Leitung
    22
    Leitung
    23
    Leitung
    30
    Vergleichseinrichtung
    31
    Leitung
    32
    Register-Satz
    32a
    Register
    32b
    Register
    32c
    Register
    33
    UND-Glied
    34
    UND-Glied
    35
    FIFO-Speicher
    36
    Leitung
    37
    Multiplexer
    38
    Default-Register-Satz
    38a
    Interpolation-Typ-Default-Register
    38b
    Expected-Reward-Default-Register
    38c
    Stopping-Time-Default-Register
    39
    Ausgangs-Leitungen
    40
    Eingangs-Leitungen
    41
    Eingangs-Leitungen
    42
    Multiplexer
    43
    Leitung
    44
    Ausgangs-Leitungen
    45
    Leitungen
    45a
    Leitung
    45b
    Leitung
    45c
    Leitung
    46
    Leitung
    47
    Leitung
    48
    Leitung
    49
    Leitung
    50
    Multiplexer
    50a
    Leitung
    50b
    Leitung
    51
    Multiplexer
    51a
    Leitung
    51b
    Leitung
    52a
    Nachberechnungs-Einrichtung
    52b
    Nachberechnungs-Einrichtung
    52c
    Nachberechnungs-Einrichtung
    53a
    Thread-Index-Berechnungs-Einrichtung
    53b
    Thread-Index-Berechnungs-Einrichtung
    53c
    Thread-Index-Berechnungs-Einrichtung
    54
    Leitung
    54a
    Leitung
    55
    Stopping-Time-Dekrementier-Einrichtung
    55a
    Leitung
    56
    Vergleichseinrichtung
    57
    Leitung
    58
    Leitung

Claims (15)

  1. Scheduling-Verfahren, insbesondere Kontext-Scheduling-Verfahren, welches die Schritte aufweist: – Durchführen eines Schedulings für von einem Multithreaded (MT) – Prozessor (11) abzuarbeitende Threads dadurch gekennzeichnet, dass das Scheduling in Abhängigkeit von den Threads zugeordneten Index-Variablen durchgeführt wird.
  2. Scheduling-Verfahren nach Anspruch 1, wobei derjenige Thread als durch den Prozessor (11) abzuarbeitender Thread ausgewählt wird, dessen Index-Variable den höchsten Wert aufweist.
  3. Scheduling-Verfahren nach Anspruch 1, wobei derjenige Thread als durch den Prozessor (11) abzuarbeitender Thread ausgewählt wird, dessen Index-Variable den niedrigsten Wert aufweist.
  4. Scheduling-Verfahren nach Anspruch 2 oder 3, wobei die Abarbeitung des ausgewählten Threads durch den Prozessor (11) unterbrochen wird, wenn die Index-Variable des ausgewählten Threads nicht mehr den höchsten, oder den niedrigsten Wert aufweist.
  5. Scheduling-Verfahren nach Anspruch 4, wobei statt dem ausgewählten Thread, dessen Abarbeitung unterbrochen wurde, ein neuer Thread als durch den Prozessor (11) abzuarbeitender Thread ausgewählt wird, insbesondere ein neuer Thread, dessen Index-Variable dann den höchsten, oder den niedrigsten Wert aufweist.
  6. Scheduling-Verfahren nach einem der vorhergehenden Ansprüche, welches zusätzlich den Schritt aufweist: Ändern des Werts der Index-Variable eines im aktiven Zustand befindlichen Threads während des aktiven Thread-Zustands, insbesondere Ändern des Werts der Index-Variable des jeweils abgearbeiteten Threads im Verlauf der Thread-Abarbeitung.
  7. Scheduling-Verfahren nach Anspruch 6, wobei zur Änderung des Werts der Index-Variable eine Hardware-Schaltung (5a, 52a, 53a), insbesondere eine Hardware-Interpolator-Schaltung (52a, 53a) verwendet wird.
  8. Scheduling-Verfahren nach einem der vorhergehenden Ansprüche, wobei zur Ermittlung der Index-Variable des jeweils abgearbeiteten Threads eine die Güte des durch die Abarbeitung des Threads erreichten Erfolgs repräsentierende Variable (expected reward) verwendet wird.
  9. Scheduling-Verfahren nach einem der vorhergehenden Ansprüche, wobei zur Ermittlung der Index-Variable des jeweils abgearbeiteten Threads eine die Stop-Zeit des Threads repräsentierende Variable (stopping time) verwendet wird.
  10. Scheduling-Verfahren nach einem der vorhergehenden Ansprüche, wobei ein Thread-Wechsel beim Prozessor (11) keinen oder nur einen für die Anwendung vernachlässigbaren Zyklenverlust zur Folge hat.
  11. Einrichtung (3) zur Verwendung bei einem Scheduling-Verfahren, insbesondere einem Verfahren nach einem der Ansprüche 1 bis 9, bei welchem ein Scheduling für von einem Multithreaded (MT) – Prozessor (11) abzuarbeitende Threads durchgeführt wird dadurch gekennzeichnet, dass die Einrichtung (3) eine Vorrichtung (1) aufweist zum Vergleichen von den Threads zugeordneten Index-Variablen.
  12. Einrichtung (3) nach Anspruch 11, bei welcher die Vergleichs-Vorrichtung (1) so ausgestaltet und eingerichtet ist, dass mit der Vergleichs-Vorrichtung (1) derjenige Thread ermittelt wird, dessen Index-Variable den höchsten Wert aufweist.
  13. Einrichtung (3) nach Anspruch 11, bei welcher die Vergleichs-Vorrichtung (1) so ausgestaltet und eingerichtet ist, dass mit der Vergleichs-Vorrichtung (1) derjenige Thread ermittelt wird, dessen Index-Variable den niedrigsten Wert aufweist.
  14. Einrichtung (3) nach Anspruch 12 oder 13, welche eine Vorrichtung (2, 4) aufweist zum Erzeugen eines Thread-Wechsel-Signals (Context-Switch-Indication), wenn durch die Vergleichs-Vorrichtung (1) ermittelt wird, dass ein Wechsel beim Thread mit höchstem oder niedrigstem Index-Variablen-Wert stattfindet.
  15. Einrichtung (3) nach einem der Ansprüche 12 bis 14, welche eine Hardware-Schaltung (5a, 52a, 53a), insbesondere eine Hardware-Interpolator-Schaltung (52a, 53a) aufweist zum Ändern des Werts der Index-Variable eines im aktiven Zustand befindlichen Threads.
DE102004061339A 2004-12-20 2004-12-20 Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren Ceased DE102004061339A1 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102004061339A DE102004061339A1 (de) 2004-12-20 2004-12-20 Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren
DE202004021684U DE202004021684U1 (de) 2004-12-20 2004-12-20 Einrichtungen und Vorrichtungen zur Verwendung bei einem Scheduling
US11/305,336 US7793296B2 (en) 2004-12-20 2005-12-19 System and method for scheduling a multi-threaded processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102004061339A DE102004061339A1 (de) 2004-12-20 2004-12-20 Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren

Publications (1)

Publication Number Publication Date
DE102004061339A1 true DE102004061339A1 (de) 2006-06-29

Family

ID=36580244

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202004021684U Expired - Lifetime DE202004021684U1 (de) 2004-12-20 2004-12-20 Einrichtungen und Vorrichtungen zur Verwendung bei einem Scheduling
DE102004061339A Ceased DE102004061339A1 (de) 2004-12-20 2004-12-20 Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE202004021684U Expired - Lifetime DE202004021684U1 (de) 2004-12-20 2004-12-20 Einrichtungen und Vorrichtungen zur Verwendung bei einem Scheduling

Country Status (2)

Country Link
US (1) US7793296B2 (de)
DE (2) DE202004021684U1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111931456A (zh) * 2020-08-13 2020-11-13 华中科技大学 一种基于模板序列的pcb电镀混流线任务优化排序方法

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7162615B1 (en) * 2000-06-12 2007-01-09 Mips Technologies, Inc. Data transfer bus communication using single request to perform command and return data to destination indicated in context to allow thread context switch
US20080168130A1 (en) * 2007-01-09 2008-07-10 Wen-Tzer Thomas Chen Method and system for determining whether to send a synchronous or asynchronous resource request
US20080168125A1 (en) * 2007-01-09 2008-07-10 Wen-Tzer Thomas Chen Method and system for prioritizing requests
US20080165800A1 (en) * 2007-01-09 2008-07-10 Chen Wen-Tzer T Method and apparatus to provide dynamic cost of context switch to application for performance optimization
US8561072B2 (en) * 2008-05-16 2013-10-15 Microsoft Corporation Scheduling collections in a scheduler
KR101014028B1 (ko) * 2008-11-26 2011-02-14 한양대학교 산학협력단 고속 블록 입출력을 위한 적응성 문맥전환 방법 및 장치
WO2013147878A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Prediction-based thread selection in a multithreading processor
US9098343B2 (en) 2012-12-06 2015-08-04 Xerox Corporation Method and system for managing allocation of tasks to be crowdsourced
GB2521151B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
GB2521155B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
US11144226B2 (en) 2019-04-11 2021-10-12 Samsung Electronics Co., Ltd. Intelligent path selection and load balancing
US11216190B2 (en) 2019-06-10 2022-01-04 Samsung Electronics Co., Ltd. Systems and methods for I/O transmissions in queue pair-based NVMeoF initiator-target system
US11240294B2 (en) * 2019-08-23 2022-02-01 Samsung Electronics Co., Ltd. Systems and methods for spike detection and load balancing resource management

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6061709A (en) * 1998-07-31 2000-05-09 Integrated Systems Design Center, Inc. Integrated hardware and software task control executive

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004072796A2 (en) * 2003-02-05 2004-08-26 Arizona Board Of Regents Reconfigurable processing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6061709A (en) * 1998-07-31 2000-05-09 Integrated Systems Design Center, Inc. Integrated hardware and software task control executive

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111931456A (zh) * 2020-08-13 2020-11-13 华中科技大学 一种基于模板序列的pcb电镀混流线任务优化排序方法
CN111931456B (zh) * 2020-08-13 2023-12-12 华中科技大学 一种基于模板序列的pcb电镀混流线任务优化排序方法

Also Published As

Publication number Publication date
US7793296B2 (en) 2010-09-07
US20060161924A1 (en) 2006-07-20
DE202004021684U1 (de) 2010-04-29

Similar Documents

Publication Publication Date Title
DE60224774T2 (de) Datenverarbeitungssystem mit Lese-, Änderungs- und Schreibeinheit
DE102004061339A1 (de) Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren
DE102010028259A1 (de) Mikrocontroller mit einer Recheneinheit und einer Logikschaltung sowie Verfahrung zur Durchführung von Rechnungen durch einen Mikrocontroller für eine Regelung oder eine Steuerung in einem Fahrzeug
DE102007060806A1 (de) Rangbasierter Speicher-Lese/Schreib-Mikrobefehls-Scheduler
DE10393803T5 (de) Verfahren und Vorrichtung zum Bestimmen einer Seitenverwaltungsimplementierung bei dynamischem Speicher mit wahlfreiem Zugriff
EP1230590B1 (de) Prozessorsystem
DE4134392C2 (de) Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung
EP0799441B1 (de) Verfahren zur steuerung von technischen vorgängen
DE2611975A1 (de) Dv-system mit einer einrichtung zur zuordnung von prozessen zu einem prozessor auf einer prioritaetsbasis
DE112006000514T5 (de) CPU-Architektur mit einzelnem Zyklus und geringer Leistungsaufnahme
DE10136724A1 (de) Ablaufverfolgungssteuerschaltung
EP3080668B1 (de) Verfahren zur beeinflussung eines steuerprogramms eines steuergeräts
DE102004059972B4 (de) Thread-Scheduling-Verfahren, und Thread-List-Scheduler-Vorrichtung
DE10213860A1 (de) Programmierbare Steuerung
DE2759120A1 (de) Prozessor fuer datenverarbeitungssysteme
WO2011120814A1 (de) Geteilte zentrale verarbeitung von daten
EP1548603B1 (de) Verfahren und Vorrichtung zum Steuern eines Speicherzugriffs
DE10228778B4 (de) Hardware-Verfahren zum Implementieren von atomischen Semaphoroperationen unter Verwendung von Codemakros
DE102011083468A1 (de) Schaltungsanordnung zur Ablaufplanung bei einer Datenverarbeitung
DE112020005072T5 (de) Datenverarbeitungseinrichtung
DE69938017T2 (de) Datenprozessor mit robuster Unterbrechungsverzweigung und Betriebsverfahren dazu
DE102016224206A1 (de) Fahrzeugsteuervorrichtung
DE10028064A1 (de) Computersystem mit einer ROM-Korrektureinheit
DE102021101309A1 (de) Elektronische steuervorrichtung
WO2007048675A1 (de) Verfahren zum implementieren von software-timern und datenverarbeitungssystem

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8131 Rejection