-
Die Erfindung betrifft ein Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren. Ferner betrifft die Erfindung ein Mehrkernprozessorsystem, das derart ausgebildet ist, das Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren durchzuführen.
-
Für sicherheitstechnische Anwendungen werden typischerweise Verfahren verwendet, bei dem mehrere Prozessoren (mehrere CPUs) mittels Hardwareunterstützung so synchron ihre Programme abarbeiten, dass ihre generierten Ausgaben quasi zeitgleich sind (innerhalb von µs). Jeder dieser Ausgabepfade, über den eine Ausgabe erfolgt, wird im Folgenden auch als Kanal bezeichnet. Es können diese Ausgaben während der Ausgabe hardwaretechnisch miteinander durch zum Beispiel einen Voterbaustein verglichen werden. Bei beispielsweise drei Prozessoren, die jeweils separate Ausgaben erzeugen (drei Kanäle) kann dann eine Abweichung von einer Ausgabe erkannt werden und in Folge dieser spezielle Prozessor bzw. der entsprechende Kanal ausgegrenzt werden. Bei beispielsweise zwei Prozessoren werden bei Abweichungen untereinander beide Prozessoren ausgegrenzt und von der Peripherie getrennt, da nicht entschieden werden kann, welcher von beiden die richtigen Ausgaben erzeugt.
-
Interrupts bezeichnen Unterbrechungen eines laufenden Programms um beispielsweise Programme bzw. Tasks mit höherer Priorität abzuarbeiten. Dazu wird das laufende Programm an einer bestimmten Stelle unterbrochen und nach Abarbeitung des Interrupts an dieser Stelle wieder fortgeführt. Bei hardwaresynchronisierten Systemen bzw. miteinander synchronisierten Prozessoren, die also beispielsweise zeitlich mit einer Präzision von < 1µs abgestimmt sind, werden Interrupts derart eingespeist, dass bei jedem Prozessor der Interrupt auf genau dem gleichen Maschinenbefehl des ausgeführten Programms unterbricht. Ferner werden die Eingaben derart auf die Prozessoren verteilt, dass die verschiedenen Prozessoren immer exakt identische Eingabedaten erhalten.
-
Damit die Ausgaben der Prozessoren zeitlich so nahe beieinanderliegen, müssen die Laufzeitdifferenzen der Kanäle bzw. der Prozessoren (hervorgerufen durch leicht unterschiedliche Quarze und gelegentlich durch eine unterschiedliche Anzahl von Zyklen für einen Maschinencode) durch Wartezeiten des schnelleren Prozessors auf den langsameren Prozessor ausgeglichen werden. Dazu kann man beispielsweise den kompletten Programmcode so instrumentieren, dass sehr häufig ein Synchronisationsaufruf generiert wird, der eine Synchronisation per Hardware auslöst. In anderen Ausführungen wird die Synchronisation als Nebeneffekt von Ein-/Ausgabe-Befehlen oder nach einer bestimmten Anzahl von Speicherzugriffen ausgelöst. Da mittlerweile bei modernen Prozessoren kein Zugriff auf die internen Busse des Prozessors existiert, hilft jedoch meist die Software der Hardwaresynchronisationseinheit durch häufiges Aufrufen einer kurzen Funktion, die der Hardware den Synchronisationsanstoß gibt. Nur zu Synchronisationszeitpunkten ist es möglich, ein Interrupt einzuspeisen. Das regelmäßige Uhreninterrupt (z. B. alle 20 ms) wie andere Interrupts werden also auf allen Prozessoren dann verarbeitet, wenn wieder gerade ein Synchronisationsaufruf (besonderer Aufruf zur Synchronisation) seitens des ausgeführten Programmes erfolgt bzw. erfolgt ist.
-
Problematisch ist jedoch, dass diese Verfahren nicht ohne weiteres geeignet sind für den Betrieb von Mehrkernprozessoren statt Einkernprozessoren, d. h. für Prozessoren mit mehr als einem Prozessorkern oder auch hyperthreadingfähige Prozessoren, die also einen zweiten virtuellen Prozessorkern zur Verfügung stellen. Bisher hat man diese zusätzlichen Prozessorkerne im synchronisierten Betrieb totgelegt, d. h. im synchronisierten Betrieb nicht verwendet.
-
Eine Schwierigkeit besteht nämlich darin, dass die Prozessorkerne zeitlich vollkommen unabhängig voneinander agieren. Die Synchronisierlogik der Hardware kann dabei nicht unterscheiden, welcher der Prozessorkerne synchronisiert. Die Synchronisationsausgaben der verschiedenen Prozessorkerne eines Prozessors behindern sich somit gegenseitig. Beispielsweise kann ein toter Prozessorkern, bzw. ein Prozessorkern mit nicht mehr laufendem Programm bzw. Software, nicht erkannt werden, da der noch arbeitende Prozessorkern weitersynchronisiert.
-
Daher wurde bisher in hardwaresynchronen Systemen nur je ein Prozessorkern pro Kanal ausgenutzt. Sollten also mehrere Prozessorkerne oder auch weitere Hyperthreading-Kerne zur Verfügung stehen, so wurden diese Rechenkapazitäten nicht genutzt, sondern abgeschaltet falls vorhanden. Hardwaresynchrone Systeme sind also bisher reine Einzelprozessorkern-Systeme pro Kanal. Nachteilig werden dadurch Mehrkernprozessoren oder Prozessoren mit Hyperthreadingfähigkeit nur zu entsprechenden Bruchteilen ausgelastet. Um mehr nebenläufige Rechenkraft zu generieren, müssen bisher also demnach mehrere hardwaresynchrone Systeme parallel betrieben werden, was entsprechend höheren Hardwareaufwand bedeutet.
-
Die Aufgabe besteht daher darin, ein Verfahren zu entwickeln, das einen hardwaresynchronen Betrieb unter der Benutzung von Mehrkernprozessoren ermöglicht, bei dem die Rechenleistung der zusätzlichen Prozessorkerne nicht ungenutzt bleibt.
-
Das erfindungsgemäße Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren umfasst grundsätzlich folgende Schritte: a) Bereitstellen eines ersten Mehrkernprozessors und eines zweiten Mehrkernprozessors jeweils umfassend einen Hauptprozessorkern und mindestens einen Nebenprozessorkern, der zur Abarbeitung von Nutzprogrammen dient. In einem nächsten Schritt b) erfolgt das Synchronisieren des ersten Mehrkernprozessors mit dem zweiten Mehrkernprozessor derart, dass nur der jeweilige Hauptprozessorkern des ersten Mehrkernprozessors mit dem Hauptprozessorkern des zweiten Mehrkernprozessors synchronisiert. In einem weiteren Schritt c) erfolgt das Steuern des mindestens einen Nebenprozessorkerns durch den jeweiligen Hauptprozessorkern in jedem Mehrkernprozessor. In einem weiteren Schritt d) werden die Nutzprogramme durch den mindestens einen Nebenprozessorkern bearbeitet und Ausgaben erzeugt, die dem jeweiligen Hauptprozessorkern des gleichen Mehrkernprozessors zur Verfügung gestellt werden. In einem letzten Schritt e) wird das synchrone Ausgeben von Ausgaben der Mehrzahl von Mehrkernprozessoren durch den jeweiligen Hauptprozessorkern realisiert.
-
Das Verfahren hat den Vorteil, dass die Synchronisation lediglich durch den Hauptprozessorkern eines jeden Mehrkernprozessors erfolgt und der oder die weiteren Nebenprozessorkerne diese Synchronisation nicht stören. Die jeweiligen Hauptprozessorkerne agieren somit als Synchronisationsmaster. Die Nebenprozessorkerne dienen dabei lediglich als Slave-Rechenknechte, d. h. es werden die anstehenden Nutzprogramme an die Nebenprozessorkerne übergeben, abgearbeitet und dann die Ausgaben dem jeweiligen Hauptprozessorkern wieder zur Verfügung gestellt. Als Nutzprogramme kommen hierbei Applikationen, Anwendungssoftware, Rechenprogramme, Tasks sowie jede Form von Programmen in Frage, die von Prozessorkernen bearbeitet werden können. Durch die Übergabe der Ausgaben an die Hauptprozessorkerne werden die Ausgaben in die Synchronisation der Hauptprozessorkerne gehoben. Die Nebenprozessorkerne synchronisieren somit nicht selbst sondern laufen weitestgehend autark. Somit kann vorteilhaft die Rechenleistung der Nebenprozessorkerne ausgenutzt werden, ohne dass es dabei zu Synchronisationsstörungen kommt, da diese Aufgabe lediglich von dem jeweiligen Hauptprozessorkern ausgeübt wird. Durch diese funktionale Aufteilung der Nutzprogramme auf mehrere Prozessorkerne und die entsprechenden Nebenläufigkeiten kann eine lineare Steigerung der Rechenleistung gemäß der Anzahl der Prozessorkerne erfolgen. Das erlaubt es, auf parallele Zusatzrechner zu verzichten und somit günstigere und kompaktere Bauformen zu ermöglichen.
-
Vorteilhafterweise erfolgt Ein-/Ausgabe lediglich über die jeweiligen Hauptprozessorkerne. Dadurch werden die Nebenprozessorkerne lediglich über die Hauptprozessorkerne steuerbar gemacht. Nur die Hauptprozessorkerne „kommunizieren“ somit mit der Peripherie.
-
Bevorzugt findet die Kommunikation zwischen dem Hauptprozessorkern und dem mindestens einen Nebenprozessorkern durch Nachrichten mittels eines gemeinsam genutzten Speichers (Shared Memory) statt. Hierzu können beispielsweise mittels Virtualisierungsunterstützungen die Nebenprozessorkerne als virtuelle Prozessorkerne betrieben werden, wobei auf diesen Kernen ein Betriebssystem bereit gestellt werden kann, das eine Kommunikation zwischen Prozessorkernen mittels Nachrichtenaustausch ermöglicht. Der Transfer der Nachrichten kann dabei beispielsweise mittels Verriegelungsprotokoll über gemeinsame Speicherbereiche (Shared Memory Bereiche) erfolgen, um Zugriffskonflikte zu vermeiden. Der Hauptprozessorkern hat hierbei die Speicheraufteilung eingerichtet.
-
Der Hauptprozessorkern übergibt bevorzugt dem mindestens einen jeweiligen Nebenprozessorkern des entsprechenden Mehrkernprozessors ein Uhrzeitinkrement. Das Uhrzeitinkrement ist dabei als eine in regelmäßigen Zeitschritten bzw. Zeitintervallen aktualisierte Uhr zu verstehen. Die Nebenprozessorkerne je Hauptprozessorkern haben somit synchron das gleiche Uhrzeitinkrement zur Verfügung. Dieses kann beispielsweise alle 20 ms erfolgen. Somit werden den Nebenprozessorkernen die Abarbeitung von anstehenden, rechenwilligen Tasks bzw. Programmen in regelmäßigen Abständen eingeräumt. Diese können vom Hauptprozessorkern auf die Nebenprozessorkerne auf bestimmte Weise verteilt werden, wobei diese Verteilung in jedem Mehrkernprozessor in gleicher Weise geschieht.
-
Bevorzugt ist in die Nutzprogramme bzw. Betriebssysteme wiederkehrender Systemaufruf implementiert. Ein solcher Systemaufruf kann beispielsweise ein Synchronisationsanstoß sein.
-
Dabei wird vorzugsweise durch den Systemaufruf in dem jeweiligen mindestens einen Nebenprozessorkern eine erste Bearbeitungsphase ausgeführt, in der das Empfangen und Senden von Nachrichten zwischen dem mindestens einen Nebenprozessorkern und dem jeweiligen Hauptprozessorkern durchgeführt wird und dabei eine zweite Bearbeitungsphase unterbrochen wird, in der die Nutzprogramme in dem mindestens einem Nebenprozessorkern abgearbeitet werden. Die erste Bearbeitungsphase findet somit in der Unterbrechung der zweiten Bearbeitungsphase statt. In dieser zweiten Bearbeitungsphase findet die eigentliche Abarbeitung der Programme statt, in der auch das jeweilige Betriebssystem der Nebenprozessorkerne läuft. Die zweite Bearbeitungsphase bekommt somit von der jeweiligen ersten Bearbeitungsphase nichts mit.
-
In der ersten Bearbeitungsphase werden das Empfangen und Senden von Nachrichten zwischen dem mindestens einen Nebenprozessorkern und dem jeweiligen Hauptprozessorkern bevorzugt zu einem synchronen Zeitpunkt ausgeführt. Dadurch kann in jedem Hauptprozessorkern die Ausgabe zur identischen Zeit anliegen und weiterverarbeitet werden ohne unerwünschte Abweichungen zu erzeugen. Der synchrone Zeitpunkt kann durch aktives Warten auf ein Uhrzeitinkrement erzielt werden. Dies kann beispielsweise alle 100 ms oder alle 200 ms erfolgen.
-
Die erste Bearbeitungsphase kann eine Verzögerung der Reaktion auf ein Uhrzeitinkrement in dem mindestens einen Nebenprozessorkern auf Basis der innerhalb einer Zeit zwischen zwei Uhrzeitinkremente gezählten Systemaufrufe erzeugen. Dadurch werden Laufzeitunterschiede vorteilhaft ausgeglichen und die Nebenprozessorkerne laufen entsprechend gleichläufiger.
-
Bevorzugt werden Nutzprogramme in den Nebenprozessoren abgearbeitet, deren Ausgaben nach einer Verzögerungszeit, die größer als die Laufzeit der Nutzprogramme ist, synchron an die Hauptprozessorkerne übergeben werden. Die Verzögerungszeit ist dabei entsprechend so zu wählen, dass die zu berechnenden Ausgaben bei Ablauf der Verzögerungszeit vorliegen, so
-
dass eine synchrone Übergabe an den Hauptprozessorkern möglich wird. Zum Beispiel können die Laufzeiten der Nutzprogramme vorher bekannt sein. Auf den Ablauf der Verzögerungszeit wird aktiv gewartet.
-
Mindestens ein Prozessorkern des mindestens einen Nebenprozessorkerns kann als Hyperthreading-Kern ausgebildet sein. Das Verfahren kann somit auch auf hyperthread-fähige Prozessoren angewendet werden, die virtuelle Prozessorkerne zur Verfügung stellen.
-
Ferner wird ein Mehrkernprozessorsystem umfassend eine Mehrzahl von Mehrkernprozessoren jeweils umfassend einen Hauptprozessorkern sowie mindestens einen Nebenprozessorkern offenbart, der zur Abarbeitung von Nutzprogrammen dient, dadurch gekennzeichnet, dass das Mehrkernprozessorsystem derart ausgebildet ist, das Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren nach einem der oberhalb beschriebenen Ausführungen auszuführen.
-
Ferner wird ein Computerprogramm offenbart, das es einer Datenverarbeitungseinrichtung ermöglicht, nachdem es in ein Speichermittel der Datenverarbeitungseinrichtung geladen worden ist, ein Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren nach einem der oberhalb beschriebenen Ausführungen durchzuführen.
-
Ferner wird ein Computerlesbares Speichermedium offenbart, auf dem ein Programm gespeichert ist, das es einer Datenverarbeitungseinrichtung ermöglicht, nachdem es in Speichermittel der Datenverarbeitungseinrichtung geladen worden ist, ein Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren gemäß einem der oberhalb beschriebenen Ausführungen durchzuführen.
-
Die oben beschriebenen Eigenschaften, Merkmale und Vorteile dieser Erfindung sowie die Art und Weise, wie diese erreicht werden, werden klarer und deutlicher verständlich im Zusammenhang mit der folgenden Beschreibung der Ausführungsbeispiele, die im Zusammenhang mit den Zeichnungen näher erläutert werden. Es zeigen:
-
1 eine schematische Darstellung eines erfindungsgemäßen Mehrkernprozessorsystems,
-
2 eine schematische Darstellung des erfindungsgemäßen Verfahrens zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren.
-
In der 1 ist eine schematische Darstellung eines erfindungsgemäßen Mehrkernprozessorsystems 10 rein beispielhaft beschrieben. Anhand dieser Darstellung wird ebenfalls das erfindungsgemäße Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren MC1, MC2 beschrieben, das in 2 schematisch zusammengefasst wird. Es sei angemerkt, dass in der 1 die lediglich für die Erfindung besonders relevanten technischen Merkmale angezeigt werden und diese Merkmale nicht abschließend sind, sondern weitere technische Merkmale, die dem Fachmann bekannt sind, enthalten sein können wie z. B. weitere Speicherstrukturen, entsprechende Bussysteme, Timer, Scheduler, Peripherieeinheiten etc..
-
Das Mehrkernprozessorsystem 10 umfasst beispielhaft einen ersten Mehrkernprozessor MC1 sowie einen zweiten Mehrkernprozessor MC2. Es können jedoch beliebig viele Mehrkernprozessoren MC1, MC2 vorgesehen sein, jedoch mindestens zwei, was also einer Mehrzahl von Mehrkernprozessoren MC1, MC2 entspricht. Besonders bevorzugt sind drei Mehrkernprozessoren, da eine Abweichungen in den Ausgaben oder ein Ausfall eines Mehrkernprozessors sicherheitstechnisch kompensiert werden kann. Jeder Mehrkernprozessor MC1, MC2 umfasst genau einen Hauptprozessorkern A1, A2, wobei hier beispielhaft der Hauptprozessorkern A1 in dem ersten Mehrkernprozessor MC1 und der Hauptprozessorkern A2 in dem zweiten Mehrkernprozessor MC2 verbaut sind. Ferner stehen dem ersten Mehrkernprozessor MC1 beispielhaft zwei Nebenprozessorkerne B1, B2 zur Abarbeitung von Nutzprogrammen zur Verfügung. Ferner stehen dem zweiten Mehrkernprozessor MC2 ebenfalls zwei Nebenprozessorkerne B3, B4 zur Abarbeitung von Nutzprogrammen zur Verfügung. Die Erfindung ist jedoch nicht auf zwei Nebenprozessorkerne B1, B2, B3, B4 beschränkt, sondern es kann auch nur ein Nebenprozessorkern oder mehr als zwei Nebenprozessorkerne je Hauptprozessorkern zur Verfügung gestellt werden. Als Nutzprogramme kommen hierbei Applikationen, Anwendungssoftware, Rechenprogramme, Tasks und jede Form von Programmen in Frage, die von Prozessorkernen bearbeitet werden können. Die Nutzprogramme, die von den jeweiligen Mehrkernprozessoren MC1, MC2 bearbeitet werden, sind dabei identisch, d. h. sie bestehen aus der gleichen Folge von Maschinenbefehlen.
-
Die Hauptprozessorkerne A1, A2 der verschiedenen Mehrkernprozessoren MC1, MC2 sind miteinander synchronisiert, was in der 1 schematisch durch eine Synchronisationseinheit SE dargestellt wird. Eine solche Synchronisation zwischen den Hauptprozessorkernen A1, A2 kann beispielsweise durch Synchronisationsaufrufe, d. h. besondere Aufrufe in den Programmen oder durch bestimmte Zugriffe wie zum Beispiel Speicherzugriffe durch die Hardware erfolgen. Die Ausgaben der Hauptprozessorkerne A1, A2 sind vorzugsweise derart synchronisiert, dass deren Ausgaben innerhalb von µs erfolgen und beispielsweise von einem nachgestellten Voterbaustein V während der Ausgabe verglichen werden können.
-
Die Nebenprozessorkerne B1, B2, B3, B4 sind in dieser Synchronisation nicht einbezogen, sondern laufen im Wesentlichen autark vor sich hin. Es synchronisieren somit nur die jeweiligen Hauptprozessorkerne A1, A2 der verschiedenen Mehrkernprozessoren MC1, MC2 untereinander. Die Nebenprozessorkerne B1, B2, B3, B4 dienen dazu, die Nutzprogramme abzuarbeiten und werden vom jeweiligen Hauptprozessorkern A1, A2 angesteuert. Die Steuerung, d. h. auch die Verteilung der Programme, Teilprogramme oder Tasks auf die jeweiligen Nebenprozessorkerne B1, B2, B3, B4 erfolgt in jedem Mehrkernprozessor MC1, MC2 gleichartig, d. h. in anderen Worten läuft in jedem Mehrkernprozessor MC1, MC2 die gleiche Prozedur ab.
-
Bei der Bearbeitung der Nutzprogramme durch den mindestens einen Nebenprozessorkern B1, B2, B3, B4 werden Ausgaben erzeugt, die dem jeweiligen Hauptprozessorkern A1, A2 des gleichen Mehrkernprozessors MC1, MC2 zur Verfügung gestellt werden. Folgend wird ein Synchrones Ausgeben von Ausgaben der Mehrzahl von Mehrkernprozessoren MC1, MC2 durch den jeweiligen Hauptprozessorkern A1, A2 bewirkt.
-
Somit fungiert der Hauptprozessorkern A1, A2 demnach als Synchronisationsmaster, während die Nebenprozessorkerne B1, B2, B3, B4 als Slave-Rechenknechte agieren. Es ergibt sich der Vorteil, dass die weiteren Nebenprozessorkerne B1, B2, B3, B4 diese Synchronisation nicht stören, da sie an der Synchronisation nicht teilnehmen. Somit kann vorteilhaft die Rechenleistung der Nebenprozessorkerne B1, B2, B3, B4 ausgenutzt werden, ohne dass es dabei zu Synchronisationsstörungen kommt, denn diese Aufgabe wird lediglich von dem jeweiligen Hauptprozessorkern A1, A2 ausgeübt. Durch die funktionale Aufteilung der Nutzprogramme auf mehrere Prozessorkerne und die entsprechenden Nebenläufigkeiten (Paralleles Bearbeiten) kann eine lineare Steigerung der Rechenleistung gemäß der Anzahl der Prozessorkerne erfolgen.
-
Ein-/Ausgabe erfolgt über eine Ein-/Ausgabeeinheit E1, E2, wobei nur jeweilige Hauptprozessorkerne über entsprechende Ein-/Ausgabeeinheiten E1, E2 verfügen. Ein-/Ausgabe sind ebenfalls in die Synchronisation der Hauptprozessorkerne A1, A2 einbezogen. Die jeweiligen Nebenprozessorkerne B1, B2, B3, B4 verfügen nicht über Ein-/Ausgabeeinheiten. Dazu gehört ferner, dass die Nebenprozessorkerne B1, B2, B3, B4 von Interrupten der Ein-/Ausgabeeinheiten E1, E2 entkoppelt sind.
-
Die Kommunikation zwischen dem Hauptprozessorkern A1, A2 und dem mindestens einen Nebenprozessorkern B1, B2, B3, B4 wird durch Nachrichten mittels eines gemeinsam genutzten Speichers M1, M2 realisiert. Hierzu können die Nebenprozessorkerne B1, B2, B3, B4 als virtuelle Prozessorkerne durch Virtualisierungsunterstützungen betrieben werden. Auf diesen Prozessorkernen kann dann ein Betriebssystem bereitgestellt werden, das eine Kommunikation zwischen Prozessorkernen mittels Nachrichtenaustausch mit dem jeweiligen Hauptprozessorkern A1, A2 ermöglicht. Der Transfer der Nachrichten kann über die gemeinsamen Speicherbereiche M1, M2 (Shared Memory Bereiche) mittels Verriegelungsprotokollen erfolgen zur Vermeidung von Zugriffskonflikten auf den gemeinsamen Speicher M1, M2. Der Hauptprozessorkern A1, A2 hat hierbei die Speicheraufteilung eingerichtet.
-
Der Hauptprozessorkern A1 des ersten Mehrkernprozessors MC1 reicht seinen Uhrzeitinkrement I1 an die zwei Nebenprozessorkerne B1, B2 weiter. Ebenfalls reicht der Hauptprozessorkern A2 des zweiten Mehrkernprozessors MC2 sein Uhrzeitinkrement I2 an die zugehörigen zwei Nebenprozessorkerne B3, B4 weiter. Die Uhrzeitinkremente I1, I2 können beispielsweise alle 20 ms erfolgen und sind synchron zueinander. Über die Uhrzeitinkremente I1, I2 können grundsätzlich rechenwillige Programme oder Tasks zur Zwischenbearbeitung bereitgestellt werden, die beispielsweise nach Prioritäten oder anderen Kriterien in einer Warteschlange sortiert werden. Dies entspricht einem präemptiven Multitaskingsystem mit prioritätsgesteuerter Methodik. Die Verarbeitung der Uhrenzeitinkremente wird in den folgenden Abschnitten näher beschrieben.
-
In die Nutzprogramme werden besondere Aufrufe, sogenannte Systemaufrufe, eingepflegt. Diese Systemaufrufe sind Funktionen des Betriebssystems. Bei Uhrenzeitinkrementen von beispielsweise 20 ms können diese Systemaufrufe beispielhaft jede ms erfolgen, sinnvollerweise also stets deutlich unterhalb von 20 ms und damit häufig in Bezug auf die Uhrenzeitinkremente. Die Systemaufrufe können beispielsweise Synchronisationsanstöße sein, die jedoch nicht zur Synchronisation verwendet werden. Wenn ein solcher Systemaufruf erfolgt, wird im jeweiligen Nebenprozessorkern B1, B2, B3, B4 eine erste Bearbeitungsphase gestartet.
-
In dieser ersten Bearbeitungsphase wird der zyklische Ablauf in dem jeweiligen Nebenprozessorkernen B1, B2, B3, B4 geführt. Dabei werden die eingehenden Nachrichten und ausgehenden Nachrichten durch Wartelisten geführt und zu bestimmten synchronen Zeitpunkten zwischen Nebenprozessorkernen B1, B2, B3, B4 und Hauptprozessorkernen A1, A2 durch Zugriff auf den gemeinsamen Speicherbereich M1, M2 übermittelt. Dies kann zum Beispiel alle 100 ms oder alle 200 ms zu synchronen Zeitpunkten erfolgen. Der synchrone Zeitpunkt kann durch aktives Warten auf ein Uhrzeitinkrement I1, I2 erzielt werden. In der ersten Bearbeitungsphase wird auch geprüft, ob ein entsprechendes Uhrzeitinkrement I1, I2 anhängig ist bzw. es wird auf das nächste Uhrzeitinkrement I1, I2 aktiv gewartet zur groben Synchronisation der Nebenprozessorkerne B1, B2, B3, B4, um geringe Laufzeitunterschiede auszugleichen, so dass dann z.B. ein Taskwechsel stattfinden kann. Programme, die nach Timerablauf rechenwillig werden, verdrängen dabei Programme mit niedrigerer Priorität und wenn alle Programme abgearbeitet sind, wird in die Idle-Task gemündet, die erst beim nächsten Uhrzeitinkrement (z. B. alle 20 ms) verlassen wird, es wird also ein präemptives Multitasking propagiert. Ist kein Uhrzeitinkrement I1, I2 anhängig, dann aktualisiert die erste Bearbeitungsphase einen möglicherweise vorhandenen Zeitzähler, z. B. einen ms-Zeitzähler, der vornehmlich für die Feststellung von Zeitdifferenzen zuständig ist, und springt zum Aufrufpunkt zurück.
-
Die Bearbeitung der Nutzprogramme ist dabei Teil der zweiten Bearbeitungsphase, die eigentliche Rechenphase der Nebenprozessorkerne B1, B2, B3, B4. In dieser zweiten Bearbeitungsphase läuft auch das Betriebssystem der Nebenprozessorkerne. Die zweite Bearbeitungsphase, also die reine Abarbeitungsphase, ist unabhängig von der ersten Bearbeitungsphase, d. h. sie bekommt von den Abläufen der ersten Bearbeitungsphase nichts mit.
-
Die erste Bearbeitungsphase erfasst ferner die Anzahl der Systemaufrufe, die zwischen zwei Uhrzeitinkrementen I1, I2, also beispielsweise alle 20 ms, stattgefunden haben. Diese Systemaufrufe in den Nebenprozessorkernen B1, B2, B3, B4 werden typischerweise auf Zeiten von ms erfolgen. Auf Basis der Anzahl der erfassten Systemaufrufe wird dann eine Verzögerung der Reaktion auf den erfassten Uhreninterrupt I1, I2 ausgeführt. Diese Verzögerung soll eine Gleichläufigkeit der Bearbeitung durch die jeweiligen Nebenprozessorkerne B1, B2, B3, B4 bewirken, wodurch leichte Abweichungen durch Laufzeitunterschiede ausgeglichen werden. Diese Abweichung wird durch einfaches Abzählen der Systemaufrufe durch die erste Bearbeitungsphase erfasst und durch eine geeignete Verzögerung ausgeglichen. Die Synchronisationsmöglichkeiten der Nebenprozessorkerne B1, B2, B3, B4 der verschiedenen Mehrkernprozessoren MC1, MC2 liegen demnach im Bereich der gewählten Uhrzeitinkrementintervalle bzw. Uhreninkrementintervalle, also beispielsweise bei 20 ms. Dieses Zeitfenster ist demnach weiter gefasst als das Zeitfenster für die Synchronisation der entsprechenden Hauptprozessorkerne A1, A2 untereinander, die typischerweise im Bereich von µs liegen soll. Es handelt sich daher um eine gröbere Synchronisation als die der Hauptprozessorkerne A1, A2. Alternativ kann eine grobe Synchronisation erfolgen durch Ausnutzung eines Taktes, beispielsweise alle 20 ms, indem man z.B. alle 200 ms durch aktives Warten grobsynchronisiert, wie für die Übermittelung der Eingaben und Ausgaben zwischen Nebenprozessorkern B1, B2, B3, B4 und Hauptprozessorkern A1, A2 beschrieben. Es sei dabei allgemein angemerkt, dass die in den Nebenprozessorkernen B1, B2, B3, B4 in der zweiten Bearbeitungsphase, also der Arbeitsphase, ablaufenden Prozesse typischerweise lediglich im Bereich von Promille voneinander abweichen.
-
Der Austausch der angesammelten Nachrichten, der in der ersten Bearbeitungsphase erfolgt, zwischen den Nebenprozessorkernen B1, B2, B3, B4 mit ihren jeweilig zugeordneten Hauptprozessorkernen A1, A2 muss nicht nach jedem Uhrzeitinkrement I1, I2 erfolgen, sondern kann auch in vergröberten Zeitintervallen erfolgen, also beispielsweise alle 100 ms, da für viele Applikationen, die einen Zeitbegriff verarbeiten wie beispielsweise zur Steuerung oder zur Verfolgung von Bewegungen, Zyklen erst ab oder oberhalb des vergröberten Zeitintervalls liegen, also beispielsweise bei 100 ms, 200 ms oder gar 500 ms.
-
Von der Erfindung ist miteingeschlossen, dass der oder die Nebenprozessorkerne B1, B2, B3, B4 auch als Hyperthreading-Kerne ausgebildet sein können. Das Verfahren ist also grundsätzlich ebenso auf hyperthreading-fähigen Prozessoren ausführbar.
-
Alternativ kann bei Nutzprogrammen mit beispielsweise bekannter Laufzeit, die in den Nebenprozessoren B1, B2, B3, B4 abgearbeitet werden, bei denen weder ein Betriebssystem für Multitasking noch ein Uhrzeitinkrement I1, I2 benötigt werden, eine Verzögerungszeit, die größer als die Laufzeit der Nutzprogramme ist, implementiert sein, nach deren Ablauf die errechneten Ausgaben synchron an die Hauptprozessorkerne A1, A2 übergeben werden. Die Verzögerungszeit ist dabei entsprechend so zu wählen, dass zu berechnenden Ausgaben bei Ablauf der Verzögerungszeit in den verschiedenen Nebenprozessorkernen B1, B2, B3, B4 vorliegen, so dass eine synchrone Übergabe trotz möglicher Laufzeitunterschiede an den jeweiligen Hauptprozessorkern A1, A2 möglich wird. Auf den Ablauf der Verzögerungszeit wird aktiv gewartet.
-
Das Verfahren ist grundsätzlich auch mit nur einem Mehrkernprozessor betreibbar und daher von der Erfindung eingeschlossen, um z. B. Entwicklungs- und Testläufe vereinfacht zu unterstützen. Dann entfällt entsprechend die Synchronisation mit weiteren Kanälen, da diese nicht vorhanden sind.
-
Um sicherzustellen, dass im Speicherbereich der Nebenprozessorkerne B1, B2, B3, B4 sich kein schlummernder Fehler etabliert, der in einem anderen Kanal sich unerkannt gleichartig manifestieren kann, kann vorteilhaft auch in den Nebenprozessorkernen B1, B2, B3, B4 stetig über den verwendeten Speicher ein Hashwert gebildet und zum Abgleich an den zugehörigen Hauptprozessorkern A1, A2 übertragen werden.
-
Auf dem jeweiligen Hauptprozessorkern A1, A2 und den jeweiligen Nebenprozessorkernen B1, B2, B3, B4 können die gleichen oder auch unterschiedliche Betriebssysteme laufen, wobei diese stets voneinander separiert sind. Dadurch ergibt sich die Möglichkeit, die Nutzprogramme für die Nebenprozessorkerne B1, B2 als eigene, zusätzliche Images zu laden. Dies reduziert die Komplexität bei Updates und Wartungen.
-
Grundsätzlich braucht der jeweilige Hauptprozessorkern A1, A2 keine projektspezifischen Applikationen bzw. Nutzprogramme zu erhalten, da die Rechenleistung für die spezifischen Nutzprogramme alleine durch die Nebenprozessorkerne B1, B2, B3, B4 bewirkt wird. Somit kann sich der jeweilige Hauptprozessorkern A1, A2 alleine um die Kommunikationslast kümmern, was potentiell die Anzahl der möglichen handhabbaren Kanäle für die auf dem Hauptprozessorkern A1, A2 laufenden Sicherheitsprotokolle erhöhen könnte. Es ist aber auch von der Erfindung eingeschlossen, dass durchaus auch auf den jeweiligen Hauptprozessorkernen A1, A2 je nach Auslastung Programme bearbeitet werden können.
-
Um eine Diagnosesoftware weiterhin konfliktfrei mit einer Diagnoseschnittstelle betreiben zu können, ist es zudem vorteilhaft, dass die Diagnoseschnittstellen-Zugriffe der Nebenprozessorkerne B1, B2, B3, B4 über den Hauptprozessorkern A1, A2 geroutet werden oder die Hardware ermöglicht gesonderte Zugänge per FPGA (field programmable gate array). Somit hätte jeder Prozessorkern seine Diagnoseschnittstelle, obwohl nur ein physischer Diagnoseschnittstellenzugang existiert.
-
In 2 wird das erfindungsgemäße Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren schematisch zusammengefasst. In einem ersten Schritt S1 erfolgt das Bereitstellen einer Mehrzahl von Mehrkernprozessoren MC1, MC2 jeweils umfassend einen Hauptprozessorkern A1, A2, mindestens einen Nebenprozessorkern B1, B2, B3, B4, der zur Abarbeitung von Nutzprogrammen dient. In einem zweiten Schritt S2 erfolgt das Synchronisieren des ersten Mehrkernprozessors MC1 mit dem zweiten Mehrkernprozessors MC2 derart, dass nur der jeweilige Hauptprozessorkern A1 des ersten Mehrkernprozessors MC1 mit dem Hauptprozessorkern A2 des zweiten Mehrkernprozessors MC2 synchronisiert. In einem dritten Schritt S3 erfolgt das Steuern des mindestens einen Nebenprozessorkerns B1, B2, B3, B4 durch den jeweiligen Hauptprozessorkern A1, A2 in jedem Mehrkernprozessor MC1, MC2. Die Steuerung des mindestens einen Nebenprozessorkerns B1, B2, B3, B4 erfolgt in jedem Mehrkernprozessor MC1, MC2 in gleicher Weise. In einem weiteren Schritt S4 wird das Bearbeiten der Nutzprogramme durch den mindestens einen Nebenprozessorkern B1, B2, B3, B4 und Erzeugen von Ausgaben, die dem jeweiligen Hauptprozessorkern A1, A2 des gleichen Mehrkernprozessors MC1, MC2 zur Verfügung gestellt werden. In einem weiteren Schritt S5 erfolgt das synchrone Ausgeben von Ausgaben der Mehrzahl von Mehrkernprozessoren MC1, MC2 durch den jeweiligen Hauptprozessorkern A1, A2.
-
Zusammengefasst wird ein Verfahren zum synchronisierten Betrieb von einer Mehrzahl von Mehrkernprozessoren MC1, MC2 vorgeschlagen, bei dem synchronisierte Ausgaben erzeugt werden, wobei die Rechenkapazitäten der Mehrkernprozessoren MC1, MC2 zum parallelen Ausführen von Programmen ausgelastet wird. Dabei werden die Aufgabenbereiche zwischen den verschiedenen Prozessorkernen innerhalb eines Mehrkernprozessors MC1, MC2 hierarchisiert, wobei ein Hauptprozessorkern A1, A2 als Synchronisationsmaster agiert und der oder die Nebenprozessorkerne B1, B2, B3, B4 zu Slave-Rechenknechten degradiert werden, die mit der Synchronisation des Hauptprozessorkerne A1, A2 nicht interferieren.
-
Als Vorteil ergeben sich eine effizientere Nutzung der Rechenkapazitäten sowie damit verknüpft eine Einsparung an Hardwareaufwand. Zudem können nun auch Mehrkernprozessoren in sicherheitsrelevanten Systemen unter Ausnutzung ihrer erhöhten Rechenleistung genutzt werden.
-
Obwohl die Erfindung im Detail durch bevorzugte Ausführungsbeispiele näher illustriert und beschrieben wurde, so ist die Erfindung nicht durch die offenbarten Beispiele eingeschränkt und andere Variationen können vom Fachmann hieraus abgeleitet werden, ohne den Schutzumfang der Erfindung zu verlassen.
-
Bezugszeichenliste
-
-
- MC1, MC2
- Mehrkernprozessor
- A1, A2
- Hauptprozessorkern
- B1, B2, B3, B4
- Nebenprozessorkern
- I1, I2
- Uhrzeitinkrement
- E1, E2
- Ein-/Ausgabeeinheit
- SE
- Synchronisierungseinheit
- M1, M2
- gemeinsamer Speicher
- V
- Voterbaustein
- S1, S2, S3, S4, S5
- Schritt