Schleifenvergleich

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

StepTiger

Betreff: Schleifenvergleich

BeitragFr, Jan 12, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Heute habe ich mal getestet, wie schnell die Schleifen sind. Dabei kam ich zu dem Ergebnis, dass, egal welche Schleife, wenn sie später im Programm kommt, sie langsamer läuft. Klingt komisch, ist aber so.

Der Unterschied beträgt bei mir immer zwischen 1% und 15% jedoch ist JEDES mal die erste Schleife schneller.

Bei Gelegenheit könnt ihr es einmal umschreiben. Mich interessieren hierbei eigentlich eure Ergebnisse. Ich komme auf um die 15 Millionen Umrechnungen pro Sekunde.

Warum schafft BB so extrem viele Schleifendurchgänge?
Worauf basiert es eigentlich? Assembler? C++?

Code: [AUSKLAPPEN]
Graphics 640,480,32,1

x1=0
x2=0

one=0

t=5

start=2

If start=1 Then Goto s1 ElseIf start=2 Then Goto s2 Else RuntimeError "Die Schleife existiert nicht!"

.s1
st=MilliSecs()
Repeat:x0=x0+1:Until st<MilliSecs()-t*1000
one=one+1
If one=2 Then Goto on Else Goto s2

.s2
st=MilliSecs()
While st>MilliSecs()-t*1000:x1=x1+1:Wend
one=one+1
If one=2 Then Goto on Else Goto s1

.on
Print ";;;;;;;;;;;;;;;;;;;;;;;"
Print ";Repeat:Until         ;"
Print ";;;;;;;;;;;;;;;;;;;;;;;"
Print "Gesamt:   "+x0
Print "T/s:      "+x0/t
Print ""
Print ";;;;;;;;;;;;;;;;;;;;;;;"
Print ";While:Wend           ;"
Print ";;;;;;;;;;;;;;;;;;;;;;;"
Print "Gesamt:   "+x1
Print "T/s:      "+x1/t
WaitKey

End
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

maximilian

BeitragFr, Jan 12, 2007 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du redest Non-Sense. Tut mir leid, aber das ist leider so.

Es "basiert" auf überhaupt nichts, compiliert aber nach Asm. Warum das eine mal die Schleife langsamer ist, liegt am Compiler.
Vielleicht findet sich ja auch ein Fehler in diesem total überflüssig komplizierten Spagehtti-Codes, der ein Parade-Beispiel für schlechte Programmierung ist.

Das gehört btw. nicht ins Code-Archiv.

/edit: Übrigens tritt dein komisches Phänomen bei mir noch nichtmal auf.
Variety is the spice of life. One day ignore people, next day annoy them.
 

Todeskop

BeitragFr, Jan 12, 2007 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir is wend schneller....vielleicht hängt das mit verschiedenen prozessor arcitekturen zusammen....

Eingeproggt

BeitragFr, Jan 12, 2007 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mein Ergebnis war, dass ich bei Repeat:Until auf stolze 73Mio Durchgänge komme (auf meinem schwachen Laptop). Bei While:Wend sogar 75Mio.
(Angaben absolut. Pro Sekunde hab ich auch ca 15mio)

Edit: Nachdem ich deinen "Spaghetticode" entwirrt habe, hb ich bei Repeat:Until ~500.000 mehr, bei While:Wend ~1Mio weniger rausgekriegt.

Ist mir ein Rätsel...
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

maximilian

BeitragSa, Jan 13, 2007 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Code-Stücke sind immer verschieden schnell. Das hat damit zu tun, wieviele Register gerade belegt sind, ob der Compiler optimiert oder nicht etc.

Wenn man die Schleifen in Funktionen packt, kann man davon ausgehen, dass sie noch schneller sind.
Variety is the spice of life. One day ignore people, next day annoy them.

PowerProgrammer

BeitragSa, Jan 13, 2007 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Todeskop hat Folgendes geschrieben:
bei mir is wend schneller....vielleicht hängt das mit verschiedenen prozessor arcitekturen zusammen....


