Aktuelle Zeit: 24.10.2019 06:50

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Compiler-Optimierungen
BeitragVerfasst: 02.01.2005 16:07 
Offline

Registriert: 30.08.2004 00:17
remi_meier hat geschrieben:
Ich habe hier selbst einige aufgeführt, die ich noch gefunden habe:
Code:
3) x + 1 wird zu INC v_x, aber x - 1 nicht zu DEC v_x:
; x + 1
  INC    dword [v_x]
; x - 1
  MOV    ebx,dword [v_x]
  ADD    ebx,-1
  MOV    dword [v_x],ebx
Ich denke nicht, dass das schneller sein soll...
Vor allem das DEC will ich haben ! :twisted:

Hm..mir ist so als hätte ich das schon mal irgendwo geschrieben. /:->

Schön dass sich noch jemand für meine Anregungen (außer Rob)
interressiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 02.01.2005 16:19 
Offline
Benutzeravatar

Registriert: 29.08.2004 17:06
Ich habe keine Ahnung von Assembler und Compilerbau. Allerdings denke ich schon, dass es nicht allzu schwer sein sollte, das DEC einzubauen *grübel*.

Was ich mich allerdings frage: welchen Vorteil hätte man dadurch? Kleinere Executables und/oder schnellere Ausführung des Codes?

Dass dies (wenn überhaupt) nur minimal sein würde, ist mir klar, aber Kleinvieh macht nunmal auch Mist...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 02.01.2005 16:29 
Offline
Benutzeravatar

Registriert: 29.08.2004 20:11
Wohnort: Schweiz
Code:
x.l = 10000
#test = 500000000
Delay(1000)

time1 = ElapsedMilliseconds()
For z = 0 To #test
  If x < 0 : x = 10000 : EndIf
  x - 1
Next
time1 = ElapsedMilliseconds() - time1

time2 = ElapsedMilliseconds()
For z = 0 To #test
  If x < 0 : x = 10000 : EndIf
  DEC x
Next
time2 = ElapsedMilliseconds() - time2

MessageRequester("", Str(time1)+"  "+Str(time2))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 02.01.2005 18:18 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Für alle, die es nicht ausprobieren möchten. Ergebnis: "4326 3725"
600 ms Differenz nach 500 Millionen Schleifendurchläufen.

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 02.01.2005 22:52 
Offline
Benutzeravatar

Registriert: 11.11.2004 16:13
Wohnort: Magdeburg
Zur DEC-"Problematik": Der DEC-Befehl verändert nicht das Carry-Flag,
das aufgeführte Konstrukt mit ADD dagegen schon! Wichtig für Abfragen
über die Grösse von "x" (das "borgen"). DEC sollte man nur verwenden,
wenn dies keine Rolle spielt bzw. man weis, was man tut.
Gruss
Helle


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 04.01.2005 00:05 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Was ist denn das Carry-Flag?

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 04.01.2005 02:39 
Offline

Registriert: 08.09.2004 14:03
Wohnort: Kiel
Carry-Flag ist das erste Flag im Flagregistrer.
Es wird dann gesetzt wenn auf Grund einer Addition oder Subtraktion das Ergibnis nicht in einen Register oder Speicherstelle passt.Man kann Carry-Flag auch mit dem befehl STC setzen.
Ich habe nur rudimentäre assembler kenntnisse, also vielleicht ist diese nicht ganz korrekt.

_________________
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 04.01.2005 15:13 
Offline
Benutzeravatar

Registriert: 29.08.2004 20:11
Wohnort: Schweiz
Hmm... Stimmt!
INC auch nicht...
Dann würde ich vorschlagen, dass der Debugger ADD -1 und ADD 1 benutzt und die fertige Executable dann INC und DEC. So kann man im Debugger die Fehler abfangen aber in der EXE den vollen Speed nutzen. (nur so eine Idee....)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 04.01.2005 19:34 
Offline

Registriert: 10.11.2004 03:22
oauerha...

wie wäre es, wenn x +/- 1 das ADD benutzt,
und man zusätzlich ein x++ implementiert, dass als INC übersetzt wird?

so wie es im moment ist, muss der compiler ja abfangen, ob es 1 oder eine andere zahl ist,
und danach den code einrichten.

naja, aber im grunde sollte er das ja, gemäss der aussage,
dass PB zuerst optimierten ASM-code erzeugt,
und dann compiliert.
ist ja schliesslich eines der besten verkaufsargumente für PB.

btw: meines wissens beeinflussen INC und DEC zwar nicht CARRY, aber ZERO...

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 08.02.2005 14:17 
Offline
Benutzeravatar

Registriert: 29.08.2004 20:11
Wohnort: Schweiz
Hab nochmals was ausprobiert:
Code:
a = 5

b = a % 2

Debug b


;Purebasic
; b = a % 2
MOV    ebx,dword [v_a]
MOV    eax,ebx
MOV    ebx,2
CDQ
IDIV   ebx
MOV    ebx,edx
MOV    dword [v_b],ebx
Debug b

;PB Output optimiert
; b = a % 2
MOV    eax,dword [v_a]
MOV    ebx,2
CDQ
IDIV   ebx
MOV    dword [v_b],edx
Debug b




;mein Vorschlag für % 2
; b = a % 2
MOV    eax,dword [v_a]
!AND    eax,1
MOV    dword [v_b],eax
Debug b

Wenn nur schon mal die Optimierung
MOV ebx,dword [v_a]
MOV eax,ebx
drinn wäre... vielleicht macht das FASM aber auch schon... Wäre auf jeden Fall kein Problem einen kleinen Optimierer zu machen der den Asm Output nach solchen Zeilen durchsucht.

greetz
remi


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye