Anbieter zum Thema
Multicore Task Management API (MTAPI)
Um die Leistung von Multicore-Prozessoren ausnutzen zu können, muss die zu verrichtende Arbeit in kleine Teile (Tasks) zerlegt werden. Da Threads für diesen Zweck in der Regel zu schwergewichtig sind, wurden in den letzten ein bis zwei Jahrzehnten effiziente Scheduling-Verfahren entwickelt, die ausführbereite Tasks auf die vorhandenen Kerne abbilden. Mit MTAPI stehen seit einigen Jahren auch standardisierte Schnittstellen für die Erzeugung, Verwaltung und Synchronisation von Tasks zur Verfügung.
Wesentliche Ziele bei der Definition von MTAPI waren die Benutzbarkeit in kleinen, ressourcenbegrenzten Systemen über eine leichtgewichtige API sowie die Unterstützung von heterogenen Systemen mit verteiltem Speicher und unterschiedlichen Befehlssatzarchitekturen. Zudem setzt MTAPI nicht notwendigerweise ein Betriebssystem voraus, sondern kann auch direkt auf der Hardware (bare metal) betrieben werden.
Bild 2 in der Bildergalerie illustriert die Programmierung von heterogenen Systemen mit MTAPI. Das Beispielsystem besteht aus einer Multicore-CPU mit vier Kernen, wobei ein Kern eine besondere Rolle mit eigenem Betriebssystem einnimmt, einem Graphikprozessor (GPU) und einem Signalprozessor (DSP). Diese Komponenten werden jeweils durch einen MTAPI-Knoten (Node) repräsentiert und bilden zusammen eine Domäne (Domain).
Als Benutzer kann man entweder explizit angeben, auf welchem Knoten ein Task ausgeführt werden soll, oder die Entscheidung darüber dem Scheduler überlassen. EMB² verwendet standardmäßig für das Scheduling innerhalb eines Knotens prioritätsbasiertes Work Stealing, während innerhalb einer Domäne Tasks in Abhängigkeit der Knotenauslastung verteilt werden. MTAPI selbst gibt jedoch keine Scheduling-Verfahren vor und so ist es auch in EMB² möglich, eigene Scheduling-Algorithmen einzusetzen.
Neben Tasks kennt MTAPI zwei weitere, damit verwandte Konzepte: Jobs und Actions. Ein Task ist gemäß MTAPI-Spezifikation die Ausführung eines Jobs mit bestimmten Daten. Ein Job wiederum repräsentiert die auszuführende Funktion auf einer abstrakten Ebene. Jeder Job wird durch mindestens eine Action implementiert. Auf diese Weise können in heterogenen Systemen Implementierungen für verschiedene Prozessoren hinterlegt werden. Eine Action kann sogar komplett in Hardware implementiert sein. Bild 3 in der Bildergalerie verdeutlicht den Zusammenhang zwischen Tasks, Jobs und Actions.
Da Actions sehr unterschiedlicher Natur sein können, stellt EMB² eine Plugin-Schnittstelle zur Verfügung, über die benutzerdefinierte Actions in MTAPI integriert werden können. So kann zum Beispiel eine FPGA-basierte Action mittels Plugin einem Job zugeordnet und transparent zu anderen Actions ausgeführt werden. Neben der Unterstützung heterogener Systeme hat die Trennung von Jobs und Actions den Vorteil, dass sich damit Applikationen für eine aus unterschiedlichen Hardware-Konfigurationen bestehende Produktfamilie auf einheitliche Weise entwickeln lassen.
EMB² stellt vordefinierte Plugins für häufig benutzte Technologien zur Verfügung. Das Beispiel im Quellcode 1 in der Bildergalerie zeigt die Erzeugung einer Action für OpenCL-Code. Zunächst wird die entsprechende Header-Datei eingebunden, der OpenCL-Kernel definiert und anschließend das Plugin initialisiert.
Im Quellcode 2 in der Bildergalerie kann die Action registriert und OPENCL_JOB zugeordnet werden.
Dabei sind local_work_size und element_size OpenCL-spezifische Argumente, und node_local verweist auf gemeinsam genutzte Daten innerhalb des Knotens [5, 6]. Be-vor der Job durch einen Task ausgeführt wird, können ihm optional weitere Actions zu-geordnet werden [2].
Zusammenfassung
Die parallele Programmierung gewinnt auch bei der Entwicklung eingebetteter Systeme zunehmend an Bedeutung, da von Singlecore-Prozessore keine wesentliche Geschwindigkeitssteigerung mehr zu erwarten ist. Herkömmliche threadbasierte Ansätze sind jedoch oft fehleranfällig, ineffizient und umständlich zu benutzen. Eine weitere Herausforderung bilden heterogene Systems-on-a-Chip, die verschiedenartige Prozessoren auf einem Chip vereinigen. Standardisierte Schnittstellen wie MTAPI helfen, von dieser Diversität zu abstrahieren und Parallelität auf Systemebene effizient zu nutzen.
Automatische Multi-Core-Echtzeitvalidierung
Quo vadis, Multicore?
Literaturverzeichnis
- [1] H. Alkhatib, P. Faraboschi, E. Frachtenberg, H. Kasahara, D. Lange, P. Laplante, A. Merchant, D. Milojicic, K. Schwan. “IEEE CS 2022 Report”. IEEE Computer Society, 2014.
- [2] “Multicore Task Management API (MTAPI) Specification V1.0”. The Multicore Association, 2013.
- [3] M. Herlihy, N. Shavit. “On the Nature of Progress”. International Conference on Principles of Distributed Systems (OPODIS), Springer, 2011.
- [4] T. Schüle. “Embedded Multicore Building Blocks – Parallel Programming Made Easy“. Embedded World, 2015.
- [5] Embedded Multicore Building Blocks – Tutorial, 2015.
- [6] Embedded Multicore Building Blocks – Reference Manual, 2015.
* Dr. Tobias Schüle ist Senior Key Expert Engineer, zertifizierter Software-Architekt und Projektleiter bei Siemens Corporate Technology, der zentralen Forschung und Entwicklung von Siemens. Sein Hauptinteresse gilt neben der parallelen Programmierung der Architektur und Entwicklung von eingebetteten Systemen.
(ID:44289616)