Software auf mehrere Cores verteilen Multi-Core: Was-wäre-wenn-Szenarien durchspielen

vfEmbedded hilft beim Partitionieren des Codes
vfEmbedded hilft beim Partitionieren des Codes

Je mehr Cores, desto größer die Herausforderung für die Software-Entwickler. Denn sie müssen sich überlegen, wie sie die Software auf die Cores verteilen. Je mehr Cores vorhanden sind, umso umfangreicher die möglichen Varianten. Ein Tool namens vfEmbedded hilft dabei, diese Szenarien durchzuspielen und die vorhandenen Ressourcen möglichst optimal zu nutzen.

Die Parallelisierung von bisher seriell ablaufenden Programmen ist eines, aber nicht das einzige Problem, vor dem Software-Entwickler stehen, wenn sie ihre Anwendungen auf eine Multi-Core-Architektur portieren. Denn Multi-Core ist nicht gleich Multi-Core. Beim Parallelisieren gibt es zunächst das symmetrische Multiprocessing (SMP), bei dem die Rechenlast möglichst gleichmäßig auf die vorhandenen Cores verteilt wird. Intel propagiert diese Methode für seine Tools und schärft den Entwicklern ein, sich bei der Entwicklung auf keinen Fall auf eine bestimmte Hardware-Architektur bzw. Anzahl von Cores festzulegen – das macht die Laufzeitumgebung.

Bei Embedded-Geräten wird dieser Verstoß gegen die "reine Lehre" jedoch oft mit voller Absicht praktiziert. Klassisches Beispiel für Dual-Core-Prozessoren ist: Echtzeit-Steuerung auf Core 1, Benutzeroberfläche auf Core 2. Das ist überschaubar und lässt sich händisch gut in den Griff bekommen. Läuft die gleiche Software jedoch auf eine Quad-Core-Prozessor, dann bleiben zwei Cores ungenutzt. Oder ein Redesign der Software ist fällig. Der Quad-Core könnte jetzt noch eine weitere Echtzeit-Aufgabe übernehmen. Oder gar zwei? Reicht dann ein Core noch für die Benutzeroberfläche? Noch schwieriger wird es, wenn ein Hardware-Beschleuniger ins Spiel kommt wie z.B. ein zusätzlicher Grafikprozessor oder ein Video-Codec. Bei der ARM-Architektur ist das Standard: viele unterschiedliche Kerne für spezielle Aufgaben wie Systemverwaltung, Audio- und Video-Verarbeitung, 2D- und 3D-Grafik etc.

Nicht zu viel, nicht zu wenig Prozessorleistung

Für diese Fälle bietet VectorFabrics seine Entwicklungswerkzeuge vfAnalyst und vfEmbedded an. Der schon seit neun Monaten bestehende vfAnalyst ist ein Tool, das den Vorgang der Partitionierung  von Software auf mehrere gleichartige (x86-)Cores unterstützt. Mit vfEmbedded stellt VectorFabrics ein neues Produkt vor, das auch ungleichartige, spezialisierte Cores und Verarbeitungseinheiten modelliert. Die Zielrichtigung von vfEmbedded ist, dass der Entwickler abschätzen kann, der geplante Prozessor genügend Leistung hat, um den Code so abzuarbeiten, dass Zeitschranken eingehalten werden und sich z.B. die Benutzeroberfläche flüssig anfühlt. Andererseits kann der Entwickler an Auslastungsgraphen erkennen, ob die geplante Hardware auch vernünftig ausgenutzt wird – denn Rechenleistung, die überhaupt nicht benötigt wrd, bedeutet unnötige Kosten.