23.11.2013 Aufrufe

PDF-Ausgabe herunterladen (28.1 MB) - elektronik industrie

PDF-Ausgabe herunterladen (28.1 MB) - elektronik industrie

PDF-Ausgabe herunterladen (28.1 MB) - elektronik industrie

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!