Die Nachfrage nach medizinischen Geräten mit neuen und fortschrittlichen Funktionen, wie komplexen Benutzerschnittstellen und High-Definition-Imaging (beides erfordert eine hohe Rechenleistung), erhöht auch den Bedarf für Multi-Core-Processing: Die Rechenleistung ist nicht allein durch Highend-Grafiksysteme bereitzustellen. So wie das Multi-Core-Processing immer mehr in der Konsumelektronik, beispielsweise bei Smartphones zu finden ist, wird sich dieses künftig auch immer mehr bei medizinischen Geräten durchsetzen.

Bild 1: Da die Anforderungen an die Rechenleistung immer weiter steigen, kann sich der Einsatz von Multi-Core schon für relativ kleine medizinische Geräte lohnen.

Bild 1: Da die Anforderungen an die Rechenleistung immer weiter steigen, kann sich der Einsatz von Multi-Core schon für relativ kleine medizinische Geräte lohnen.QNX

Beispielapplikation

Ein medizinisches Gerät für Patienten mit leichten kognitiven Beeinträchtigungen kann im Bereich des betreuten Wohnens zum Beispiel die Überwachung lebenswichtiger Funktionen übernehmen, einen Sturz oder Notfall erkennen und einen Alarm auslösen. Zudem kann es als Medikamenten-Dispenser dienen sowie visuelle und akustische Hinweise ausgeben, und so den Patienten bei allen Aktivitäten vom Essen bis hin zum Einkauf von Lebensmitteln unterstützen. Ein derartiges Gerät muss klein und tragbar sein, eine fortschrittliche, kontextsensitive Anwenderschnittstelle haben, Hinweise über den Aufenthaltsort und die jeweilige Aktivität des Patienten erkennen und ihn bei Bedarf mit Sprachanweisungen, Bildern oder Video unterstützen. Dies alles sind rechenintensive Aufgaben, für die Multi-Core-Processing meist die beste Lösung darstellt.

Auf einen Blick

Statt nur die Taktzahl zu erhöhen, setzen moderne Prozessoren und Mikrocontroller auf Multi-Core-Architekturen, um die Leistung zu erhöhen. Das hat auch Folgen für die Entwickler: Bei Safety-kritischen Medizingeräten empfiehlt QNX, auf symmetrisches Multiprocessing und passende Tools zu setzen.

Noch vor einigen Jahren haben die Halbleiteranbieter die Rechenleistung durch den Einsatz größerer Prozessoren mit höheren Taktraten gesteigert. Dieser Ansatz brachte für eine Single-Core-Entwicklung drei entscheidende Einschränkungen: der Stromverbrauch und die Wärmeerzeugung stiegen schneller als die Taktrate; die Speichergeschwindigkeit konnte nicht mit der Prozessorgeschwindigkeit schritthalten und die Ressourcen-, Steuer-, und Datenabhängigkeiten begrenzten die mit einem Single-Instruction-Stream mögliche Parallelität.

Um diese Einschränkungen zu vermeiden wurden Multi-Core-Prozessoren entwickelt. Da sie eine viel höhere Verarbeitungskapazität pro Gramm, Watt und Quadratmillimeter bieten als Single-Core-Prozessoren, spielen sie mittlerweile eine zentrale Rolle: Es gibt Mikrocontroller mit zwei, vier oder noch mehr integrierten Cores.

Die Gerätehersteller müssen sich bei der Implementierung eines Multi-Core-Systems entweder für a) die Migration eines bestehenden Single-Core-Systems auf Multi-Core oder b) das Design eines völlig neuen Multi-Core-basierenden Systems entscheiden. In der Praxis ist es meist sinnvoller und effizienter nur bestimmte Teile eines bestehenden Systems zu migrieren und andere neu zu entwickeln. Unabhängig von der gewählten Strategie ist die sorgfältige Auswahl des Betriebssystems entscheidend für den Erfolg des Projekts.

Multi-Core-Unterstützung im Betriebssystem

