Beschreibung
Verfahren zum Betreiben eines Prozessors Die vorliegende Erfindung betrifft ein Verfahren zum Betrei¬ ben eines Prozessors. Überdies betrifft die vorliegende Er¬ findung einen Prozessor. Schließlich betrifft die vorliegende Erfindung ein Automatisierungsgerät mit einem Prozessor. Moderne Prozessoren haben heute mehr als einen Rechenkern und werden als MultiCore-Prozessoren (MC) bezeichnet, weil sie mehrere Programme echt parallel ausführen können. Jedes Pro¬ gramm läuft dabei auf einem eigenen Prozessorkern (Core) und muss sich diesen mit all seinen Untereinheiten wie Fließkom- maarithmetik-Einheit (Floating point unit, FPU) mit keinem anderen Programm teilen, solange es läuft.
Bereits vor den ersten MultiCore-Prozessoren gab es Ansätze, eine gewisse Parallelität dennoch herzustellen, ohne gleich einen zusätzlichen vollständigen Rechenkern neben dem bereits vorhandenen vorzusehen. Diese Technik ist als Hyper-Threading (HT) bekannt. Hierbei besteht ein Prozessorkern aus Einhei¬ ten, die verschiedene Aufgaben bearbeiten. Beispiele hierfür sind z. B. die Load-Storage-Unit (LSU) , die Daten zwischen Prozessorregistern und Speicher austauscht oder die Arithme- tic-Logical-Unit (ALU) , die für Ganzzahlberechnungen zuständig ist.
Diese Einheiten können selbst in einem Prozessor mit einem Prozessorkern bereits teilweise parallel arbeiten, sofern die Daten vorhanden sind. So kann die ALU mit Werten in bestimmten Registern arbeiten, während die LSU andere Register lädt oder in den Speicher überträgt. Der Prozessor besitzt intern eine sogenannte Pipeline in der die einzelnen Befehle hinter- einander abgearbeitet werden, wobei die einzelnen Stufen der Pipeline die verschiedenen Einheiten im Prozessor abbilden. Meistens müssen die Einheiten jedoch auf einander warten, sodass die Pipeline nur teilweise gefüllt werden kann und die
theoretisch mögliche Rechenleistung nicht ausgenutzt wird. Diese Einschränkung wird von den HT-Prozessoren weitgehend aufgehoben, indem sie dem Betriebssystem zwei oder mehr Prozessoren vorspielen, obwohl sie intern nur Teile der zusätz- liehen Prozessoren mehrfach verfügbar haben.
So können beispielsweise auf einem Prozessor mit einem Pro¬ zessorkern (Single-Core-Prozessor) zwei Programme quasi parallel laufen. Jedes Programm umfasst dabei eine Liste an Be- fehlen ( Instruction-Queue ) , die nacheinander abgearbeitet werden müssen. In einem Single-Core-Prozessor ist die Reihenfolge eindeutig und die Laufzeit der Befehlskette auch nach beliebig vielen Durchläufen immer gleich. Die Programme laufen in diesem Fall deterministisch. In einem HT-Prozessor hingegen mischt der Prozessor intern die Befehle aus den zwei zur Verfügung stehenden Befehlslisten, um die Pipeline möglichst optimal zu füllen und die theoretisch mögliche Gesamt¬ rechenleistung zu erreichen. Dies gelingt bei vielen Programmen recht gut, wobei aufgrund der Tatsache, dass nicht alle Einheiten mehrfach vorhanden sind, nicht die doppelte oder n-fache Leistung erreicht wer¬ den kann. Vor allem komplexe Einheiten wie die FPU sind bei HT-Prozessoren normalerweise nur einmal verfügbar. Laufen zwei Programme parallel, die beide eine Fließkomma-Arithmetik betreiben, ist der HT-Prozessor nicht schneller als ein normaler Single-Core-Prozessor. Da dies aber üblicherweise selten der Fall ist, ermöglicht ein HT-Prozessor grundsätzlich eine Steigerung der Rechenleistung.
Ein Nachteil dabei ist jedoch, dass die Laufzeit des einen Programms nicht mehr vorhersagbar ist, da sie in erheblichem Maß von den Befehlen des zweiten Programms abhängt. Bei vie¬ len Durchläufen werden sich daher viele unterschiedliche Laufzeiten ergeben. Der Determinismus spielt bei Standard- Betriebssystemen (General-Purpose-Operating-Systems, GPOS) keine Rolle, da hier die Programme nicht von einer bestimmten Zeit ihre Aufgabe erledigen müssen. Im Bereich der Echtzeit-
Systeme, bei denen auch Echtzeit-Betriebssysteme (Real-Time- Operating-System, RTOS) eingesetzt werden, ist die vorhersag¬ bare Laufzeit aber essentieller Bestandteil der Applikation. Der oben genannte Umstand hat die Nutzung von HT-Prozessoren für Echtzeit-Systeme verhindert. In vielen Konfigurationen läuft neben der Echtzeit-Anwendung noch eine Nicht-Echtzeit- Applikation, wie z. B. eine Bedienoberfläche. Die HT- Prozessoren böten eine kostengünstige Alternative gegenüber echten MultiCore-Prozessoren, um höhere Rechenleistungen zumindest für Nicht-Echtzeit-Applikationen zu bekommen, können aber wegen der massiven zeitlichen Einflüsse auf die Laufzeit der Echtzeit-Anwendung nicht verwendet werden. Selbst echte MultiCore-Rechner weisen noch gewisse Einschränkungen auf, sobald neben dem Prozessor, in dem alle Einheiten mehrfach vorhanden sind, weitere Komponenten wie Speicher oder Peripherie verwendet werden, die nur einmal im gesamten System vorhanden sind und somit zu gegenseitigen Blockaden der einzelnen Programme führen können.
Daher ist es Aufgabe der vorliegenden Erfindung, einen Weg aufzuzeigen, wie die Leistung und die Zuverlässigkeit eines Prozessors gesteigert werden können.
Diese Aufgabe wird erfindungsgemäß durch ein Verfahren zum Betreiben eines Prozessors gemäß Patentanspruch 1 gelöst. In gleicher Weise wird diese Aufgabe durch einen Prozessor gemäß Patentanspruch 7 und durch ein Automatisierungsgerät gemäß Patentanspruch 10 gelöst. Vorteilhafte Weiterbildungen der vorliegenden Erfindung sind in den Unteransprüchen angegeben.
Das erfindungsgemäße Verfahren zum Betreiben eines Prozessors umfasst das Bereitstellen eines ersten Programms mit einer ersten Folge von Befehlen, das Bereitstellen zumindest eines zweiten Programms mit einer zweiten Folge von Befehlen, wobei das erste Programm einen zeitkritischen Abschnitt mit zeitkritischen Befehlen umfasst, das Bearbeiten der Befehle aus
dem ersten und zweiten Programm in einer Prozessor-Pipeline, das Erkennen eines StartZeitpunkts eines zeitkritischen Ab¬ schnitts in dem ersten Programm und das Einfügen eines zuvor festgelegten Unterbrechungsprogramms in das zumindest eine zweite Programm, sobald der StartZeitpunkt des zeitkritischen Abschnitts in dem ersten Programm erkannt wird.
Unter dem Begriff Befehl ist insbesondere ein Maschinenbefehl des Prozessors zu verstehen. Die Befehle können den jeweili- gen Einheiten des Prozessors zugeordnet sein. Der Begriff Abschnitt bezeichnet insbesondere eine Mehrzahl von zusammen¬ hängenden Befehlen. Als Programm ist insbesondere eine Liste von Befehlen zu verstehen, die von dem Prozessor abgearbeitet wird, um ein bestimmte Funktionalität zu erreichen. Dabei können die Befehle entsprechenden Abschnitten zugeordnet sein .
Vorliegend werden auf einem Prozessor zumindest zwei Programme bereitgestellt, die jeweils eine Folge von Befehlen umfas- sen. Diese Programme werden auch als Instruction-Queues be¬ zeichnet. Der Prozessor umfasst zumindest zwei logische Ker¬ ne, wobei jedem der logischen Kerne ein Programm zugeordnet ist. Somit ist der Prozessor wie ein Hyper-Threading- Prozessor (HT-Prozessor ) ausgebildet. Vorliegend kann das erste Programm auf dem Prozessor einen zeitkritischen Abschnitt bzw. zeitkritische Befehle oder Befehlsfolgen umfas¬ sen. Das erste Programm kann also zeitunkritische Abschnitte und zeitkritische Abschnitte umfassen. Der Prozessor oder ein auf einer Speichereinrichtung des Prozessors ausgeführtes Betriebssystem ist dazu ausgebildet, ei¬ nen StartZeitpunkt des zeitkritischen Prozesses in dem ersten Programm zu erkennen. Sobald der StartZeitpunkt des zeitkritischen Prozesses in dem ersten Programm erkannt wird, wird ein zuvor festgelegtes Unterbrechungsprogramm in das zumindest eine zweite Programm eingefügt. Mit anderen Worten wird der momentan auf dem zumindest zweiten Programm bereitgestellte oder bearbeitete Abschnitt durch ein entsprechendes
Unterbrechungsprogramm unterbrochen bzw. angehalten. Dieses Unterbrechungsprogramm kann eine Abfolge von Befehlen beinhalten, die zuvor bekannt bzw. festgelegt sind. Somit ist das Unterbrechungsprogramm genau vorhersagbar. In dem Unterbre- chungsprogramm ist bevorzugt genau bekannt, welche Befehle durchgeführt werden und auf welche Teile des Prozessors dabei zugegriffen wird. Somit kann ein Prozessor auf dem zeitkritische Befehle bzw. Abschnitte bearbeitet werden auch für nicht zeitkritische Teile eines Systems zugänglich gemacht werden, ohne dass dabei die zeitkritischen Prozesse negativ beein- flusst werden. Der wesentliche Aspekt, warum die Vermischung der Abschnitte bzw. Befehlen in einem üblichen HT-Prozessor zu einer nicht-deterministischen Abarbeitung einer Befehlsliste führt, ist die Unvorhersagbarkeit , welcher Befehl je- weils in dem anderen Programm steht. Dieses Problem wird erfindungsgemäß dadurch gelöst, dass die Befehle bzw. Abschnit¬ te der anderen Programme definiert werden, die im Falle einer zeitkritischen Prozessfolge noch bearbeitet werden dürfen. Bevorzugt wird mit dem Start des zeitkritischen Abschnitts in dem ersten Programm ein Unterbrechungssignal an das zweite Programm zum Einfügen des Unterbrechungsprogramms gesendet. Der zeitkritische Abschnitt bzw. die zeitkritische Sequenz kann generell durch einen Interrupt gestartet werden, da der zeitkritische Prozessor auf ein Ereignis reagieren muss. Ein solches Ereignis kann entweder zyklisch, beispielsweise von einem Timer gesteuert, auftreten. Ebenso kann ein solches Ereignis sporadisch in Folge eines Alarms auftreten. Der Start des zeitkritischen Abschnitts bzw. der zeitkritischen Sequenz in dem ersten Programm überträgt nun ein Unterbrechungssignal bzw. einen Interrupt an das zumindest zweite Programm des Prozessors, wobei das zweite Programm aus Sicht des Betriebs¬ systems als eigenständiger und vollständiger Kern gesehen wird. Das in dem zweiten Programm eingefügte Unterbrechungs- programm, das auch als Interrupt-Service-Routine (ISR) be¬ zeichnet werden kann, bringt nun den zweiten Prozessorkern in einem definierten Zustand. Somit kann bei einem Prozessor mit zumindest zwei logischen Kernen der zumindest zweite logische
Kern in einem definierten Zustand gebracht werden, wenn dem ersten logischen Kern ein zeitkritischer Abschnitt erkannt wird . In einer bevorzugten Aus führungs form wird der zeitkritische Abschnitt zusammen mit dem Unterbrechungsprogramm in einer vorhersagbaren Reihenfolge in der Prozessor-Pipeline bearbei¬ tet. Wenn in dem ersten Programm ein zeitkritischer Abschnitt erkannt wird, wird in dem zumindest zweiten Programm ein zu- vor definiertes bzw. festgelegtes Unterbrechungsprogramm eingefügt. Da dieses Unterbrechungsprogramm, das auch als Idle- task bezeichnet werden kann, aus bekannten Befehlen besteht, wird die Vermischung mit den nicht bekannten Befehlen des zeitkritischen Abschnitts in der Prozessor-Pipeline dennoch eindeutig. Dies hat zur Folge, dass sich insbesondere bei mehreren Durchläufen des zeitkritischen Programms immer die gleichen Laufzeiten ergeben.
Die Stilllegung des zweiten oder auch mehrerer logischer Ker- ne bzw. Programme mittels des Unterbrechungsprogramms ermög¬ licht es dem zeitkritischen Abschnitt den notwendigen Determinismus zu behalten. Zudem kann mit dem beschriebenen Verfahren bei der Bearbeitung von nicht zeitkritischen Programmen ein höherer Durchsatz gegenüber einer Ein-Prozessor- Lösung erreicht werden, da die nicht zeitkritischen Programme mehr als einen logischen Prozessorkern nutzen können, wenn momentan kein zeitkritischer Abschnitt bearbeitet wird. Wenn der zeitkritische Abschnitt nicht aktiv ist, können die nicht zeitkritischen Programme die zumindest zwei logischen Kerne des HT-Prozessors nutzen. Die nicht deterministische Vermi¬ schung ist dabei irrelevant, da die nicht zeitkritischen Pro¬ gramme nach ihrem Datendurchsatz bewertet werden, der durch die parallele Verarbeitung steigt. Somit kann die Leistung des gesamten Prozessors bzw. Geräts gesteigert werden, ohne dass die Zuverlässigkeit dabei beeinflusst wird.
Bevorzugt wird mit dem zeitkritischen Abschnitt auch das Un¬ terbrechungsprogramm beendet. Somit wird das zeitunkritische
Programm durch das Unterbrechungsprogramm nur für eine solche Zeitdauer unterbrochen bzw. stillgelegt, die der zeitkritische Abschnitt zur Bearbeitung benötigt. Im Anschluss daran kann auf beiden logischen Prozessorkernen wieder jeweils ein zeitunkritisches Programm bearbeitet werden. Somit kann die Bearbeitung der nicht zeitkritischen Programme bzw. Befehle auf dem Prozessor beschleunigt werden.
In einer Ausgestaltung umfasst das Unterbrechungsprogramm das Lesen eines Werts aus einem Speicher, das Vergleichen des gelesenen Werts mit einem zuvor festgelegten Wert und das erneute Starten des Unterbrechungsprogramms, falls sich der ge¬ lesenen Wert und der festgelegte Wert unterscheiden. In dem Unterbrechungsprogramm bzw. der Idletask wird zunächst ein Wert bzw. ein Datum aus einer zuvor festgelegten Speicherzelle gelesen. Im Anschluss wird verglichen, ob dieser Wert mit einem zuvor festgelegten Wert übereinstimmt. Ist es nicht der Fall, wird der Wert in dem Speicher erneut gelesen und somit die Routine von neuem gestartet. Mit diesen Befehlen ist ebenfalls definiert welche Einheiten des Prozessors verwendet werden. Hierbei werden insbesondere solche Einheiten verwendet, die in dem Prozessor mehrfach vorhanden sind bzw. die dem zweiten Programm bzw. dem zweiten logischen Kern alleine zustehen. Solche Einheiten können beispielsweise eine Load- Storage-Unit sein, die entsprechende Werte aus einem Speicher laden kann. Zudem kann eine sogenannte Compare-Unit verwendet werden, die entsprechende Werte vergleichen kann. Als Spei¬ cherzelle, aus der der Wert gelesen wird, kann insbesondere eine interne Speicherzelle des Prozessors verwendet werden. Somit kann verhindert werden, dass während des Unterbre¬ chungsprogramms auf den physikalischen Hauptspeicher zugegriffen wird. Somit sind die Einheiten des Prozessors be¬ kannt, die von dem Unterbrechungsprogramm verwendet werden. Die anderen Einheiten stehen uneingeschränkt dem Programm bzw. logischen Kern zur Verfügung, mit dem der zeitkritische Abschnitt bearbeitet wird. Dadurch wird die Laufzeit des zeitkritischen Abschnitts bzw. der Befehlsliste nicht negativ beeinflusst .
In einer Ausgestaltung wird das Unterbrechungsprogramm dadurch beendet, dass in den Speicher ein Wert geschrieben wird, der dem zuvor festgelegten Wert entspricht. Während des Unterbrechungsprogramms kann aus einem internen Speicher des Prozessors ein Wert gelesen werden und mit einem zuvor festgelegten Wert verglichen werden. Solange der zeitkritische Abschnitt nicht beendet bzw. abgearbeitet ist, wird der zuvor festgelegt Wert nicht in den Speicher geschrieben. Erst nach der Abarbeitung des zeitkritischen Abschnitts wird in den
Speicher der zuvor festgelegte Wert geschrieben. Somit wird auch die Routine des Unterbrechungsprogramms beendet. Dabei ist es vorteilhaft, eine Speicherzelle zu wählen, die inner¬ halb des Prozessors liegt und nicht im physikalischen Haupt- Speicher, so dass das Unterbrechungsprogramm bzw. die Idle- task keine singulären Ressourcen wie Speicheranbindung oder gar Bus-Systeme belegen kann. Somit kann auf einfache Weise das Unterbrechungsprogramm beendet werden und die zeitunkritischen Befehle können entsprechend auf den zumindest zwei Programmen bzw. logischen Kernen bearbeitet werden.
Der erfindungsgemäße Prozessor umfasst eine erste Prozessor¬ einheit zum Bereitstehen eines ersten Programms mit einer ersten Folge von Befehlen, zumindest eine zweite Prozessor- einheit zum Bereitstellen zumindest eines zweiten Programms mit einer zweiten Folge von Befehlen, wobei das erste Pro¬ gramm einen zeitkritischen Abschnitt umfasst, eine Prozessor- Pipeline zum Bearbeiten der Befehle aus dem ersten und zwei¬ ten Programm und eine Speichereinrichtung mit einem Betriebs- system, wobei der Prozessor dazu ausgebildet ist, das Be¬ triebssystem auszuführen und wobei der Prozessor oder das Betriebssystem dazu ausgebildet ist, den StartZeitpunkt des zeitkritischen Abschnitts in dem ersten Programm zu erkennen und ein zuvor festgelegten Unterbrechungsprogramm in das zu- mindest eine zweite Programm einzufügen, sobald der Start¬ zeitpunkt des zeitkritischen Abschnitts in dem ersten Pro¬ gramm erkannt ist.
Bevorzugt umfasst der Prozessor eine Datenaustauscheinheit und eine Vergleichseinheit, wobei die Datenaustauscheinheit dazu ausgebildet ist, während des Unterbrechungsprogramms ei¬ nen Wert aus einem Speicher zu lesen und wobei die Ver- gleichseinheit dazu ausgebildet ist, während des Unterbre¬ chungsprogramms den gelesenen Wert mit einem zuvor festgeleg¬ ten Wert zu vergleichen. Somit kann sichergestellt werden, dass während des Unterbrechungsprogramms nur bestimmte Ein¬ heiten des Prozessors verwendet werden. Bevorzugt werden sol- che Einheiten verwendet, die den jeweiligen logischen Prozessorkern bzw. Programm alleine zur Verfügung stehen. Ebenso kann bevorzugt ein interner Speicher des Prozessors verwendet werden . In einer weiteren Ausgestaltung umfasst der Prozessor zumindest zwei Prozessorkerne. Das zuvor beschriebene Verfahren zum Betreiben eines Prozessors kann neben HT-Prozessoren auch für echte MultiCore-Prozessoren verwendet werden, bei denen alle Kerne alle notwendigen Einheiten besitzen. Bei üblichen MultiCore-Prozessoren kann es selbst bei der strikten Aufteilung von zeitkritischen und zeitunkritischen Programmen, die den jeweiligen Prozessorkernen zugeordnet sind, zu einem nicht-deterministischen Verhalten führen, da beide Teilapplikationen auf andere Systemkomponenten wie Speicher oder Peri- pherie zugreifen. Vor allem letztere sorgt für Probleme, auch wenn die unterschiedlichen Applikationen verschiedene Peripherien verwenden, da die Verbindung von Prozessor mit mehreren Kernen zu den mehrfachen Peripherien über einzelne Bus- Systeme (meist PCI oder PCIe) aufgebaut wird. Die dadurch be- dingten möglichen gegenseitigen Blockaden können durch das beschriebene Verfahren ausgeschlossen werden.
Ein weiterer Vorteil ist das deterministische Cache- Verhalten, das durch das Verfahren ebenfalls ermöglicht wird. Sowohl in vielen MultiCore- als auch in HyperThreading-
Prozessoren teilen sich mehrere Kerne den Cache. Wenn eines der Programme oder Befehle in einem Kern nicht auf den Cache zugreifen kann, sondern auf den Hauptspeicher zugreifen muss,
verlangsamt sich die gesamte Ausführungszeit erheblich. Wenn bei der Ausführung eines zeitkritischen Abschnitts auf den zumindest einen weiteren Programm bzw. Kern ein definiertes Unterbrechungsprogramm betrieben wird, kann die Echtzeit- Applikation nicht durch ihr Cache-Verhalten beeinflusst werden .
Das erfindungsgemäße Automatisierungsgerät umfasst einen zu¬ vor beschriebenen Prozessor. Automatisierungsgeräte umfassen üblicherweise zwei wesentliche Funktionen, die eingentliche Steuerung eines physikalischen Prozesses und die
Kommunikation mit der Außenwelt. Die Kommunikation kann entweder durch eine Bedienoberfläche oder über eine
Netzwerkverbindung zu einem externen Bediengerät erfolgen. Die Steuerung der physikalischen Prozesse erfordert in der Regel die Einhaltung definierter Zeitbedingungen, während bei der Kommunikation schon durch die Trägkeit des Benutzers entsprechende Wartezeiten vorgesehen werden müssen. Die
Steuerungsfunktion, die üblicherweise einen zeitkritischen Abschnitt darstellt, nimmt meist nur einen geringen Teil der Rechenleistung des Prozessors in Anspruch. Die
Steuerungsaufgaben sollten aber zu jeder Zeit ausgeführt werden können. Die Kommunikationsprogramme nehmen
üblicherweise einen deutlich größeren Anteil der
Rechenleistung für die Visualisierung von Zuständen oder den Datenaustausch mit anderen Geräten in Anspruch. Durch die Verwendung des erfindungsgemäßen Prozessors können den
Kommunikationsprogrammen deutlich mehr Rechenleistung zur Verfügung gestellt werden. Zudem können durch den Prozessor Kosten eingespart werden.
Die zuvor im Zusammenhang mit dem erfindungsgemäßen Verfahre genannten Vorteile und Weiterbildungen können in gleicher Weise auf den erfindungsgemäßen Prozessor und das erfindungs gemäße Automatisierungsgerät übertragen werden.
Vorliegende Erfindung wird nun anhand der beigefügten Zeichnungen näher erläutert. Dabei zeigen:
FIG 1 eine schematische Darstellung der Programmabläufe in einem HyperThreading-Prozessor ;
FIG 2 eine schematische Darstellung der Befehlsanordnung von zwei Programmen, wobei das erste Programm einen zeitkritischen Abschnitt umfasst;
FIG 3 eine schematische Darstellung der Befehlsanordnung von zwei Programmen und einer Prozessor-Pipeline;
FIG 4 eine schematische Darstellung einer Testanordnung;
und
FIG 5 eine schematische Darstellung einer weiteren Testanordnung .
Nachfolgend näher geschilderte Ausführungsbeispiele stellen bevorzugte Aus führungs formen der vorliegenden Erfindung dar.
FIG 1 zeigt in einer schematischen Darstellung die Abarbeitung der Programme auf einem Prozessor gemäß dem Stand der Technik. Ein solcher Prozessor wird als HyperThreading- Prozessor bezeichnet. Der Prozessor umfasst einen Prozessor- kern, auf dem beispielsweise zwei Prozessoreinheiten vorgese¬ hen sind. Jede Prozessoreinheit ist hierbei einem Programm zugeordnet. Vorliegend wird auf dem Prozessor ein erstes Pro¬ gramm 10 und ein zweites Programm 12 betrieben. Das erste Programm 10 umfasst eine erste Folge von Befehlen 14 und das zweite Programm 12 umfasst die zweite Folge von Befehlen 16.
Die Reihenfolge der Befehle 14 in dem ersten Programm 10 und der Befehle 16 und dem zweiten Programm 12 sind eindeutig zu¬ geordnet. In dem ersten Programm 10 und in dem zweiten Pro- gramm 12 können zeitkritische und zeitunkritische Abschnitte bearbeitet werden. Die Befehle 14 aus dem ersten Programm 10 und die Befehle 16 aus dem zweiten Programm 12 werden in der Prozessor-Pipeline 18 bearbeitet. In der Prozessor-Pipeline
18 werden die Befehle 14 und 16 entsprechend sortiert und ab¬ gearbeitet. Hierbei ergibt sich in der Prozessor-Pipeline ei¬ ne nicht deterministische und ungeordnete Reihenfolge der ersten Befehle 14 und der zweiten Befehle 16.
Das erste Programm 10 und das zweite Programm 12 können als logische Prozessorkerne aufgefasst werden, wobei der Prozes¬ sor nur einen Prozessorkern umfasst. Hierbei können je nach Prozessorhersteller verschiedene Einheiten des Prozessors einfach oder mehrfach vorhanden sein. Üblicherweise liegen die Einheiten, die einfache Rechenaufgaben durchführen, mehrfach vor, wobei komplexere Einheiten nur einfach vorhanden sind . FIG 2 zeigt eine schematische Darstellung von zwei Programmen 10 und 12, wobei das erste Programm 10 einen zeitkritischen Abschnitt 52 umfasst. Ein solcher zeitkritischer Abschnitt 52 wird üblicherweise durch einen Interrupt gestartet, da dieser auf ein Ereignis reagieren muss. Ein solches Ereignis kann beispielsweise zyklisch auftreten oder nur sporadisch. Der
StartZeitpunkt des zeitkritischen Abschnitts 52 ist durch den Pfeil 22 gekennzeichnet. Das zweite Programm 12 umfasst einen zeitunkritischen Abschnitt 52. Der Prozessor oder ein auf einer Speichereinrichtung des Prozessors ausgeführtes Betriebssystem ist dazu ausgebildet, den Start bzw. den StartZeitpunkt des zeitkritischen Abschnitts 52 in dem ersten Programm zu erkennen. Sobald der Startzeitpunkt des zeitkritischen Abschnitts 52 in dem ersten Programm 10 erkannt wird, wird in das zweite Programm 12 ein zuvor festgelegtes Unterbrechungsprogramm 26 eingefügt.
Mit dem Start des zeitkritischen Abschnitts 52 wird ein ent¬ sprechendes Unterbrechungssignal bzw. einen Interrupt an das zweite Programm 12 gesendet. Dies hat zur Folge, dass der auf dem zweiten Programm 12 durchgeführte zeitunkritische Ab¬ schnitt 54 unterbrochen wird bzw. in dem zeitunkritischen Abschnitt 54 ein Unterbrechungsprogramm 26 eingefügt wird. Der
Interrupt der von dem ersten Programm 10 in das zweite Pro¬ gramm 12 übertragen wird, ist in der FIG 2 durch den Pfeil 28 gekennzeichnet . Das Unterbrechungsprogramm, das auch als Idletask bezeichnet werden kann, kann die folgenden Schritte umfassen:
- Lesen eines Werts aus einem Speicher,
- Vergleichen des gelesenen Werts mit einem zuvor festgeleg- ten und
- Erneutes Starten des Unterbrechungsprogramms, falls sich der gelesene Wert und der festgelegte Wert unterscheiden.
Mit dieser Befehlsfolge ist ebenfalls definiert, welche Ein- heiten des Prozessors verwendet werden. Vorliegend werden nur die Load-Storage-Unit und die Compare-Unit verwendet. Zudem wird bevorzugt auf einen internen Speicher des Prozessors zu¬ gegriffen . Mit dem Ende des zeitkritischen Abschnitts 52 wird auch das
Unterbrechungsprogramm 26 beendet. Wenn der zeitkritische Abschnitt 52 beendet ist, wird durch einen Schreibbefehl der zuvor bestimmte Wert in die Speicherzelle geschrieben, die von dem Unterbrechungsprogramm 26 permanent gelesen wird. Dies ist in FIG 2 beispielhaft durch den Pfeil 30 darge¬ stellt .
FIG 3 zeigt eine schematische Darstellung der Bearbeitung der Befehle in dem ersten Programm 10, in dem zweiten Programm 12 und in der Prozessor-Pipeline 18. Das erste Programm 10 um- fasst sowohl zeitunkritische Abschnitte 56 bzw. Befehle 32 sowie zeitkritische Abschnitte 52 bzw. Befehle 20. Wird in dem ersten Programm 10 der StartZeitpunkt eines zeitkriti¬ schen Abschnitts 20 erkannt, so wird in dem zweiten Programm 12 ein zuvor definiertes Unterbrechungsprogramm 26 eingefügt. Dabei wird der momentan auf dem zweiten Programm betriebene zeitunkritische Abschnitt 24 unterbrochen bzw. stillgelegt.
Die Abschnitte bzw. Befehle 20, 24, 26, 32 aus den Programmen 10 und 12 werden in der Prozessor-Pipeline 18 bearbeitet.
Bevor ein zeitkritischer Abschnitt 52 erkannt wurde, werden die Befehle 24, 32 des ersten Programms 10 und des zweiten
Programms 12 in einer unvorhersagbaren Reihenfolge abgearbei¬ tet und diese Befehlsabfolge ist in dem Bereich 38 in der Prozess-Pipeline 18 dargestellt. Sobald der Startpunkt eines zeitkritischen Abschnitts 52 erkannt wird, wird in das zweite Programm das Unterbrechungsprogramm 26 eingefügt. Das Unterbrechungsprogramm 26 umfasst die zuvor definierten Schritte. Durch die gemeinsame Abarbeitung des zeitkritischen Abschnitts 52 aus dem ersten Programm und des Unterbrechungs¬ programms 26 aus dem zweiten Programm 12 ergibt sich eine de- terministische und vorhersagbare Reihenfolge der Befehle 20, 26. Dies ist im Bereich 36 in der Prozessor-Pipeline darge¬ stellt. Nachdem der zeitkritische Abschnitt 52 beendet ist, wird auch das Unterbrechungsprogramm 26 beendet. Im Anschluss daran werden die zeitunkritischen Abschnitte 54, 56 aus dem ersten Programm 10 und dem zweiten Programm 12 bearbeitet. Dies ist durch den Bereich 34 in der Prozessor-Pipeline 18 dargestellt .
FIG 4 zeigt die schematische Darstellung einer Testanordnung zur quantitativen Auswertung des erfindungsgemäßen Verfahrens. Dabei umfasst ein erstes Programm einen zeitkritischen Abschnitt 52. Ein zweites Programm 12 umfasst einen nicht zeitkritischen bzw. einen zeitunkritischen Abschnitt 54. In einer ersten Testbedingung in das erste Programm 10 und das zweite Programm 12 jeweils einen logischen Kern eines Hy- perThreading-Prozesses zugeordnet sein. In einer weiteren Testbedingung können das erste Programm 10 und das zweite Programm 12 jeweils einen Prozessorkern eines Mehrkernprozessors (MultiCore-Prozessors ) zugeordnet sein.
In diesem Testszenario wird eine Fließkommaeinheit (Floating point Unit, FPU) für Berechnungen verwendet. Eine solche Fließkommaeinheit ist bei einem HT-Prozessor mit zwei logi-
sehen Kernen nur einmal vorhanden. Nachfolgend wird folgendes Testszenario realisiert: Der zeitunkritische Abschnitt 54 führt Permanentberechnungen durch, die die FPU benötigen. Der zeitkritische Abschnitt 52 wird entsprechend getriggert und führt ebenfalls Berechnungen auf der FPU durch. Dabei misst der zeitkritische Abschnitt 52 die Laufzeit für die Berech¬ nungen auf der FPU.
Die Abschnitte 52, 54 werden dabei gezielt auf die zwei logi¬ schen Kerne eines HT-Prozessors bzw. eines MC-Prozessors ver¬ teilt, sodass sie parallel die Programme 10, 12 füllen. Die nachfolgende Tabelle zeigt die Messwerte für die Laufzeit des zeitkritischen Abschnitts 52 in verschiedenen Testfällen, bei denen keine Maßnahmen in dem Betriebssystem oder dem Betriebssystem getroffen wurden. Bei jeder Messung wurden
60.000 Durchläufe vorgenommen.
Die Zeiten in der Zeile 2 zeigen sehr deutlich den Effekt bei dem HT-Prozessor, dass sich die Ausführungszeiten auf dem logischen Kern des Prozessors, auf dem der zeitkritische Ab¬ schnitt 52 läuft deutlich erhöht, wenn auf dem anderen Kern ebenfalls eine FPU-Applikation läuft. Im schlechtesten Fall wird sogar die doppelte Zeit benötigt, was der Fall ist, wenn beide logischen Kerne des HT-Prozessors parallel auf die FPU angewiesen sind. Auf einem echten MultiCore-Prozessor hingegen beeinflussen sich die beiden Abschnitte 52, 54 auf den beiden logischen Kernen überhaupt nicht, was ebenfalls zu er¬ warten war.
In der nachfolgenden Tabelle ist das erfindungsgemäße Verfah¬ ren umgesetzt, bei dem der zweite Kern bzw. logische Kern per Interrupt ein Unterbrechungsprogramm bzw. ein Idletask geschickt wird, sodass es nicht zu Kollisionen kommen sollte.
Wie die Messwerte deutlich zeigen, bleiben die Zeiten in die sem Fall sehr konstant. Sie sind gegenüber den obigen Werten leicht erhöht, bedingt durch den zusätzlichen Mechanismus,
bei dem zusätzlich ein Unterbrechungsprogramm 26 bearbeitet wird. Dafür sind in der ersten Zeile sogar die schlechtesten Zeiten besser als in der oben dargestellten Tabelle, da jegliche Beeinflussung durch Programme auf einem anderen logi- sehen Kern verhindert wird.
Zusammenfassend lässt sich feststellen, dass das erfindungs¬ gemäße Verfahren funktioniert und deutlich zur Verbesserung der Deterministik der zeitkritischen Abschnitte beiträgt. In den Zeiten, in denen der zeitkritische Abschnitt 52 nicht läuft, steht die vorherige Leistung für die anderen Kerne zur Verfügung .
Ein weiterer wichtiger Aspekt neben der gegenseitigen Beein- flussung der logischen Kerne eines HT-Prozessors sind auch die Zugriffe auf die Peripherie, da diese die zeitkritischen Abschnitte bzw. Applikationen empfindlich stören können, da Kollisionen auf einen Bus-System ebenfalls zu unvorhersagba- ren Verzögerungen führen können. In einem weiteren Testszena- rio wurde eine PCI-Karte in einem Rechner vorgesehen, die zyklisch in Abständen von einer Millisekunde Interrupts erzeugt. Die entsprechende Interrupt-Service-Routine (ISR) führt verschiedene Zeitmessungen durch und sendet ein Signal an die Applikation, die damit fortgesetzt wird. Die ISR nimmt dabei einen Schreibbefehl auf die PC-Karte vor.
Das Testszenario ist schematisch in FIG 5 dargestellt. Dabei umfasste ein MultiCore-Prozessor vier Kerne 40, 42, 44 und 46, das zeitkritische Programm 10 inklusive der ISR laufen im ersten Kern 40 des MultiCore-Prozessors , während auf dem an¬ deren drei Kern 42, 44, 46 jeweils eine entsprechende Appli¬ kation permanent lesend über einen PCI-Bus 48 auf eine PCI- Karte 50 zugreift. Die nachfolgende Tabelle zeigt die Messwerte, die auftreten, wenn das System wie beschrieben läuft. Insgesamt wurden 60. 000 Zyklen durchlaufen, um statistische Aussagen zu bekommen.
Minimale Zeit Mittlere Zeit Maximale Zeit (ns) (ns) (ns)
ISR-Latenz 6960 9210 10580
PCI-Lese-Befehl 1040 2007 2147
PCI-Schreib- 12 14 18
Befehl
Dauer ISR ins3910 6010 6533
gesamt
Durch die Verwendung des erfindungsgemäßen Verfahrens ergeben sich die Messwerte in der nachfolgenden Tabelle. Hier wurden ebenfalls 60.000 Zyklen durchlaufen.
Die Zeiten der ISR-Latenz verbessern sich im Mittel um 30% was auf eine reduzierte Busbelastung zurückzuführen ist. Die PCI-Lese-Zugriffe werden deutlich stabiler und unterliegen durch das erfindungsgemäße Verfahren kaum noch Schwankungen, während zuvor die schlechtesten Zeiten um ca. 100% über den besten lagen. Die PCI-Schreib-Zugriffe verlängern sich erwartungsgemäß gar nicht, da hier immer nur in einem Puffer geschrieben wird. Die Zeit, die dieser Wert braucht, bis er im Register der PCI-Karte angekommen ist, dürfte sich aber ebenfalls erheblich verbessern bzw. stabilisieren, was aber nicht nachgewiesen wurde. Die Laufzeit der ISR insgesamt geht im Mittel ebenfalls um über 30% zurück.
l g
Bezugs zeichenliste
10 Programm
12 Programm
14 Befehl
16 Befehl
18 Prozessor-Pipeline
20 Befehl
22 Pfeil
24 Abschnitt
26 Unterbrechungsprozess
28 Pfeil
30 Pfeil
32 Abschnitt
34 Bereich
36 Bereich
38 Bereich
40 Prozessorkern
42 Prozessorkern
44 Prozessorkern
46 Prozessorkern
48 PCI-Bus
50 PCI-Karte
52 Abschnitt
54 Abschnitt
56 Abschnitt