Guten Morgen
In einem anderen Thread (den ich nicht zumüllen will) hab ich ein
Verständniss Problem
88a8: e3510000 cmp r1, #0
88ac: 13a01000 movne r1, #0
88b0: 03a01001 moveq r1, #1
88b4: 15821000 strne r1, [r2]
88b8: 05821000 streq r1, [r2]
88bc: 159f203c ldrne r2, [pc, #60]
88c0: 059f203c ldreq r2, [pc, #60]
88c4: 13a01801 mov r1, #65536 ; 0x10000
wenn ich
88b4: 15821000 strne r1, [r2]
88b8: 05821000 streq r1, [r2]
durch
str r1, [r2]
ersetz
war/bin ich der Meinung dass ich Takt spare
antwort von Dr. Sommer
>Das würde 2 Instruktionen, aber keinen Takt sparen
wird da nicht immer einer der stores als nop audgeführt?
heinz schrieb: > In einem anderen Thread (den ich nicht zumüllen will) hab ich ein > Verständniss Problem Ein Link auf den Beitrag "Re: Ich suche einen "etwas anderen" C-Compiler" wäre trotzdem nicht verkehrt... heinz schrieb: > wenn ich > 88b4: 15821000 strne r1, [r2] > 88b8: 05821000 streq r1, [r2] > durch > str r1, [r2] > ersetz > war/bin ich der Meinung dass ich Takt spare Da verbleiben die Fragen: wie lange dauert das Abweisen des Speicherzugriffs und wie lange das Ausführen? Und wie lange dauert ein Speicherzugriff an sich?
Mit dem Link hast Du recht ... Ich hab ja grundsätzlich einen Speicherzugriff - ob bei den cond. stores (einer der beiden trifft immer) oder dem uncond. store mich verwirrt nur die Aussage von Dr. Sommer ARM Instruction manual sagt Non-executed instructions soak up 1 cycle. – Still have to complete cycle so as to allow fetching and decoding of following instructions. str r1, [r2] == x Takte bei der Sequenz strne r1, [r2] streq r1, [r2] == x+1 Takte Stimmt das so?
Es kommt auf die ARM-Architektur und die Pipeline-Länge an, aber grundsätzlich sollten gleich bedingte Anweisungen hintereinander kommen, ist die Optimierung abgeschaltet? movne r1, #0 strne r1, [r2] ldrne r2, [pc, #60] moveq r1, #1 streq r1, [r2] ldreq r2, [pc, #60]
ich gkaube wir reden aneinander vorbei 88a8: e3510000 cmp r1, #0 88b4: 15821000 strne r1, [r2] 88b8: 05821000 streq r1, [r2] das erzeugt der Compiler (GCC 4.7.4 -O3) was ja gleich str r1, [r2] ist eine Aussage war, das der einfache store nicht schneller ist als 2 cond. stores was ich bezweifle. Lieg ich falsch?
Hallo, also der Befehl, wenn er nicht ausgeführt wird in der Condition braucht die gleiche Zeit als der Befehl als wenn er Ausgeführt wird. Jetzt kommt eher noch die Frage welcher Core? Das hängt dann von der Pipeline ab. Aber ein flush in der Pipeline gibts dadurch auch nicht. Ich würde mal sagen, das ist Unsinn. Jeder Befehl im ARM-Mode (ARM7 oder ARM9) ist mit 32 Bit Codiert und nimmt somit 4 Bytes in deinem Flash weg und Flash ist teuer. Der ARM ist ein Store and Load Architektur Prozessor und ist auf schnellen Speicherzugriff optimiert da dürfte das auch bei einem Befehl kein Problem darstellen. Und wenn es schneller gehen soll, must du den Thumb-Mode ausprobieren. Da ist jeder Befehl mit nur 16 Bit Codiert, somit muss die CPU nur bei jedem 2.Befehl nachladen. Gruß Sascha
Sascha schrieb: > also der Befehl, wenn er nicht ausgeführt wird in der Condition braucht > die gleiche Zeit als der Befehl als wenn er Ausgeführt wird. Mindestens da nicht: ARM7TDMI: Immer 1 Takt, egal welcher Befehl. ARM9E-S: Immer 1 Takt, egal welcher Befehl. Wartezyklen für I-Fetch gehen natürlich extra. Bei Cores mit tiefer Pipeline wirds natürlich interessanter. Aber auch da kann man diese Aussage wohl nicht so stehen lassen.
:
Bearbeitet durch User
heinz schrieb: > ARM Instruction manual sagt > Non-executed instructions soak up 1 cycle. Oh, übersehen. Lothar schrieb: > ist die Optimierung abgeschaltet Liegt wohl am volatile, das hält ihn vom optimieren ab...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.