Ein medizinisches Gerät, bei dem Zuverlässigkeit und Verfügbarkeit zu den entscheidenden Anforderungen gehören, wird wahrscheinlich ein Echtzeit-Betriebssystem (RTOS, Real-time Operating System) benötigen. Dieses RTOS sollte einen symmetrischen Mehrprozessorbetrieb (SMP, Symmetric Multiprocessing) unterstützen, der eine einzige Instanz des RTOS für das Thread-Scheduling und das Ressourcen-Management aller Prozessor-Cores nutzt. Dieser Ansatz ist einfacher und bietet eine bessere Leistung als ein asymmetrischer Mehrprozessorbetrieb (AMP), der unterschiedliche Betriebssystem-Instanzen (oder sogar unterschiedliche Betriebssysteme) auf jedem Core nutzt.

Das ausgewählte RTOS muss verhindern, dass sich Fehler in einem Prozess auf das gesamte System ausbreiten, und es muss einzelne Prozesse beim Auftreten von Fehlern neu starten können. Dafür bietet sich eine Mikrokernel-Architektur an, bei der Anwendungen, Gerätetreiber, Dateisysteme und Netzwerk-Stacks alle außerhalb des Kernels in separaten Adressbereichen liegen und damit sowohl vom Kernel, als auch untereinander isoliert sind. Auf Grund der großen Zahl von Prozessen und Threads in einem Multi-Core-System ist ein Fehlerwiederherstellungs-Watchdog (Stichwort High Availability) ebenfalls sehr wichtig. Dieser Watchdog kann ausgefallene Prozesse wieder starten oder falls es die Situation erfordert, ein rechtzeitiges und geordnetes Abschalten des Systems veranlassen.

Bild 2: In diesem Beispiel kann der Patienten-Datenlogger durch die Prioritätsvererbung die hohe Priorität der Alarmsteuerung erben. Dies verhindert, dass der Daten-Aggregator den Datenlogger blockiert.

Bild 2: In diesem Beispiel kann der Patienten-Datenlogger durch die Prioritätsvererbung die hohe Priorität der Alarmsteuerung erben. Dies verhindert, dass der Daten-Aggregator den Datenlogger blockiert.QNX

RTOS-Eigenschaften

Um eine hohe Verlässlichkeit des Systems zu gewährleisten, sollte das RTOS außerdem folgende Punkte unterstützen:

  • Zeitpartitionierung (vorzugsweise adaptiv), so dass kritische Prozesse nicht zu viele CPU-Zyklen blockieren können.
  • Prioritätsvererbung, um Prioritätsinversionen zu verhindern (Bild 2).
  • Prozessoraffinität, besonders BMP (Bound Multi-Processing), eine Erweiterung von SMP, mit dem die Entwickler wichtige Prozesse und ihre Tochterprozesse zur Ausführung auf bestimmten Cores beschränken können.

Durch BMP können die Entwickler sicherstellen, dass ältere für Ein-Prozessor-Systeme entwickelte Anwendungen problemlos und ohne Anpassung laufen, zudem können sie genau festlegen, wie sie die einzelnen verfügbaren Cores nutzen wollen. Weniger kritische aber rechenintensive Prozesse, wie Benutzerschnittstelle und die Darstellung hochauflösender Bilder, lassen sich so zum Beispiel allen verfügbaren Cores oder einem Teil der Cores zuweisen. Die Entwickler können auch kritische Komponenten auf einen Core beschränken, um das Design, Debugging und die Validierung zu vereinfachen.

Bild 3: Die Screenshots zeigen, wie ein System-Profiler das Softwareverhalten eines Multi-Core-Systems analysiert.

Bild 3: Die Screenshots zeigen, wie ein System-Profiler das Softwareverhalten eines Multi-Core-Systems analysiert.QNX

Tools für Entwicklung und Validierung

Die Entwickler benötigen Tools, die das Design, Debugging und die Optimierung von Multi-Core-Anwendungen unterstützen. Das Multi-Core-RTOS sollte durch ein Tool-Set unterstützt werden, das eine Abschätzung der Lastverteilung, Identifizierung von Engpässen, Erkennung von Möglichkeiten für einen Parallelbetrieb erlaubt. Ferner sollte es möglich sein, die Interaktionen zwischen Threads auf mehreren CPUs zu charakterisieren und zu debuggen, sowie Threads oder ganze Prozesse von einem Core auf den anderen zu verlagern und die Auswirkungen auf die Systemleistung zu messen. Timing und Blocking können ein schwieriges Thema sein, deshalb sollte das Tool dem Entwickler Möglichkeiten bieten, um genau erkennen zu können, was die Prozessoren und Threads machen.

