events

DESIGN&ELEKTRONIK-Entwicklerforum HMI – Komponenten & Lösungen
DESIGN&ELEKTRONIK-Entwicklerforum HMI – Komponenten & Lösungen

Am 24. Mai 2012 findet das DESIGN&ELEKTRONIK-Entwicklerforum »HMI – Komponenten & Lösungen« mit begleitender Fachausstellung statt. Die Themen: »Bedienen und Beobachten: Technik, Know-how und Tools für das Design moderner Benutzerschnittstellen«.

Melden Sie sich jetzt an…

DESIGN&ELEKTRONIK-Entwicklerforum »Embedded-System-Entwicklung«
DESIGN&ELEKTRONIK-Entwicklerforum »Embedded-System-Entwicklung«

Auch in diesem Jahr veranstaltet die DESIGN&ELEKTRONIK wieder das Entwicklerforum »Embedded-System-Entwicklung« am 11. und 12. Juli 2012 in München. Neben einem technisch anspruchsvollen Vortragsprogramm ermöglichen verschiedene Workshops den Teilnehmern einen differenzierten Einblick in die Thematik.

Ausführliche Informationen:
www.embedded-entwicklerforum.de

Produkte des Jahres 2012

Linux /ARM

Linux: Embedded für alle
Linux: Embedded für alle

Linux ist heute erste Wahl geworden, wenn es um die Entscheidung für ein Betriebssystem in einem leistungsfähigen Embedded-System geht. Wie kann es sein, dass eine Open-Source-Software gerade bei Embedded-Systemen so erfolgreich ist?

Konferenz für ARM-Systementwicklung
Konferenz für ARM-Systementwicklung

Die große Konferenz für ARM-Systementwicklung am 11. und 12. Juli 2012 in München bietet Entwicklern die Gelegenheit, sich detailliertes Wissen über die aktuellen Cortex-Architekturen anzueignen, die mittlerweile zum Industriestandard avanciert sind.

Ausführliche Informationen:
www.arm-entwicklerkonferenz.de

embedded world Technology Report

Android & Embedded
embedded world Technology Report

Welche Embedded-Trends zeichnen sich ab? Im »embedded world Technology Report« gibt ein unabhängiger Expertenrat einen exklusiven Einblick in aktuelle Entwicklungen und zukünftige Trends im Embedded-Bereich.

Interessiert? Hier geht es zum kostenlosen Download

embedded world special

embedded world 2012
embedded world 2012

Wir haben aktuell von der weltgrößten Messe für die Embedded-Branche mit News, Videobeiträgen und Produktneuheiten berichtet.

Windows Embedded Standard 7

Windows Embedded Standard 7
Windows Embedded Standard 7

Was ist neu in Windows Embedded Standard 7? Lesen Sie alles rund um das neue Microsoft-Embedded-Betriebssystem Embedded Standard 7 in unserem Spezial.


Windows 7 - Special zum Download

Windows 7 -Special zum Download
Windows 7 -Special zum Download

20 Seiten Fachwissen – Das Windows-Embedded-Special als PDF-Download.


Marktübersichten Embedded

Marktübersichten aus dem Bereich Embedded

Software im sicherheitskritischen Bereich

Entwicklungssoftware
Entwicklungssoftware

Um die »Worst-Case Execution Time« zu erhalten, gibt es verschiedene Herangehensweisen – bequeme und weniger bequeme.


12. Februar 2010
Zeitverhalten automatisch analysieren und optimieren

Kurzer Weg zum schnellen Code

In komplexen Embedded Systemen kann jeder noch so kleine Performance-Bug schnell zum Flaschenhals werden. Mit neuen Verfahren lassen sich Performance-Einbrüche bei der Codeabarbeitung und beim Datenzugriff automatisch finden, die Tools geben zudem Hinweise für die Optimierung des Codes.

Jens Braunes

Anzeige

Galt früher alleine Stabilität im Sinne von logischen Fehlern oder Programmierfehlern als Maß für die Qualität von Software, so sind heute auch die erzielte Rechenleistung, etwaige Performance-Einbrüche und eine optimale Ausnutzung der Hardware mit einzubeziehen. Performance-Bugs lassen sich zwar mit Hilfe üblicher Profiling-Methoden messen, diese erfordern allerdings eine Code-Instrumentierung, beeinflussen also selbst das Laufzeitverhalten der Applikation.

In typischen »Deeply Embedded«-Anwendungen zum Beispiel im Automobil- oder Industriebereich ist eine solche Veränderung des Laufzeitverhaltens nicht akzeptabel. Hier sind alle auszuführenden Tasks zyklisch abzuarbeiten, nicht selten ist die Länge des Zyklus' genau festgelegt und keine der Tasks darf das vorgegebene Zeitregime verletzen, auch wenn es zu Ausnahmesituationen kommt. Die Applikation muss also bestimmte Antwortzeiten zwingend einhalten und darf auch unter hoher Last die Spezifikation nicht verletzen.

