PDF-Ausgabe herunterladen (28.1 MB) - elektronik industrie
PDF-Ausgabe herunterladen (28.1 MB) - elektronik industrie
PDF-Ausgabe herunterladen (28.1 MB) - elektronik industrie
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Embedded<br />
Entwicklungssoftware<br />
der zu untersuchende Bereich markiert (wie in Bild 5 schattiert<br />
angezeigt) und dann per Doppelklick das Zoomen gestartet.<br />
Bild 1: Hotspot-Analyse – Funktionen und dazugehörige CPU-Laufzeiten.<br />
Bild 2: Hotspotanalyse im Quellcode.<br />
Bild 3: Auffinden von Programmineffizienz auf Funktionsebene.<br />
unterlegt) Bereiche hingewiesen, wie das oben erwähnte CPI-Beispiel<br />
zeigt.<br />
Wartezyklenanalyse von Locks<br />
Wenn man ein paralleles Programm untersucht, ist ausser der optimalen<br />
Nebenläufigkeit (parallele Ausnutzung der vorhandenen<br />
Prozessorkerne durch Threads) vor allem die Wartezyklenanalyse<br />
von Locks und deren Effizienz von grossem Belang. Will ein Thread<br />
A zum Beispiel auf eine globale Variable zugreifen, die von<br />
einem anderen Thread B bereits genutzt und gelocked (gesperrt)<br />
ist, muss der erste (Thread A) solange warten bis Thread B seinen<br />
Lock auf die globale Variable freigibt. Dies kann bei vielen Threads<br />
und längeren Lock-Bereichen zu einer Quasi-Serialisierung eines<br />
parallelen Programms führen. Zumindest wird der Programmablauf<br />
verlangsamt.<br />
Bild 4 zeigt qualitativ an, welche Funktionen nicht optimal mit<br />
Locking umgehen. Lange rote Balken sind ein Indiz für Lock-probleme.<br />
Auch hier kann man wieder in den Sourcecode einsteigen.<br />
Dort kann man dann eroieren, wie das Problems zu optimieren<br />
oder zu lösen ist. Eventuell hat man eine Lockingmethode mit zuviel<br />
Overhead gewählt. Eventuell ist durch Codeumstellungen wie<br />
der Nutzung privater Variablen innerhalb der verschiedenen Threads<br />
eine Vermeidung von Locks möglich. Aber auch die Nutzung<br />
von „Concurrent Containers“ wie es das Threading Building<br />
Block (TBB) Model von Intel offeriert, kann eine Lösung darstellen.<br />
Lock-und Waits-Analyse<br />
Eine weitere Darstellung im Zeitbereich ist die Lock-und Waits-<br />
Analyse (Bild 6). Es wir dann angezeigt, wann Threads Programm<br />
ausführen ( dunkelgrün) und wann sie im Wartemodus verharren<br />
(hellgrün). Synchornisierungspunkte zwischen den Threads werden<br />
durch gelbe Pfeile verdeutlicht. Auch hier ist eine Hineinzoomen<br />
möglich, um einen höhere Auflösung und damit bessere<br />
Deutung des parallelen Programmablaufs zu ermöglichen. Die<br />
blauen Zeitmarkierungen sind Rahmen, die der Softwareentwickler<br />
gezielt per API in sein Programm vor dem Testlauf einbauen<br />
kann. So wäre es z.B. möglich, gezielt als Rahmen, ein Bild in einem<br />
Spieleprgramm zu markieren und zu filtern. Bei Spielen ist<br />
das sinnvoll, da Einzelbilder (Frames) und for allem “Frames pro<br />
Sekunde“ ein natürlicher Performanceindikator für das Spiel ist.<br />
Die erkannten Ineffizienzen (Load-Imbalances, Synchronisierungsoverhead<br />
und so weiter) kann man wie zum Teil durch die<br />
oben beschriebenen Ansätze oder durch optimierte Lockmechanismen<br />
verbessern.<br />
Vergleichsmodus<br />
Zuletzt sei noch der Vergleichsmodus erwähnt. Dieser Modus ist<br />
hilfreich für Regressionstests, die in der Regel einmal am Tag und<br />
bevorzugt über Nacht laufen. Sie lassen sich auch mit dem Kommandozeilenmodus<br />
(Command Line Mode; CLI) kombinieren<br />
und von dort aus starten CLI-Kommandos sind per „Cut und<br />
Paste“-Verfahren aus dem Amplifier XE (auch entsprechend aus<br />
dem Inspector XE) heraus einfach zu initialisieren. (sb) n<br />
Autor: Edmund Preiss ist Manager für das Business Development<br />
der Intel Softwareentwicklungswerkzeuge in EMEA.<br />
Bild 4: Effizenzanalyse von Locks (Wait for Locks).<br />
Bild 5: Thread-Analyse über die Zeitachse.<br />
Nebenläufigkeitsanalyse der Threads<br />
Noch effizienter ist die Nebenläufigkeitsanalyse der Threads mittels<br />
einer zeitlichen Darstellung. In Bild 5 kann man im zeitlichen<br />
Ablauf erkennen, ob ein Thread tatsächlich aktiv ist (running).<br />
Dieser Thread wird entsprechend grün hinterlegt. Vor allem ist zu<br />
sehen, wieviel CPU-Zeit benötigt wird und zwar sowohl pro Thread<br />
als auch über alle Threads zusammen (braune Histogrammdarstellung).<br />
Ein Hineinzoomen in diesen Zeitablauf, um sich Bereiche<br />
genauer anzusehen, ist möglich. Dazu wird mit der Maus<br />
Bild 6: Thread –Nebenläufigkeitsanalyse (Concurrency Analysis) in<br />
Zeitdarstellung<br />
Bilder: Intel<br />
76 <strong>elektronik</strong> <strong>industrie</strong> 04/2011<br />
www.<strong>elektronik</strong>-<strong>industrie</strong>.de<br />
74_Intel_416 (sb).indd 76 01.04.2011 13:35:00