-
Hintergrund der Erfindung
-
Die
vorliegende Erfindung betrifft Verfahren und Vorrichtungen zur Datenverarbeitung.
-
Zur
Beschleunigung der Datenverarbeitung in Computersystemen werden
verschiedene Ansätze verfolgt.
Ein Ansatz ist das sogenannte Multithreading, bei welchem auf einem
Prozessor zwischen der Verarbeitung von zwei oder mehr sogenannten Threads
in kurzen Abständen
umgeschaltet wird, anstatt die Threads sequenziell zu verarbeiten.
Beispiele für
derartiges Multithreading sind das sogenannte coarse-grained-multithreading oder
das sogenannte fine-grained-multithreading.
Hierdurch können
Zeiten, in welchen der Prozessor oder andere Komponenten aufgrund
von Wartezeiten nicht arbeiten (sogenannte Prozessor Stall Zeiträume) verringert
werden und somit Ressourcen effektiver genutzt werden.
-
Durch
die quasiparallele Verarbeitung mehrerer Threads auf einem Prozessor
ist es jedoch schwierig, vorauszusagen, wie lange es dauert, bis die
Verarbeitung eines bestimmten Threads abgeschlossen ist. Dies kann
beispielsweise bei Echtzeitanwendungen problematisch sein.
-
Ein ähnliches
Problem kann bei Prozessoren auftreten, welche meherere Prozessorkerne
zur Verarbeitung von Daten aufweisen, wobei sich die Prozessorkerne
Elemente wie z. B. Cachespeicher (Level 1 Cache, Level 2 Cache)
teilen. Auch hier kann die Dauer eines Prozesses auf einem der Prozessorkerne
davon abhängen,
wie viel Zugriffszeit ein anderer Prozess auf einem anderen Prozessorkern
auf die genannten externen Elemente benötigt, wodurch die für die Abarbeitung
des Prozesses benötigte
Zeit schwerer vorhersehbar ist. Auch dies kann bei Echtzeitanwendungen,
bei welchem ein Prozess zu einem bestimmten Zeitpunkt beendet sein
muss, problematisch sein. Ähnliches
kann allgemein für
Mehrprozessorsysteme gelten.
-
Es
gibt daher ein Bedürfnis
nach Verfahren und Vorrichtungen zur Datenverarbeitung, wobei Echtzeitdatenverarbeitungsvorgänge in Kombination mit
Verfahren und Vorrichtungen zur parallelen Datenverarbeitung wie
Multithreading oder Mehrprozessorsystemen mit höherer Zuverlässigkeit
ausführbar sind.
-
Kurzzusammenfassung der Erfindung
-
Die
Erfindung stellt Verfahren nach Anspruch 1 oder 8 und Vorrichtungen
nach Anspruch 12 oder 15 bereit. Die abhängigen Ansprüche definieren
weitere Ausführungsbeispiele.
-
Ein
Ausführungsbeispiel
eines erfindungsgemäßen Verfahrens
umfasst: Starten eines Datenverarbeitungsvorgangs, wobei der Datenverarbeitungsvorgang
eine vorgegebenen Maximaldauer aufweist, Überprüfen des Fortschritts des Datenverarbeitungsvorgangs
zu einem vorgegebenen Zeitpunkt vor dem Ablauf der Maximaldauer,
und Ändern
einer Priorität des
Datenverarbeitungsvorgangs in Abhängigkeit von dem Fortschritt
des Datenverarbeitungsvorgangs.
-
Kurze Beschreibung der Zeichnung
-
Die
Erfindung wird nachfolgend anhand von beispielhaften Ausführungsbeispielen
unter Bezugnahme auf die beigefügte
Zeichnung näher
erläutert. Es
zeigen:
-
1 ein
Diagramm zur Veranschaulichung einer Möglichkeit des Multithreadings
in Ausführungsbeispielen
der Erfindung,
-
2 ein
Diagramm zur Veranschaulichung eines Ausführungsbeispiels eines erfindungsgemäßen Verfahrens,
-
3 ein
Blockdiagramm eines Ausführungsbeispiels
einer erfindungsgemäßen Vorrichtung,
-
4 ein
Blockdiagramm eines weiteren Ausführungsbeispiels einer erfindungsgemäßen Vorrichtung,
-
5 ein
Blockdiagramm eines anderen Ausführungsbeispiels
einer erfindungsgemäßen Vorrichtung,
-
6 ein
Blockdiagramm eines weiteren Ausführungsbeispiels einer erfindungsgemäßen Vorrichtung,
-
7 ein
Blockdiagramm eines anderen Ausführungsbeispiels
einer erfindungsgemäßen Vorrichtung,
und
-
8 ein
Blockdiagramm eines weiteren Ausführungsbeispiels einer erfindungsgemäßen Vorrichtung.
-
Detaillierte Beschreibung
der Erfindung
-
Im
Folgenden werden Ausführungsbeispiele der
Erfindung detailliert erläutert.
Zuvor werden einige verwendete Begriffe definiert:
Der Begriff „Datenverarbeitungsvorgang" umfasst im Rahmen
dieser Anmeldung jede Art von Datenverarbeitungsvorgang, beispielsweise
einen Thread in einem Multithreadingsystem, einen auf einem Prozessor
oder Prozessorkern ablaufenden Datenverarbeitungsprozess oder Task,
beispielsweise ein Task eines Multitaskingsystems, oder Zugriffe
auf Elemente eines Datenverarbeitungssystems wie Speicher oder Bussysteme.
-
Der
Begriff „parallel" bzw. „parallele
Verarbeitung" in
Bezug auf Datenverarbeitungsvorgänge
umfasst sowohl tatsächlich
parallele Verarbeitung mit mehreren Prozessorkernen oder Prozessoren
als auch quasiparallele Verarbeitung wie beispielsweise beim Multithreading,
bei dem in schneller Folge zwischen mehreren Threads umgeschaltet
wird.
-
Eine „Priorität" eines Datenverarbeitungsvorgangs
gibt bei der parallelen Verarbeitung von mehreren Datenverarbeitungsvorgängen an,
welche Datenverarbeitungsvorgänge
bevorzugt gegenüber
anderen Datenverarbeitungsvorgängen
bearbeitet werden. Eine hohe Priorität bedeutet dabei eine bevorzugte
Verarbeitung gegenüber
einer niedrigen Priorität.
Es ist zu bemerken, dass, wenn die Priorität beispielsweise mit Ziffern
oder Zahlen ausgedrückt
wird, je nach System beispielsweise auch eine niedrige Ziffer oder
Zahl eine hohe Priorität
in diesem Sinn und eine hohe Ziffer oder Zahl eine niedrige Priorität bedeuten
kann.
-
„Datenverarbeitungssystem" bezieht sich im Rahmen
dieser Anmeldung auf jede Art von Datenverarbeitungssysteme, beispielsweise
Computer wie Heimcomputer oder Großrechner, aber auch Rechner
oder Logikschaltungen, welche z. B. auf Basis von anwendungsspezifischen
Bausteinen (ASICS) aufgebaut sind.
-
Im
Folgenden werden zunächst
Ausführungsbeispiele
der Erfindung beschrieben, bei welchen beispielsweise auf einem
sogenannten Multithreadingprozessor mehrere Threads unter Verwendung
von Multithreading ausgeführt
werden. Ein derartiges Multithreading ist in beispielhafter Weise
in 1 dargestellt.
-
In 1 ist
allgemein mit Bezugszeichen 13 gekennzeichnet schematisch
die Verarbeitung von zwei Threads in Zeitschritten dargestellt,
wobei jeder Zeitschritt durch ein Kästchen repräsentiert ist. Ein derartiger
Zeitschritt kann ein oder mehrere Taktzyklen eines entsprechenden
Multithreadingprozessors umfassen.
-
Bei
dem dargestellten Beispiel werden zwei Threads ausgeführt, wobei
ein erster Thread mit dem Bezugszeichen 11 und ein zweiter
Thread mit dem Bezugszeichen 12 gekennzeichnet ist. Bei
dem dargestellten Beispiel werden die Threads 11, 12 zu
einem Zeitpunkt gestartet, welcher durch eine senkrechte Linie 15 gekennzeichnet
ist.
-
Mit
Bezugszeichen 10 sind Zeitschritte gekennzeichnet, in welchem
der Prozessor weder den ersten Thread 11 noch den zweiten
Thread 12 ausführt,
beispielsweise weil auf Ereignisse wie Speicherzugriffe, Ergebnisse
von anderen Einheiten, Eingaben und dergleichen gewartet werden
muss (sogenannte Stall-Zeiträume).
-
Wie
in 1 zu sehen wird beim Multithreading zwischen den
Threads 11 und 12 umgeschaltet. Das Umschalten
kann bei Ausführungsbeispielen
der Erfindung beispielsweise abhängig
von einer Priorität der
Threads und/oder abhängig
von einer Zeit seit dem letzten Ausführen des Threads geschehen.
Haben zwei Threads die gleiche Priorität, können sie beispielsweise abwechselnd
ausgeführt
werden. Hat ein Thread eine höhere
Priorität
als ein anderer Thread, wird er häufiger als der andere Thread
ausgeführt.
Beispielsweise kann jedem Thread ein Prioritätswert zugewiesen sein, und
zu diesem Prioritätswert
kann die Zeit seit der letzten Ausführung des Threads addiert werden.
Der Thread mit dem höheren
Gesamtwert wird dann in dem nächsten
Zeitschritt ausgeführt.
Beim Umschalten kann zudem berücksichtigt
werden, ob für
die Ausführung
eines Threads benötigte
Ressourcen zur Verfügung
stehen.
-
Bei
dem in 15 gezeigten Beispiel ist beispielsweise
Thread 11 ein Echtzeitthread, welcher innerhalb eines Zeitraums
Ta, d. h. bis zu dem durch eine senkrechte gestrichelte Linie 17 gekennzeichneten
Zeitpunkt, beendet sein muss, um die Echtzeitverarbeitung zu gewährleisten.
Bei dem dargestellten Beispiel ist der Thread 11 nach einer
Zeit T1, d. h. bis zu einem Zeitpunkt 16, welcher vor dem
Zeitpunkt 17 liegt, beendet, so dass keine Echtzeitverletzung
auftritt.
-
Als
Vergleich ist allgemein mit 50 bezeichnet in der unteren
Hälfte
der 5 eine sequentielle Verarbeitung der Threads 11, 12 dargestellt,
wobei zunächst
der Thread 11 und dann der Thread 12 ausgeführt wird.
Die Zeit T1' zur
Ausführung
des Threads 11 ist hier kürzer, allerdings werden innerhalb
des Zeitraums Ta aufgrund von mehr Stall-Zeiträumen 10 weniger Schritte
des Threads 12 ausgeführt,
so dass bei dem dargestellten Beispiel die sequentielle Verarbeitung
länger
dauert als das Multithreading.
-
Zu
bemerken ist, dass zur Vereinfachung in 1 lediglich
zwei Threads dargestellt wurden. Derartiges Multithreading ist jedoch
auch mit mehr als zwei Threads, zwischen denen umgeschaltet wird,
möglich.
-
Bei
dem Beispiel von 1 ist die Zeit T1 zur Ausführung des
Threads 11 auch von dem Thread 12 oder allgemein
von anderen Threads abhängig,
so dass abhängig
von der Ausführung
anderer Threads ohne weitere Maßnahmen
die Zeit T1 auch die Zeit Ta übersteigen
kann, so dass eine Echtzeitverletzung auftritt.
-
In 2 ist
ein Diagramm zur Veranschaulichung eines Ausführungsbeispiels eines erfindungsgemäßen Verfahrens,
welches auf derartigem Multithreading basiert, schematisch dargestellt.
Elemente, welche Elementen der 1 entsprechen,
sind mit den gleichen Bezugszeichen wie in 1 gekennzeichnet.
-
Bei
dem in 2 veranschaulichten Ausführungsbeispiel des erfindungsgemäßen Verfahrens wird
bei der Ausführung
eines Echtzeitthreads, welcher zur Vermeidung von Echtzeitverletzungen
innerhalb eines Zeitraums Ta abzuarbeiten ist, nach einer Zeit Tw,
Tw < Ta, der Fortschritt des
Threads überprüft. Bei
einem Ausführungsbeispiel
wird dabei beispielsweise überprüft, ob eine
vorgegebene Zahl von Instruktionen oder Programmschritten des Echtzeitthreads
abgearbeitet sind. Wenn dies nicht der Fall ist, wird die Priorität des Echtzeitthreads
erhöht,
so dass dieser bevorzugt ausgeführt
wird. Dieser Vorgang ist in 2 beispielhaft
dargestellt. Thread 11 ist dabei ein Echtzeitthread, welcher
zu einem Zeitpunkt 15 gestartet wird und bis zu einem Zeitpunkt 17 innerhalb
einer Zeit Ta abzuarbeiten ist. Der Thread 11 benötigt zu
seiner Ausführung
dabei 6 jeweils durch Kästchen
gekennzeichnete Zeitschritte. Bei dem dargestellten Beispiel entspricht
die Zeit Ta dreizehn derartigen Zeitschritten.
-
Parallel
zu dem Thread 11 wird wie bereits unter Bezugnahme auf 1 erläutert ein
Thread 12 ausgeführt.
Bei dem Beispiel entspricht die vorgegebene Zeit Tw, nach welcher
der Fortschritt des Echtzeitthreads überprüft wird, zehn Zeitschritten.
Der Fortschritt des Threads 11 wird also zu dem mit Pfeil 14 gekennzeichneten
Zeitpunkt überprüft.
-
Bei
dem dargestellten Beispiel wird nach der Zeitdauer Tw beispielsweise überprüft, ob bereits eine
Anzahl von Instruktionen des Tasks 11 ausgeführt sind,
welche fünf
Zeitschritten entsprechen. Da bei dem dargestellten Beispiel zu
diesem Zeitpunkt erst vier Zeitschritte des Task 11 ausgeführt wurden, wird
die Priorität
des Threads 11 erhöht,
so dass nach dem durch den Pfeil 14 gekennzeichneten Zeitpunkt
der Thread 11 wie dargestellt bevorzugt ausgeführt wird.
Hiermit wird erreicht, dass der Thread 11 zum Zeitpunkt 16,
welcher in diesem Fall dem Zeitpunkt 17 entspricht, vollständig abgearbeitet
ist, so dass die vorgegebene maximale Bearbeitungszeit Ta eingehalten
wird und keine Echtzeitverletzung auftritt.
-
Die
unter Bezugnahme auf 2 gegebenen Zahlenbeispiele
für die
Zeiten Ta, Tw sowie für die
Anzahl von Instruktionen, welche nach Ablauf von Tw abgearbeitet
sein müssen,
sind selbstverständlich
lediglich als veranschaulichendes Beispiel zu verstehen und können insbesondere
in Abhängigkeit von
den jeweils betrachteten Threads gewählt werden.
-
Bei
dem oben unter Bezugnahme auf 2 erläuterten
Ausführungsbeispiel
wird der Fortschritt eines Threads nach einer Zeit Tw nach Start
des Threads überprüft. Bei
einem anderen Ausführungsbeispiel
kann eine derartige Überprüfung zu
mehreren Zeitpunkten geschehen. Bei noch einem anderen Ausführungsbeispiel
können
die Zeitpunkte, zu welchen eine Überprüfung stattfindet,
in Abhängigkeit von
dem spätesten
gestatteten Ende des Threads, d. h. dem Ablauf der Zeit Ta bestimmt
werden, beispielsweise eine vorgegebene Anzahl von Zeitschritten
vor dem Zeitpunkt 17, welcher in Figur den Ablauf der Zeit
Ta kennzeichnet.
-
In 3 ist
ein Blockdiagramm eines Ausführungsbeispiels
einer erfindungsgemäßen Vorrichtung
dargestellt, mit welcher beispielsweise das oben unter Bezugnahme
auf 2 erläuterte
Ausführungsbeispiel
eines erfindungsgemäßen Verfahrens, aber
auch andere erfindungsgemäße Verfahren
realisiert werden können.
Das in 3 dargestellte Ausführungsbeispiel stellt dabei
einen Teil eines Datenverarbeitungssystems dar, bei welchem Komponenten über einen
Bus 20 verbunden sind. Die in 3 dargestellte
Vorrichtung umfasst einen Multithreadingprozessor 22, eine
Prioritätseinheit 21,
einen Instruktionszähler 23,
eine Interrupteineheit 24 und einen Timer 25,
welche jeweils über
den Bus kommunizieren. Weiterhin kann bei dem dargestellten Ausführungsbeispiel
wie durch Pfeile veranschaulicht der Timer 25 direkt mit
der Interrupteinheit 24, die Interrupteinheit 24 direkt
mit dem Multithreadingprozessor 23 und die Prioritätseinheit 21 ebenfalls
direkt, d. h. ohne den Bus 20 zu benutzen, mit dem Multithreadingprozessor 22 kommunizieren.
Ein Datenverarbeitunssystem, welches die in 3 dargestellte Vorrichtung
umfasst, kann bei einem Ausführungsbeispiel
weitere (nicht dargestellte) Komponenten wie Speicher, Schnittstellen
und dergleichen umfassen, welche bei einem Ausführungsbeispiel ebenfalls über den
Bus 20 kommunizieren.
-
Auf
dem Multithreadingprozessor 22 können zwei oder mehr Threads
parallel verarbeitet werden, wie dies unter Bezugnahme auf 1 bereits
erläutert
wurde. Dabei können
verschiedene Arten des Multithreadings wie beispielsweise coarse-grained-multithreading,
fine-grained-multithreading oder simultaneous multithreading zum
Einsatz kommen. Der Multithreadingprozessor 22 weist den
integrierten Instruktionszähler 23 auf,
welcher zählt,
wie viele Instrutionen eines Threads bereits abgearbeitet sind.
-
Die
Abfolge der Bearbeitung der Threads (scheduling) wird bei dem Ausführungsbeispiel
in Abhängigkeit
von Prioritäten
der einzelnen Threads durch die Prioritätseinheit 21 gesteuert.
-
Bei
dem Ausführungsbeispiel
der 3 wird beim Start eines Echtzeitthreads der Timer 25 gestartet.
Nach Ablauf einer vorgegebenen Zeit, beispielsweise der Zeit Tw
aus 2, steuert der Timer 25 die Interrupteinheit 24 an,
einen Interrupt an den Multhithreadingprozessor 22 auszulösen. In
einer entsprechenden Interruptroutine (Interrupthandler) wird dann der
Wert des Instruktionszählers
für den
Echtzeitthread mit einem vorgegebenen Wert von Instruktionen verglichen.
Wenn die Anzahl der bereits abgearbeiteten Instruktionen kleiner
als der vorgegebene Wert ist, wird die Priorität des Echtzeitthreads erhöht, indem
der Multithreadingprozessor 22 der Prioritätseinheit 22 einen
entsprechend höheren
Wert mitteilt.
-
Der
Instruktionszähler 23 kann
dabei ein bereits in dem Multithreadingprozessor 22 ohnehin
vorhin vorhandener Instruktionszähler
sein. Bei einem anderen Ausführungsbeispiel
ist der Instruktionszähler
als Programmroutine realisiert, welcher mittels eines in dem Mulithreadingprozessor 22 vorhandenen Programmzählers (program
counter) die Anzahl der Instruktionen berechnet. Bei wieder einem
anderen Ausführungsbeispiel
kann der Instruktionszähler 23 vollständig als
Programmroutine implementiert sein.
-
In 4 ist
ein Blockdiagramm eines weiteren Ausführungsbeispiels einer erfindungsgemäßen Vorrichtung
dargestellt. Elemente der Vorrichtung von 4, welchen
Elemente der 3 entsprechen, sind mit den
gleichen Bezugszeichen gekennzeichnet.
-
Die
in 4 dargestellte Vorrichtung umfasst einen Bus 20,
eine Prioritätseinheit 21,
einen Multithreadingprozessor 22 und einen Instruktionszähler 23,
welche den entsprechenden Elementen aus 3 entsprechen
und daher nicht erneut beschrieben werden. Des Weiteren umfasst
die in 4 dargestellte Vorrichtung einen Multithreadingüberwachungstimer 30.
Der Multithreadingüberwachungstimer 30 weist
einen Speicher 31 auf, um einen Wert der einem Thread,
z. B. einem Echtzeitthread, zugeordneten Zeit Tw, nach der der Fortschritt
des Threads überprüft wird,
zu speichern, und einen Speicher 32, um einen Vergleichswert
X zu speichern, welcher den bereits erwähnten vorgegebenen Wert, d.
h. der Anzahl der Instruktionen, welche bis zur Zeit Tw abgearbeitet
sein sollen, entspricht. Die Speicher 31 und 32 können bei
einem Ausführungsbeispiel
als gemeinsamer Speicher realisiert sein. Bei noch einem anderen
Ausführungsbeispiel
können
diese Werte in einem (nicht dargestellten) allgemeinen Speicher
gespeichert sein, auf welchen der Multithreadingüberwachungstimer Zugriff hat.
-
Der
Multithreadingüberwachungstimer
wird bei dem Ausführungsbeispiel
der 4 beim Start eines Echtzeitthreads gestartet und
greift nach Ablauf der Zeit Tw auf den Instruktionszähler 23 zu,
um die Anzahl der abgearbeiteten Instruktionen des Threads mit dem
Vegleichswert X zu vergleichen. Ist die Anzahl der abgearbeiteten
Instruktionen kleiner als X, schreibt bei der Vorrichtung aus 4 der
Multithreadingüberwachungstimer 30 direkt
eine höhere
Priorität
für den
Thread auf die Prioritätseinheit 21,
so dass die Priorität
des Echtzeitthreads erhöht
wird und der Thread somit bevorzugt abgearbeitet wird.
-
Bei
den Ausführungsbeispielen
der 3 und 4 wird jeweils ein einzelner
Thread, z. B. ein Echtzeitthread, behandelt. Selbstverständlich kann statt
eines Echtzeitthreads auch ein anderer Thread, welcher bevorzugt
innerhalb einer gewissen Zeitdauer abgearbeitet werden soll, behandelt
werden. Bei einem anderen Ausführungsbeispiel
werden mehrere Threads, beispielsweise Echtzeitthreads, überwacht. Hierzu
können
beispielsweise bei einem aus dem Ausführungsbeispiel von 4 basierenden
Ausführungsbeispiel
in dem Speicher 31 für
jeden Thread eine Zeit Tw und in dem Speicher 32 für jeden
Thread einen Vergleichswert X abgelegt werden, wobei die einzelnen
Zeiten Tw bzw. die einzelnen Vergleichswerte X gleich oder teilweise
oder ganz unterschiedlich sein können.
-
Bei
einem anderen Ausführungsbeispiel
werden zusätzlich
oder alternativ für
einen einzelnen Thread mehrere Zeiten Tw und entsprechend mehrere
Vergleichswerte X gespeichert, so dass der Fortschritt des Threads
zu mehreren Zeiten Tw überprüft wird
und abhängig
von einem Vergleich der abgearbeiteten Instruktionen mit dem jeweiligen
Wert X die Priorität
erhöht
wird.
-
Bei
noch einem anderen Ausführungsbeispiel
wird zusätzlich
oder alternativ für
jede Zeit Tw ein Vergleichswert Y vorgegeben, welcher beispielsweise
bei einem auf dem Ausführungsbeispiel
der 4 basierenden Ausführungsbeispiel ebenfalls in dem
Speicher 32 gespeichert wird. Bei diesem Ausführungsbeispiel
wird, wenn die Anzahl der abgearbeiteten Instruktionen des Threads
zum Zeitpunkt Tw den Wert Y übersteigt,
die Priorität
des Threads erniedrigt. Bei einem Ausführungsbeispiel ist dabei für den jeweiligen
Wert Tw Y größer als
X, wobei bei einem anderen Ausführungsbeispiel
Y auch gleich X kann.
-
Wie
unter Bezugnahme auf 4 erläutert, steuert die Prioritätseinheit 21 die
Abfolge bzw. Auswahl der Bearbeitung der Threads auf dem Multithreadingprozessor 22.
Bei einem anderen Ausführungsbeispiel
kann die Prioritätseinheit 21 zusätzlich oder
alternativ Zugriffe auf weitere Einheiten, beispielsweise einem
Cachespeicher des Multithreadingprozessors 22 oder einen
externen Speicher regeln. Beispielsweise kann für einen Thread niedriger Priorität ein Bereich
eines Cachespeichers gesperrt werden, so dass Threads höherer Priorität, welche auf
den gesamten Cachespeicher Zugriff haben, bevorzugt werden.
-
In 5 ist
ein weiteres Ausführungsbeispiel einer
erfindungsgemäßen Vorrichtung
dargestellt, welche wie die Ausführungsbeispiele
von 3 und 4 als Teil eines Datenverarbeitungssystems
implementiert sein kann.
-
Das
in 5 dargestellte Ausführungsbeispiel ist ein Mehrprozessorsystem
umfassend einen ersten Prozessor 41 und einen zweiten Prozessor 43. Andere
Ausführungsbeispiele
können
auch mehr als zwei Prozessoren umfassen. Dem ersten Prozessor 41 ist
ein erster Instruktionszähler 42 zugeordnet, und
dem zweiten Prozessor 43 ist ein zweiter Instruktionszähler 44 zugeordnet.
Die Instruktionszähler 42, 44 können jeweils
wie bereits unter Bezugnahme auf 3 für den Instruktionszähler 23 erläutert implementiert
sein und zählen
eine Anzahl von abgearbeiteten Instruktionen eines auf den jeweils
zugeordneten Prozessor bzw. 43 laufenden Prozesses oder Task.
-
Den
Prozessoren 41 und 43 ist gemeinsame Hardware 46,
beispielsweise ein gemeinsamer Level 2 Cache, gemeinsame
Schnittstellen etc. zugeordnet. Die Hardware 46 kann auch
einen durch die Prozessoren 41 und 43 gemeinsam
genutzten Bus oder jede andere Art gemeinsam genutzter Hardware
umfassen. Der Zugriff der Prozessoren 41 und 43 auf
die Hardware 46 wird durch eine Prioritätseinheit 47 geregelt.
Beispielsweise kann den auf den Prozessoren 41, 43 laufenden
Prozessen jeweils ein Prioritätswert zugeordnet
werden, und der Prozessor, auf welchem der Prozess mit höherer Priorität läuft, darf
beispielsweise häufiger
auf die Hardware 46 zugreifen. Im Falle eines Cache-Speichers
darf bei einem Ausführungsbeispiel
ein Datenverarbeitungsvorgang mit höherer Priorität auf größere Speicherbereiche
zugreifen als ein Datenverarbeitungsvorgang mit niedriger Priorität. Im Falle
eines Bussystems erhöht
bei einem Ausführungsbeispiel
eine höhere
Priorität
die Wahrscheinlichkeit der Zugriffserlaubnis auf den Bus. Andere
Möglichkeiten
sind ebenso denkbar, beispielsweise können die bereits unter Bezugnahme
auf 2–4 diskutierten
Möglichkeiten
zur Prioritätssteuerung
für mehrere
Threads in Multithreadprozessoren in entsprechender Weise auf den
Zugriff auf die Hardware 46 durch verschiedene auf den
Prozessoren 41, 43 laufende Prozesse übertragen
werden.
-
Die
Komponenten der in 5 gezeigten Vorrichtung sind über ein
Bussystem 40 miteinander und gegebenenfalls mit weiteren
(nicht dargestellten) Komponenten wie Speichern, Schnittstellen
und dergleichen verbunden.
-
Auf
dem ersten Prozessor 41 und/oder dem zweiten Prozessor 43 kann
bei dem Ausführungsbeispiel
der 5 ein Echtzeitprozess oder anderer Prozess laufen,
welcher in einer vorgegebenen Zeit abgearbeitet werden soll. Zur Überwachung
des Fortschritts derartiger Prozesse weist die in 5 dargestellte
Vorrichtung einen Überwachungstimer 45 auf.
Der Überwachungstimer
weist einen Speicher 48 zum Speichern von Zeitdauern Tw1
für den
ersten Prozessor 41 und Tw2 für den zweiten Prozessor 43 auf.
Des Weiteren umfasst der Überwachungstimer 45 bei
dem dargestellten Ausführungsbeispiel
einen Speicher 49 zum Speichern eines Vergleichswerts X1
für den
ersten Prozessor 41 und eines Vergleichswerts X2 für den zweiten
Prozessor 43. Beim Start beispielsweise eines Echtzeitprozesses
auf dem ersten Prozessor 41 wird der Überwachungstimer 45 durch
den Instruktionszähler 42 über den
Start informiert. Nach Ablauf der Zeit Tw1 fragt der Überwachungstimer 45 den
ersten Instruktionszähler 42 ab und
vergleicht die Anzahl der abgearbeiteten Instruktionen mit dem Vergleichswert
X1. Wenn die Anzahl der abgearbeiteten Instruktionen kleiner als
X1 ist, teilt der Überwachungstimer 45 der
Prioritätseinheit 47 mit,
dass die Priorität
des ersten Prozessors 41 bzw. des auf den ersten Prozessor 41 laufenden
Prozesses erhöht
werden soll, beispielsweise durch Schreiben einer höheren Priorität auf die
Prioritätseinheit 47.
In entsprechender Weise kann der Überwachungstimer 45 einen
auf den zweiten Prozessor 43 laufenden Prozess überwachen,
wobei hierzu die Zeitdauer Tw2 und der Vergleichswert X2 verwendet werden.
-
Bei
den Ausführungsbeispielen
der 2–5 wird
nach Ablauf einer vorgegebenen Zeit bzw. zu bestimmten Zeitpunkten
die der Fortschritt eines Datenverarbeitungsvorgangs überprüft, beispielsweise
indem eine Anzahl von abgearbeiteten Instruktionen mit einem vorgegebenen
Schwellenwert verglichen wird. Bei einem anderen Ausführungsbeispiel
wird der Fortschritt eines Datenverarbeitungsvorgangs relativ zu
dem Fortschritt eines anderen Datenverarbeitungsvorgangs überprüft, und Prioritäten der
Datenverarbeitungsvorgänge
werden entsprechend angepasst.
-
Ein
derartiges Ausführungsbeispiel
ist in 6 dargestellt. Elemente des Ausführungsbeispiels
von 6, welche Elementen des Ausführungsbeispiels von 5 entsprechen,
tragen die gleichen Bezugszeichen und werden nicht nochmals detailliert
erläutert.
So umfasst das in 6 dargestellte Ausführungsbeispiel
wie das Ausführungsbeispiel
von 5 einen Bus 40, einen ersten Prozessor 41,
einen dem ersten Prozessor zugeordneten ersten Instruktionszähler 42,
einen zweiten Prozessor 43, einen dem zweiten Prozessor 43 zugeordneten
zweiten Instruktionszähler 44 sowie
Hardware 46 wie einen Cache-Speicher, auf welchen der erste
Prozessor 41 und der Prozessor 43 gemeinsam zugreifen, wobei
die Zugriffsdauer bzw. -zeiten der Prozessoren 41, 43 prioritätsgesteuert
verwaltet werden.
-
Für diese
Prioritätssteuerung
umfasst die Vorrichtung aus 6 eine Prioritätseinheit 60.
Bei dem Ausführungsbeispiel
von 6 liest die Prioritätseinheit 60 den ersten
Instruktionszähler 42 und den
zweiten Instruktionszähler 44,
d. h. eine Anzahl N1 von abgearbeiteten Instruktionen eines Prozesses
auf dem ersten Prozessor 41 und eine Anzahl N2 von abgearbeiteten
Instruktionen eines Prozesses auf dem zweiten Prozessor 43,
aus. In Abhängigkeit von
N1 und N2 werden dann die Prioritäten des Prozesses auf den ersten
Prozessor 41 und des zweiten Prozessors 43 verändert.
-
Bei
einem Ausführungsbeispiel
kann beispielsweise jeweils derjenige Prozess, bei welchem weniger
Instruktionen abgearbeitet sind, die höhere Priorität erhalten.
So kann näherungsweise
eine gleiche Verarbeitungsgeschwindigkeit erzielt werden.
-
Ebenso
ist es bei einem anderen Ausführungsbeispiel
möglich,
das Verhältnis
N1/N2 auf einen beliebigen Wert c zu regeln. Bei einem Ausführungsbeispiel
der Erfindung wird hierzu das Verhältnis N1/N2 mit c verglichen.
Wenn N1/N2 größer als
c ist, wird die Priorität
des Prozesses auf dem zweiten Prozessor 43 erhöht, und
wenn N1/N2 kleiner als c ist, wird die Priorität des Prozesses auf den ersten Prozessor 41 erhöht.
-
Bei
einem anderen Ausführungsbeispiel kann
auch ein anderer Wert als das Verhältnis von N1 und N2 auf einen
konstanten Wert geregelt werden, in allgemeiner Form f(N1, N2) =
c, wobei f eine beliebige funktionale Abhängigkeit ausdrückt.
-
In
einem weiteren Ausführungsbeispiel
kann auch die Zeit t mit berücksichtigt
werden, beispielsweise ein von einem (nicht gezeigten) in der Prioritätseinheit 60 oder
einem anderen Element der Vorrichtung integrierten Timer gelieferter
Zeitwert. In allgemeiner Form können
bei einem Ausführungsbeispiel
die Prioritäten
der Prozesse derart geregelt werden, dass f(t, N1, N2) = c. Durch
eine derartige Abhängigkeit
kann beispielsweise während
eines ersten Zeitabschnitts ein Prozess auf dem ersten Prozessor 41 bevorzugt
werden, während
in einem darauf folgenden zweiten Zeitabschnitt ein Prozess auf
dem zweiten Prozessor 2 bevorzugt wird, d. h. die Prioritäten so geregelt
werden, dass mehr Instruktionen des jeweils bevorzugten Prozesses
abgearbeitet werden.
-
Bei
dem Ausführungsbeispiel
von 6 steuert die Prioritätseinheit 60 den Zugriff
bzw. die Benutzung von Hardware 46, auf welche der erste Prozessor 41 und
der zweite Prozessor 43 direkt zugreifen. Bei einem anderen
Ausführungsbeispiel
wird eine derartige Prioritätseinheit
eingesetzt, um den Zugriff auf weitere Hardware über den Bus 40 zu steuern.
Ein entsprechendes Ausführungsbeispiel
ist in 7 dargestellt.
-
Bei
dem Ausführungsbeispiel
von 7 entsprechen der erste Prozessor 41,
der erste Instruktionszähler 42,
der zweite Prozessor 43 und der zweite Instruktionszähler 44 wie
der Bus 40 den bereits unter Bezugnahme auf 5 und 6 beschriebenen Komponenten,
diese werden daher nicht nochmals erläutert.
-
Bei
dem Ausführungsbeispiel
von 7 ist dem ersten Prozessor 41 ein Cache-Master 67 zugeordnet,
und dem zweiten Prozessor 43 ist ein Cache-Master 68 zugeordnet.
-
Bei
dem Ausführungsbeispiel
von 7 ist weiterhin ein Speicher 66 mit dem
Bus 40 verbunden. Der Speicher 46 kann beispielsweise
ein externes SDRAM, ein Flash-Speicher oder auch ein internes SRAM
sein. Der Zugriff der Prozessoren 41, 43, gegebenenfalls über die
Cache-Master 67 bzw. 68, über den Bus 40 auf
den Speicher 66 wird von einer Prioritätseinheit 65 geregelt,
welche den ersten Instruktionszähler 42 und
den zweiten Instruktionszähler 44 ausliest
und davon abhängig
die Priorität
der entsprechenden Prozesse auf dem ersten Prozessor 41 und dem
zweiten Prozessor 43 für
den Speicherzugriff auf den Speicher 66 verändert. Dies
kann wie bereits unter Bezugnahme auf 6 für die Prioritätseinheit 60 erläutert geschehen.
-
Die
Ausführungsbeispiele
der 5–7 umfassen
jeweils einen ersten Prozessor 41 und einen zweiten Prozessor 43.
Bei einem anderen Ausführungsbeispiel
der Erfindung können
auch mehr als zwei Prozessoren vorgesehen sein. Zudem kann bei einem
Ausführungsbeispiel
eine Prioritätseinheit den
Zugriff auf verschiedene Komponenten steuern. Ein entsprechendes
Ausführungsbeispiel,
welches diese beiden Aspekte kombiniert, ist in 8 dargestellt.
-
Bei
dem Ausführungsbeispiel
der 8 entsprechen der Bus 40, der erste Prozessor 41,
der erste Instruktionszähler 42,
der zweite Prozessor 43, der zweite Instruktionszähler 44 und
die Hardware 46 den bereits unter Bezugnahme auf 5 und 6 beschriebenen
Komponenten. Die Hardware 46 kann insbesondere ein Cache-Speicher
sein, auf welchen der erste Prozessor 41 und der zweite
Prozessor 43 gemeinsam zugreifen.
-
Des
Weiteren umfasst das Ausführungsbeispiel
der 8 einen Speicher 66 wie unter Bezugnahme
auf 7 beschrieben.
-
Zudem
umfasst das Ausführungsbeispiel von 8 einen
dritten Prozessor 71 mit einem dritten Instruktionszähler 72.
Eine Prioritätseinheit 70 liest
den ersten Instruktionszähler 42,
den zweiten Instruktionszähler 44 und
den dritten Instruktionszähler 42 auf
und steuert hiervon abhängig
den Zugriff des ersten Prozessors 41 und des zweiten Prozessors 43 auf
die Hardware 46 sowie den Zugriff der Prozessoren 41, 43 und 71 auf
den Speicher 66. Bei einem Ausführungsbeispiel wird der Zugriff
auf die Hardware 46 wie unter Bezugnahme auf 6 beschrieben
gesteuert. Zur Steuerung des Zugriffs auf den Speicher 66 kann
das unter Bezugnahme auf 6 und 7 beschriebene
Verfahren dahingehend erweitert werden, dass auch eine Anzahl von
abgearbeiteten Instruktionen N3 eines auf dem dritten Prozessor 71 laufenden
Prozesses einbezogen wird, d. h. eine Funktion g(N1, N2, N3) auf
einen vorgegebenen Wert c geregelt wird, wobei die Funktion g zusätzlich von
der Zeit abhängen
kann.
-
Die
vorliegende Erfindung ist nicht auf die dargestellten Ausführungsbeispiele
begrenzt. Beispielsweise können
auch mehr als drei Prozessoren vorhanden sein. In ähnlicher
Weise können
bei den Ausführungsbeispielen
der 2–4 auch
mehr als zwei Threads auf einem Multithreadingprozessor verwaltet
werden.
-
Die
unter Bezugnahme auf die 3 und 4 diskutierten
Erweiterungen und Modifikationen können auch in den Ausführungsbeispielen
der 5–8 implementiert
werden. Beispielsweise kann ein auf dem ersten Prozessor 41 laufender
Prozess und/oder ein auf dem zweiten Prozessor 43 laufender
Prozess zu mehreren Zeitpunkten entsprechend mehreren Zeiten Tw1
mit entsprechend zugeordneten Vergleichswerten X1 auf seinen Fortschritt hin überprüft werden,
wodurch gegebenenfalls die Priorität des Prozessors bzw. des darauf
laufenden Prozesses mehrmals erhöht
wird. Auch ein Vergleich mit zusätzlichen
Vergleichswerten Y1, Y2 entsprechend dem bereits diskutierten Vergleichswert
Y kann bei einem Ausführungsbeispiel
realisiert werden, wobei, wenn die Anzahl der abgearbeiteten Instruktionen
den entsprechenden Wert Y1 bzw. Y2 übersteigt, die Priorität entsprechend
erniedrigt wird. Grundsätzlich
kann bei einem anderen Ausführungsbeispiel
der Erfindung auch nur überprüft werden,
ob die Anzahl der abgearbeiteten Instruktionen eines Datenverarbeitungsvorgangs
einen vorgegebenen Wert übersteigt
und falls ja die Priorität
des datenverarbeitenden Vorgangs herabgesetzt werden.
-
Bei
den Ausführungsbeispielen
der 3–5 sind
verschiedene Einheiten durch verschiedene Blöcke in den Figuren dargestellt.
Diese Einheiten oder Blöcke
können
in getrennten Bausteinen implementiert sein, können aber ebenso auf gemeinsamen
Chips oder in gemeinsamen Bausteinen integriert sein. Beispielsweise
kann die Prioritätseinheit 21 der 3 und 4 in
dem Multithreadingprozessor 22 der 3 und 4 integriert
sein. Auch die Überwachungstimer 30, 45 können in
einem der Prozessoren der jeweiligen Vorrichtung integriert sein,
sie können
jedoch ebenso als eigenständige Bausteine,
welche mit verschiedenen Prozessoren verwendet werden können, realisiert
sein. Auch können
die Prozessoren 41, 43 der Ausführungsbeispiele
der 5–8 als
getrennte Prozessoren realisiert sein, sie können jedoch ebenso verschiedene Prozessorkerne
eines Mehrkernprozessors darstellen. Auch weitere Modifikationen
sind denkbar.
-
Beispielsweise
können
die Ausführungsbeispiele
der 3 und 4 mit einem der Ausführungsbeispiele
der 5–8 kombiniert
werden, indem ein oder mehrere der Prozessoren 41, 43 und 71 als
Multithreadingprozessoren wie der Multithreadingprozessor 22 aus 4 ausgestaltet
sind. In diesem Fall können
durch ein oder mehrere Prioritätseinheiten
sowohl der Zugriff der Prozessoren auf die Hardware 46 als
auch die Priorität
der verschiedenen auf einem Prozessor laufenden Threads gesteuert werden,
und durch ein oder mehrere Überwachungstimer
oder auch durch eine Lösung
wie in 3 dargestellt können die Threads, z. B. Echtzeitthreads, überwacht
werden. Auch kann statt des Überwachungstimers 45 in 5 eine
Kombination aus einem Timer und einer Interrupteinheit wie in 3 dargestellt
implementiert sein. Bei einem anderen Ausführungsbeispiel kann ein Überwachungstimer
wie in 5 dargestellt mit einer Prioritätseinheit
wie in den 6–8 erläutert kombiniert
werden. Beispielsweise kann bei einem Ausführungsbeispiel ähnlich dem
in 8 dargestellten Ausführungsbeispiel der Zugriff
des ersten Prozessors 41 und des zweiten Prozessors 43 auf
die Hardware 46 mittels eines Überwachungstimers wie dem Überwachungstimer 45 aus 5 gesteuert
werden, während
der Zugriff auf dem Speicher 66 nur über eine Prioritätseinheit
gesteuert wird, welche die jeweiligen Instruktionszähler der
Prozessoren ausliest.
-
Auch
im Übrigen
ist die vorliegende Erfindung nicht auf die dargestellten Ausführungsbeispiele
begrenzt, welche lediglich zur Veranschaulichung der Erfindung dienen.
-
- 10
- Prozessor
Stall
- 11
- Echtzeitthread
- 12
- Thread
- 13
- Multithreading
- 14
- Pfeil
- 15
- Startzeit
- 16
- Endzeit
- 17
- Ablauf
der Maximaldauer
- 20
- Bus
- 21
- Prioritätseinheit
- 22
- Multithreadingprozessor
- 23
- Instruktionszähler
- 24
- Interrupteinheit
- 25
- Timer
- 30
- Multithreadingüberwachungstimer
- 31
- Speicher
- 32
- Speicher
- 40
- Bus
- 41
- Prozessor
- 42
- Instruktionszähler
- 43
- Prozessor
- 44
- Instruktionszähler
- 45
- Überwachungseinheit
- 46
- Hardware
- 47
- Prioritätseinheit
- 48
- Speicher
- 49
- Speicher
- 50
- sequentielle
Verarbeitung
- 52
- Zeitablauf
- 60
- Prioritätseinheit
- 65
- Prioritätseinheit
- 66
- Speicher
- 67
- Cache
Master
- 68
- Cache
Master
- 70
- Prioritätseinheit
- 71
- Prozessor
- 72
- Instruktionszähler
- Ta
- Maximaldauer
- T1,
T1'
- Dauer