Zertifizierung

Konformität ist eine unverzichtbare Voraussetzung, um ein medizinisches Gerät auf den Markt bringen zu können. Neben einem geeigneten Betriebssystem und Tools ist für ein medizinisches Gerät daher außerdem eine gut geplante Zertifizierungsstrategie erforderlich.

Bild 4: Tests, statistische Analyse und Design-Validierung ergänzen einander bei der Validierung eines Softwaresystems, und zwar unabhängig davon ob es auf einem oder mehreren Cores läuft.

Bild 4: Tests, statistische Analyse und Design-Validierung ergänzen einander bei der Validierung eines Softwaresystems, und zwar unabhängig davon ob es auf einem oder mehreren Cores läuft.QNX

Bedenken, dass die Komplexität eines Multi-Core-Systems zu gewissen Problemen im Hinblick auf die Zertifizierung führt, haben einige Hersteller bislang daran gehindert, Multi-Core-Processing einzusetzen. Tatsächlich aber bedeutet die inhärente Komplexität von Single-Core- als auch von Multi-Core-Systemen in der Praxis, dass a) diese Systeme nicht einfach durch Tests validiert werden können und, dass b) die gleichen Verfahren genutzt werden können und sollten, um Single-Core und Multi-Core-Systeme zu validieren. Wer schon einmal eine Zertifizierung eines Systems durchgeführt hat, kennt die anzuwendenden Verfahren. Hierzu gehören:

  • Tests: Obwohl sich ausschließlich durch Tests nur das Vorhandensein von Fehlern und nicht die Abwesenheit von Fehlern nachweisen lässt, ist ein Test immer noch ein entscheidendes Element in der Systemvalidierungsstrategie.
  • Statistische Analyse: Durch die Untersuchung von Einsatzdaten von Geräten oder Komponenten im Feld, lässt sich mit einer statistischen Analyse die Zuverlässigkeit überprüfen. Zudem ist mittels einer bewussten Fehlereinfügung (Fault Injection) während der Validierung eine Abschätzung der Anzahl der in einem System noch vorhandenen Fehler möglich.
  • Fehlerbaumanalyse: Sie beginnt mit potenziellen oder tatsächlich festgestellten Ausfällen und ermöglicht eine Ermittlung der möglichen Ursachen für einen Ausfall.
  • Design-Verifizierung: Wird während der Entwicklung und nachträglich mit Tools wie SPIN und NuSMV, durchgeführt. Die Design-Verifizierung ist eine effektive Möglichkeit zur Überprüfung der Systemzuverlässigkeit.
  • Design-Artefakte: Ein ausgereifter Software-Lebenszyklus mit allen dazugehörigen Design-Artefakten, von Projektplan bis hin zur Traceability-Matrix, ist eine standardmäßige und entscheidende Komponente der Zertifizierung.

Obwohl es naiv wäre zu behaupten, dass die Validierung eines Multi-Core-Systems der eines Single-Core-System entspricht, müssen und können doch die gleichen Verfahren eingesetzt werden.

Des Pudels Kern

Wie in vielen anderen Bereichen gehört dem Multi-Core-Processing die Zukunft – und in einigen Fällen auch die Gegenwart – selbst bei einfachsten medizinischen Geräten. Multi-Core-Systeme sind zwar komplexer als Single-Core-Systeme, zudem ergeben sich einige neue Komplexitäten und Herausforderungen. Eine sorgfältige Auswahl des Betriebssystems speziell im Hinblick auf die Unterstützung von Prozessor-Affinität für Thread-Hierarchien und der Verfügbarkeit von entsprechenden Tools kann die Herausforderungen beim Systemdesign, sowie der Entwicklung und Validierung aber deutlich reduzieren.

Wie bei Single-Core-Systemen erfordert auch die Zertifizierung von Multi-Core-Systemen höchste Disziplin. Unabhängig davon ob ein, zwei oder 16 Prozessoren enthalten sind: Softwaresysteme sind heute zu komplex für eine Validierung ausschließlich durch Tests. Bei beiden Arten von Systemen müssen die gleichen Verfahren zur Validierung genutzt werden, und auch sonst gibt es für die Hersteller medizinischer Geräte keine Gründe, auf die Nutzung des immer leistungsfähigeren Multi-Core-Processing zu verzichten.