Verfahren, zur effizienten. Nutzung eines Zwei- oder Mehr- kernprozessors durch ein Betriebssystem
Die Erfindung beschreibt ein Verfahren zur Nutzung eines Dual- oder Multi-Core-Prozessors (Zwei- oder Mehrkernprozessors) durch ein Betriebssystem.
Zwei- und Mehrkernprozessoren sind im PC-Bereich (Personal Computer) seit wenigen Jahren Stand der Technik. Zunehmend finden Mehrkernprozessoren auch Eingang in Hardware, die Bestandteil von Detektions- und/oder Steuergeräten z.B. in Fahrzeugen ist.
Eine Verwendungsmöglichkeit von Multi-Core-Prozessoren liegt in einer Steigerung der Sicherheit von Berechnungen. Hierbei wird beispielsweise derselbe Algorithmus auf zwei Prozessorkernen nebeneinander bearbeitet und beide Ergebnisse miteinander verglichen. Beide Prozessorkerne liefern im Normalfall also ein redundantes Ergebnis und falls nicht, kann auf eine Störung geschlossen und weitere Maßnahmen ergriffen werden.
EP 2221723 AI zeigt beispielsweise einen Dual-Core- Prozessor und ein Verfahren zur Fehlerdetektion in einem Dual-Core-Prozessor , die zur parallelen bzw. redundanten
Berechnung in einem Steuergerät eines Kraftfahrzeugs eingesetzt werden können.
Ein Hauptmotiv beim Einsatz von Mehrkernprozessoren für den Einsatz in Kraftfahrzeugen liegt jedoch in einer Steigerung der Rechenleistung insbesondere durch eine bessere Verteilung von Rechenlasten auf mehrere Prozessorkerne. Bekannte Verfahren und Architekturen zum Einsatz von Zwei- oder Mehrkernprozessoren finden sich beispielsweise in:
[1] Scheidemann, K; Knapp, M; Stellwag, C: Load Balancing in AUTOSAR Multicore-Systemen ; Artikel in Elektronik auto- motive Heft März 2010 ; Seite 21 ff.
[2] www. autosar . org AUTOSAR_SWS_OS.pdf; Autosar 4.0 Speci- fication of Operating System
[3] www. osek-vdx. org; Operating System
In [2] wird bei Autosar 4.0 ein Dualcore-Prozessor angegeben, bei dem auf jedem Pro2essorkern ein Betriebssystem (Operating System, OS) läuft und sich beide Betriebssysteme bzw. Prozessorkerne synchronisieren. In der Praxis sind solche Dualcore-Betriebssysteme teuer und derzeit noch nicht sehr ausgereift.
In [1] werden allgemein drei prinzipiell verschiedene Stra- tegien angegeben, mit denen sich die Verteilung ausführbarer Einheiten auf einer Multicore- oder Multiprozessor- plattform werkzeuggestützt optimieren lässt. Die genannten Strategien sind jedoch in der Praxis nicht uneingeschränkt einsetzbar und z.T. ihrerseits nur sehr aufwendig mit ent- sprechenden Werkzeugen umzusetzen.
Aufgabe der Erfindung ist es, ein konkretes und effizientes Verfahren zur Nutzung eines Dual- oder Multi-Core- Prozessors durch ein Betriebssystem anzugeben.
Die Erfindung beschreibt ein Verfahren zur effizienten Nutzung von Dual-Core Prozessoren mit Hilfe von einem Standard Single-Core Betriebssystem. An dem Verfahren ist das Zusammenspiel der Software und des Prozessors (Hardware) betei- ligt. Die technische Aufgabe besteht darin, den zweiten Rechenkern effizient mit minimalem Mehraufwand zu nutzen, um insbesondere mehr bzw. komplexere Algorithmen in einem vorgegebenen Zeitrahmen oder einen vorgegebenen Algorithmus in einer kürzeren Zeit durchrechnen zu können.
Eingesetzt werden kann die Erfindung bevorzugt bei der Bildverarbeitung von Daten, die mittels einer Mono- oder Stereofahrzeugkamera aufgenommen wurden, und beispielsweise für Fahrerassistenzfunktionen wie Spurerkennung, Verkehrs- Zeichenerkennung und/oder automatische Lichtsteuerung analysiert und ausgewertet werden.
Ein erfindungsgemäßes Verfahren nutzt einen Dual- oder Mul- ti-Core-Prozessor durch ein nicht Multi-Core-fähiges Be- triebssystem mit einer zusätzlichen Synchronisation zwischen den Cores durch Interrupts, das heißt ein Standard Single-Core Betriebssystem läuft auf einem ersten Prozessorkern (Rechenkern) und zusätzlich erfolgt eine Synchronisation zwischen dem ersten und einem zweiten oder weiteren Prozessorkern (en) durch Interrupts. Unter einem Standard
Single-Core Betriebssystem wird ein Standard Betriebssystem verstanden, das auf einem Rechensystem mit nur einem einzigen Prozessorkern (Single-Core Prozessor) läuft. Ein Standard Single-Core Betriebssystem ist daher nicht fähig bzw. ausgelegt, um Mehrkernprozessoren zu betreiben.
Aus Sicht des Betriebssystems ist bevorzugt direkt nur ein Prozessorkern sichtbar. Die Implementierung von Aufgaben (Tasks) entscheidet darüber, auf welchen Prozessorkern eine Aufgabe übertragen wird.
Bevorzugt laufen auf dem zweiten (und gegebenenfalls weiteren) Prozessorkern ( en) im Gegensatz zum ersten Prozessorkern keine Betriebssystem-Routinen . Der zweite (dritte, vierte, ...) Prozessorkern kann somit beispielsweise aus- schließlich für rechenintensive algorithmische Berechnungen verwendet werden.
Auf dem ersten Prozessorkern läuft das Betriebssystem und optional können hier alle Hardwarezugriffe und externen Schnittstellen bedient werden.
Gemäß einer bevorzugten Ausführungsform übermittelt der erste Prozessorkern eine Aufgabe (Task) an den zweiten oder einen weiteren Prozessorkern durch einen Interrupt.
Bevorzugt führt der erste Prozessorkern für eine komplexe Aufgabe eine Art Vorverarbeitung durch, indem der die Aufgabe soweit modelliert oder abstrahiert, dass er dem zweiten oder weiteren Prozessorkern (en) klare Anweisungen er- teilen bzw. Vorschriften übermitteln kann, was diese (r)
Prozessorkern (e) zu berechnen hat bzw. haben und gegebenenfalls, in welcher Reihenfolge einzelne Teilberechnungen durchgeführt werden sollen. Dadurch können rechenintensive algorithmische Berechnungen effizient von dem zweiten oder weiteren Prozessorkern (en) erledigt werden.
Bevorzugt gibt bzw. geben der zweite oder weitere Prozes¬ sorkern (e) nach Fertigstellung der übermittelten Aufgabe eine Rückmeldung an den ersten Prozessorkern durch einen Interrupt.
In vorteilhafter Weise kann der erste Prozessorkern mehrere Aufgaben mit unterschiedlicher Priorität durch entsprechende Interrupt-Prioritäten auf den zweiten oder weitere Pro- zessorkern (e) übertragen. Hierbei können sich insbesondere die Aufgaben in Abhängigkeit ihrer Priorität auf beiden Prozessorkernen unterbrechen. Die Erfindung betrifft ferner einen Dual- oder Multicore- Prozessor umfassend einen ersten Prozessorkern mit Standard Single-Core Betriebssystemmitteln und einen zweiten oder weitere Prozessorkern (e) , wobei über die Standard Single- Core Betriebssystemmittel des ersten Prozessorkerns der zweite oder die weiteren Prozessorkern (e) durch Interrupts gesteuert wird/werden.
Die Erfindung bietet mehrere Vorteile.
Es ist nur ein Standard-Single-Core Betriebssystem erfor- derlich und es wird keine Dual-Core Erweiterung bzw. kein
Dual-Core oder Multi-Core fähiges Betriebssystem benötigt. Dadurch werden Kosten eingespart.
Es muss nur ein Betriebssystem konfiguriert werden. Dadurch ergibt sich ein einfaches und übersichtliches Betriebs- system-Design . Diese Betriebssystem-Konfiguration wird in [3] als OIL-Konfiguration bezeichnet. Die Konfiguration des Betriebssystems ist einfach.
Das Laufzeitverhalten wird komplett durch den ersten Prozessorkern verwaltet, dadurch ergibt sich eine einfache Überwachung des LaufZeitverhaltens . Zusätzlich ergibt sich eine einfachere Inbetriebnahme.
Es sind keine zusätzlichen Synchronisationsmechanismen erforderlich wie die „Barriers" in [1] , dadurch sind keine Warteschleifen notwendig.
Es ergibt sich auch kein zusätzlicher Verwaltungsaufwand {Verwaltungsoverhead) auf dem zweiten oder den weiteren Prozessorkern (en) , dadurch ist ein erfindungsgemäßes Verfahren sehr laufzeiteffizient
Das Verfahren ist sowohl auf Dual-Core Prozessoren als auch auf Multi-Core-Prozessoren lauffähig.
Die Ablaufkoordination (Scheduling) ist einfach zu überblicken. Dadurch ergeben sich kürzere Entwicklungszeiten und einfaches Debugging (Fehlersuche bzw. -eliminierung). Vorhandene Software kann leicht von einem Single-Core- auf einen Dual- oder Multi-Core-Prozessor portiert werden.
Anhand der Figur und am Beispiel eines Dual-Core Prozessors mit zwei Prozessorkernen (CoreO und Corel) wird anhand von
Ausführungsbeispielen die Funktionsweise eines erfindungs- gemäßen Verfahrens erläutert.
Die Figur zeigt ein Verfahren zur Nutzung eines Dual-Core- Prozessors durch ein Betriebssystem.
Das Betriebssystem läuft auf CoreO (einem ersten Prozessorkern) . Corel (ein zweiter Prozessorkern) wird durch das Betriebssystem gesteuert, ohne dass darauf ein eigenes Be- triebssystem läuft. Typischerweise werden auf CoreO neben algorithmischen Berechnungen alle Hardwarezugriffe und externen Schnittstellen bedient, während Corel für rechenintensive algorithmische Berechnungen verwendet wird. In der Fig. ist CoreO (links) von Corel (rechts) getrennt durch die gestrichpunktete vertikale Linie. Die Prozessorbelegung von CoreO und Corel wird durch die dicke schwarze Linie innerhalb der jeweiligen Rechtecke symbolisiert. Die Prozessorbelegung ist hier nur schematisch dargestellt, die tatsächlichen Zeiten können hiervon deutlich abweichen.
Nach einem Reset, der z.B. durch die Umgebung (ENV) ausgelöst wird, beginnt CoreO das Startup-Programm und die Initialisierung auszuführen. Anschließend wird durch CoreO der zweite Rechenkern Corel gestartet . Corel durchläuft nun ebenfalls das Startup-Programm und die Initialisierung. Nach Beendigung dieser Aufgaben schaltet Corel die erforderlichen Interrupts frei und wartet in der Hauptschleife (Core 1/mainloop) auf Interrupt-Anforderungen von CoreO.
Wenn das Betriebssystem auf CoreO eine Berechnungsaufgabe an Corel übertragen will, wird auf CoreO die dazugehörige Aufgabe bzw. Task (Taskl in der Figur) gestartet. Diese löst auf Corel einen Interrupt {Interrupt_Start_Taskl) aus. Durch die Interrupt-Nummer weiß Corel, welche Aufgabe er zu berechnen hat. Die Task auf CoreO geht nun in den Warte- Zustand (WaitEvent (EvCorelTasklEnd) ) und wartet auf die Rückmeldung von Corel. Das Betriebssystem auf CoreO kann sich, während sich Taskl im Wartezustand (WaitEvent (EvCorelTasklEnd) ) befindet, weiteren Aufgaben widmen .
Auf Corel wird die zugeordnete Rechenaufgabe durch die Interrupt-Service-Routine (Corel/ISRl) ausgeführt. Wenn die Berechnung auf Corel abgeschlossen ist, wird auf CoreO ein Interrupt { Interrupt ( EvCorelTasklEnd) ) ausgelöst, um zu signalisieren, dass die Berechnung beendet ist. Corel wartet nun wieder auf Interrupt-Anforderungen von CoreO . Der Interrupt auf CoreO sendet ein Event (EvCorelTasklEnd) an Taskl auf CoreO. Durch dieses Event wird diese Task (CoreO /Corel_Tas kl } wieder gestartet, um sich sogleich zu beenden (TaskTermninate) . Dadurch erkennt das Betriebssystem auf CoreO, dass die Berechnung auf Corel beendet ist und Core 1 für neue Aufgaben zur Verfügung steht.
Durch die Rückmeldung der Events über Interrupts von Corel kennt das Betriebssystem immer den aktuellen Status von Corel, ob dieser seine Rechenaufgabe beendet hat.
Anhand des oben skizzierten Beispiels für eine Task ist es möglich, mehrere Tasks mit unterschiedlicher Priorität durch entsprechende Interrupt-Prioritäten auf Corel zu übertragen, wobei sich die Tasks prioritätsgesteuert auf beiden Gores (CoreO und Corel) unterbrechen können (sogenanntes „preemptive scheduling" ) .
Ein Multi-Core-Prozessor mit N Prozessorkernen (CoreO, Corel, CoreW) würde entsprechend dem in der Figur darge- stellten betrieben, wobei jeder weitere Prozessorkern (CoreN nicht dargestellt} in derselben Weise wie der zweite Prozessorkern {Corel) in der Figur vom ersten Prozessorkern (CoreO) angesteuert werden (CoreN_mainloop und CoreA7_ISRl...J\7 nicht dargestellt) .