Das halte ich auch für Schwachsinn. BB kann nur für x86 compilen.


Und Lord-Chaos hat recht, diese Codes sind immer verschieden schnell. Aber ich glaube net, dass der Compiler in diesem Fall was zu sagen hat, da wir den Code ja schließlich alle mit dem gleichen Compiler compilen. Und Register, die belegt sind? Glaube ich auch net, die paar, die es da gibt, sind doch fast immer voll EAX, EBX, ECX, EDX, EES (heißt doch so, das Extradingens, oder?) und die ganzen Segment/Pointer/kA-Register.
Es liegt meiner Meinung nach an der Prozessorauslastung. Die ist ja immer anders. Und wahrscheinlich auch noch am Arbeitsspeicher, der fragmentiert sein kann.
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter!
 

#Reaper

Newsposter

BeitragSa, Jan 13, 2007 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir ist immer das 2te schneller, wechseln sich immer mit so 19,6 und 19,7 mill. pro sek.
mir war aber irgendwo bei BB schonmal ebenfalls soetwas aufgefallen, wo immer das erste schneller war.. kA mehr was..

und irgendwie hatte ich es mal auf die reihe bekommen, etwas zu machen, was total geruckelt hat, aber wo der Vorgang angeblich gerade mal 2ms gedauert hat, und als ich es etwas umgeändert hatte, so das es nicht ruckelte, 10-20ms etwa... irgendwie seltsam, muss wohl die Systemuhr ebenfalls irgendwie behindert haben o_O
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

BladeRunner

Moderator

BeitragSa, Jan 13, 2007 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragSa, Jan 13, 2007 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt halt Branchings die lassen sich besser optimieren und verstopfen die Pipeline weniger.

Insofern hat das durchaus was mit der CPU zu tun, denn ein P4 gewinnt nur preise in "dümmste Ideen bezüglich Pipeline Längen", denn ohne HT Support wird der durchaus Ruhepausen einlegen weil er ganz einfach nix anderes tun kann, wenn man ihn mit gewissen Dingen zubombt

Allerdings ist es bei Tests wie dem hier leicht unsinnig, denn ich sehe da zwischen loop 1 und 2 KEIN delay und das ist zwingend notwendig um die gleichen grundvoraussetzungen zu erzeugen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

StepTiger

BeitragSa, Jan 13, 2007 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
LordChaos hat Folgendes geschrieben:
Du redest Non-Sense. Tut mir leid, aber das ist leider so.

Es "basiert" auf überhaupt nichts, compiliert aber nach Asm. Warum das eine mal die Schleife langsamer ist, liegt am Compiler.
Vielleicht findet sich ja auch ein Fehler in diesem total überflüssig komplizierten Spagehtti-Codes, der ein Parade-Beispiel für schlechte Programmierung ist.

Das gehört btw. nicht ins Code-Archiv.

/edit: Übrigens tritt dein komisches Phänomen bei mir noch nichtmal auf.


Hättest du dich ernsthaft mit dem Code beschäftigt, dann würdest du sehen, dass goto hier nicht grundlos ist. Gotos sind desweiteren nicht IMMER ein Zeichen schlechter Programmierung.
Meine Meinung dazu: Du hast keine Ahnung, wovon du redest. In größeren Programmen setze ich (abgesehen von einigen Funktionen) KEINE gotos. Wenn du dir jedoch die Variable "start" angeschaut hättest und den Code verstehen würdest, dann wüsstest du, dass ich (natürlich bequemlicherweise) das ganze nicht sinnloserweise mache.

GOTOs sind durchaus manchmal praktisch und ersparen eine Menge Schreibarbeit.

Allerdings: Schwachsinnig ist, ALLES mit Gotos zu machen. Ja! Funktionen wären einfacher gewesen! Aber sie hätten mehr Schreibarbeit verlangt und ich bin einfach faul! Ja! If-Abfragen hätten nicht sein müssen, denn Select hätte besseres getan! Und JA! Es ist mir egal, welche Meinung du dazu vertritts.

Ich hab das lediglich als Spielerei gemacht.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group