Algorithmus auf ARM

ARM-Befehlssätze im Vergleich #####

28. September 2007, 11:21 Uhr |
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

ARM-Befehlssätze im Vergleich

Druckversion

Umsetzung auf dem ARM7TDMI

Der Algorithmus wurde in der IDE »µVision 3« von Keil zunächst in C-Code umgesetzt. Hierbei gelten folgende Datentypen per Definition als Vereinbarung: »Byte«: 8 Bit vorzeichenbehaftet für Q0.7, »Word«: 16 Bit vorzeichenbehaftet für Q0.15, »dWord«: 32 Bit vorzeichenbehaftet für Q0.31, »Float«: 32 Bit nach IEEE.

Die C-Routine für Q0.15 stehe beispielhaft für die drei betrachteten Festkommaformate (Kasten »C-Code«). Die nachfolgenden Routinen arbeiten alle nach dem gleichen Algorithmus, der eine aufgerollte Programmstruktur nutzt (ohne Schleifendurchlauf).

Die Laufzeitmessung ergibt bei einem Core-Takt von 60 MHz die folgenden Zeiten: Float: 83,7 µs, signed Q0.7: 9,1 µs, signed Q0.15: 9,9 µs, signed Q0.31: 24,9 µs. Der C-Compiler arbeitet dabei mit der höchsten Optimierungsstufe hinsichtlich Laufzeit.

Bild03_tm_12.jpg
Bild 3: Auf den ZNEO und 1 MHz Taktfrequenz normierten Laufzeiten des Algorithmus auf verschiedenen Prozessorarchitekturen

Als nächster Schritt findet die Handoptimierung für das Festkommaformat auf Assemblerebene statt, wobei der gleiche Programmablauf verwendet wird. Bei den Formaten Q0.7 und Q0.15 greifen die Befehle des ARM-Befehlssatzes mit dem flexiblen zweiten Operanden besonders. Durch diesen zweiten Operanten lässt sich beispielsweise die Addition eines Koeffizienten zusammen mit der Kommastellenkorrektur und dem Runden aus der vorherigen Multiplikation in einem Befehl ausführen (Beispiel: »add r2,r4,r2,asr #15«). Beim Q0.31-Format spielt die 64-Bit-Multiplikation ihre Stärke aus. Die Laufzeitmessung ergibt die folgenden Zeiten: signed Q0.7: 8,8 µs, signed Q0.15: 9,7 µs, signed Q0.31: 16,2 µs.

Als nächstes steht die Implementierung des Algorithmus’ im Thumb-Befehlssatz an. Hierfür wurde der C- und Assembler-Code auf Thumb umgeschrieben. Bei identischen Testbedingungen ergeben sich für die Laufzeiten der C-Routinen folgende Werte: 90,0 µs für Float, 11,5 µs für signed Q0.7, 12,7 µs für signed Q0.15 und 51,3 µs für signed Q0.31.

multiplikation_03.jpg

  1. ARM-Befehlssätze im Vergleich #####
  2. ARM-Befehlssätze im Vergleich
  3. ARM-Befehlssätze im Vergleich
  4. ARM-Befehlssätze im Vergleich
  5. ARM-Befehlssätze im Vergleich

Jetzt kostenfreie Newsletter bestellen!