Schleifenvergleich
Übersicht

![]() |
StepTigerBetreff: Schleifenvergleich |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bei mir is wend schneller....vielleicht hängt das mit verschiedenen prozessor arcitekturen zusammen.... | ||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group