Anders als bei universellen Prozessoren ist bei modernen »Systems-on-Chip« (SoC) wie den High-End-Mikrocontrollern »TC1797« von Infineon (Bild 1) nicht so sehr die – meist vergleichsweise niedrige – Taktfrequenz wichtig, sondern ein auf das jeweilige Anwendungsgebiet optimiertes, komplexes Systemdesign. Der Schlüssel für eine hohe Leistungsfähigkeit und einen großen Datendurchsatz liegt vor allem in den geringen Zugriffzeiten der internen Speicher, den spezialisierten Einheiten und der Aufgabenteilung der Busse. Die richtigen Werkzeuge vorausgesetzt, lässt sich die Performance meist noch deutlich steigern.

job_xx_Bild1.jpg
 
zoom
Bild 1: Blockschaltbild des Mikrocontrollers »TC1797« von Infineon

Codeoptimierung mittels Profiling

Moderne Compiler bieten dem Entwickler meist gleich eine ganze Reihe statischer, auf der Analyse des Programmcodes basierender Code-Optimierungsmöglichkeiten, die unabhängig von der Zielarchitektur anwendbar sind. Dazu gehören zum Beispiel »Loop Unrolling«, »Function Inlining« oder »Common Subexpression Elimination«, um nur einige zu nennen. Zusätzlich können optimierende Compiler spezielle Chip-Features ausnutzen, wie sie auch der TC1797 bietet. Weil hierfür das zeitliche Verhalten des Programms unter realen Bedingungen bekannt sein muss, versagt hier die statische Programmanalyse. Vor allem die Einflüsse des Speichersubsystems auf die Leistung lassen sich erst während der Laufzeit beobachten und messen. Einige typische Performance-Bugs, die in diesem Zusammenhang auftreten können, sind: Cache-Effekte: Code und Daten werden wiederholt aus den Caches verdrängt und müssen aufwändig aus den langsameren Speichern zurückgeholt werden, Kontrollfluss mit vielen Sprüngen: Sprungbefehle bremsen das Programm aus, zum Beispiel wenn der Befehlscache nicht den angesprungenen Code enthält oder die Prozessor-Pipelines leerlaufen, hohe Interruptlast: Häufige Interrupts unterbrechen den normalen Programmablauf. Damit verbunden sind wiederum Verdrängungseffekte in den Caches.

Um bei der Code-Optimierung auch solche Effekte berücksichtigen zu können, gilt es erst einmal, Informationen über das Laufzeitverhalten zu sammeln. Ein »Application Profiling« zeigt, welche Wege das Programm durch seinen Kontrollflussgraphen (CFG) bevorzugt. Letzterer beinhaltet alle möglichen Wege durch das Programm in Form von Kanten, die wiederum die Basisblöcke (Knoten) miteinander verbinden. Basisblöcke sind linear hintereinander ausgeführte Sequenzen von Maschinenbefehlen, die keine Verzweigung durch einen Sprung oder Call beinhalten. Die »Coverage-Analyse«, ein Verfahren, das beispielsweise für das Profiling im »GNU-Compiler« zur Anwendung kommt, instrumentiert nun alle Kanten, die für eine spätere Rekonstruktion des Kontrollflusses nötig sind (Bild 2). Die Instrumentierung fügt eine Codesequenz in die jeweilige Kante ein und allokiert gleichzeitig einen Speicherplatz im Target-Speicher, der einen Zähler enthält. Beim Beschreiten der Kante wird gleichzeitig der zugehörige Zähler inkrementiert.

Nach Beendigung des Profiling-Laufes wertet das Tool »gcov« die Zähler aus und ermittelt Programmteile, die einen hohen Anteil an der Gesamtlaufzeit haben. Zusätzlich lassen sich auch kritische Pfade im Programm finden, die durch Umsortieren und Zusammenfassen von Basisblöcken ein günstigeres Cache-Verhalten und eine bessere Auslastung der Prozessor-Pipelines ermöglichen. Wie schon erwähnt, ist die eben beschriebene Verfahrensweise für Deeply-Embedded-Applikationen allerdings nicht akzeptabel. Nicht nur verändert die Instrumentierung das Laufzeitverhalten, sondern die Zähler belegen auch den oft knappen Target-Speicher.

job_xx_Bild2.jpg
 
zoom
Bild 2: Die gestrichelte Originalkante wird durch den Instrumentierungscode ersetzt

1. Teil: Kurzer Weg zum schnellen Code
2. Teil: Profiling ohne Eingriffe