
Goto sinnvoll nutzen
Re: Goto sinnvoll nutzen
ich verfolge mit neugier diesen Thread und frage mich schon ein wenig, wo es enden wird (wahrscheinlich als mathematische Gleichung) 

41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e


Re: Goto sinnvoll nutzen
Ich weiß wo das endet ..
GOTO Mülleimer

GOTO Mülleimer

pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Goto sinnvoll nutzen
oder so:
das führt aber so zu einem buffer-overflow
Code: Alles auswählen
Macro DoSomething()
a$ = "do_something_" + Str(i)
EndMacro
Procedure didum(i, maxx)
If i<maxx
DoSomething()
didum(i+1, maxx)
EndIf
EndProcedure
maxx = 40000000
start=ElapsedMilliseconds()
didum(0, maxx)
out.s+"Procedure:"+Str(ElapsedMilliseconds()-start)
Debug out
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Goto sinnvoll nutzen
Genauer gesagt zu einem Stackoverflow._sivizius hat geschrieben:das führt aber so zu einem buffer-overflow

Re: Goto sinnvoll nutzen
Freitag nachmittag auf Arbeit, Wetter besch... und ´nen Haufen Minus-Stunden auf dem Arbeitszeit-Konto: Was macht man da? Man schaut sich auch sowas hier an und hat endlich mal die Chance im Mülleimer zu landen
.
Also: Oben und unten im Code 3-4 Zeilen Assembler und dazwischen PB-String-Gedöns in einer Schleife bringt überhaupt nichts. Da spielen zuviel andere Sachen mit rein (z.B. Alignments). Dazu ein kurzer Test:
Zeiten auf einem 8120-er Bulldozer:
Assembler: 6978
Goto Version 1: 8085
Goto Version 2: 8076
For Next: 8171
While Wend: 8104
Repeat Until: 8200
Was habe ich geändert? Ganz einfach: Assembler mal ganz nach oben verschoben und den Gotos einen Start mit leerem String gegönnt.
So, das sollte es aber auch gewesen sein (zumindest mit dieser "Test-"Konfiguration).

Also: Oben und unten im Code 3-4 Zeilen Assembler und dazwischen PB-String-Gedöns in einer Schleife bringt überhaupt nichts. Da spielen zuviel andere Sachen mit rein (z.B. Alignments). Dazu ein kurzer Test:
Code: Alles auswählen
EnableExplicit
Define.i maxx, i, time
Define.s a = "", out = ""
maxx = 40000000
Macro DoSomething()
a = "do_something_" + Str(i)
EndMacro
;========= Assembler-Schleife =========
time = ElapsedMilliseconds()
EnableASM
mov r15, 0
mov r14, qword [v_maxx]
jump:
inc r15
DoSomething()
dec r14
jnz l_jump
mov qword [v_i],r15
DisableASM
time = ElapsedMilliseconds() - time
out + "Assembler: " + time + #LF$
;========= Goto Version 1 =========
a = ""
time = ElapsedMilliseconds()
i = 0
top1:
If i < maxx
DoSomething()
i + 1
Goto top1
EndIf
time = ElapsedMilliseconds() - time
out + "Goto Version 1: " + time + #LF$
;========= Goto Version 2 =========
a = ""
time = ElapsedMilliseconds()
i = 0
top2:
If i = maxx
Goto ende2
EndIf
DoSomething()
i + 1
Goto top2
ende2:
time = ElapsedMilliseconds() - time
out + "Goto Version 2: " + time + #LF$
;========= For-Schleife =========
a = ""
time = ElapsedMilliseconds()
For i = 0 To maxx - 1
DoSomething()
Next
time = ElapsedMilliseconds() - time
out + "For Next: " + time + #LF$
;========= While-Schleife =========
a = ""
time = ElapsedMilliseconds()
i = 0
While i < maxx
DoSomething()
i + 1
Wend
time = ElapsedMilliseconds() - time
out + "While Wend: " + time + #LF$
;========= Repeat-Schleife =========
a = ""
time = ElapsedMilliseconds()
i = 0
Repeat
DoSomething()
i + 1
Until i = maxx
time = ElapsedMilliseconds() - time
out + "Repeat Until: " + time + #LF$
MessageRequester("Zeiten", out)
Zeiten auf einem 8120-er Bulldozer:
Assembler: 6978
Goto Version 1: 8085
Goto Version 2: 8076
For Next: 8171
While Wend: 8104
Repeat Until: 8200
Was habe ich geändert? Ganz einfach: Assembler mal ganz nach oben verschoben und den Gotos einen Start mit leerem String gegönnt.
So, das sollte es aber auch gewesen sein (zumindest mit dieser "Test-"Konfiguration).
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Goto sinnvoll nutzen
Auf einem Intel(R) Core(TM) i7-3820QM CPU, keine Ahnung wie er sich gerade getaktet hab. Sitze mit Akku im Zug.
Das bedeutet aber, dass Assember < Goto < PB-Native-Schleifen.

Faszinierend, helle.Assembler: 1589
Goto Version 1: 2131
Goto Version 2: 2132
For Next: 2145
While Wend: 2148
Repeat Until: 2150
Das bedeutet aber, dass Assember < Goto < PB-Native-Schleifen.
-
- Beiträge: 390
- Registriert: 30.08.2004 09:05
- Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64 - Wohnort: Heidelberg
Re: Goto sinnvoll nutzen
Phenom II x4 945 3 Ghz im Eco ModusAssembler: 6206
Goto Version 1: 7755
Goto Version 2: 7712
For Next: 7728
While Wend: 7847
Repeat Until: 7778
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Re: Goto sinnvoll nutzen
Nic, Du machst mir Angst und Bange
! Aber der Reihe nach: Wichtig ist mir erstmal klar zustellen, das meine "Lästerei" nicht gegen Deinen Ursprungs-Thread zielt. Ich denke, da verstehen wir uns
.
Aber jetzt: Ich bin jetzt daheim und habe meinen obigen Code auf einem i7-4770K mit 4.0 GHz getestet (der FX-8120 lief übrigens mit 3.6 GHz). Die Werte:
Assembler: 3673
Goto Version 1: 4403
Goto Version 2: 4248
For Next: 4262
While Wend: 4186
Repeat Until: 4269
Ich wollte ja zeigen, das da etliches von kaum beeinflussbaren Details abhängt (für den normalen User). Aber die Zeiten Deines Laptops haben mich schwer verunsichert. Ein Blick in Intels Datenbank zeigt für den i7-3820QM einen max.Turbo von 3.7 GHz. Auf welchem Schienennetz warst Du denn unterwegs? Mit Doc Emmett Brown
?
Ein gut gelaunter
Helle


Aber jetzt: Ich bin jetzt daheim und habe meinen obigen Code auf einem i7-4770K mit 4.0 GHz getestet (der FX-8120 lief übrigens mit 3.6 GHz). Die Werte:
Assembler: 3673
Goto Version 1: 4403
Goto Version 2: 4248
For Next: 4262
While Wend: 4186
Repeat Until: 4269
Ich wollte ja zeigen, das da etliches von kaum beeinflussbaren Details abhängt (für den normalen User). Aber die Zeiten Deines Laptops haben mich schwer verunsichert. Ein Blick in Intels Datenbank zeigt für den i7-3820QM einen max.Turbo von 3.7 GHz. Auf welchem Schienennetz warst Du denn unterwegs? Mit Doc Emmett Brown

Ein gut gelaunter
Helle
- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Re: Goto sinnvoll nutzen
Helle hat geschrieben: Auf welchem Schienennetz warst Du denn unterwegs? Mit Doc Emmett Brown?
Ein gut gelaunter
Helle
Muß nicht unbedingt mit Doc Emmett Brown gewesen sein.
Albert Einstein und die allgemeine Relativitätstheorie geben Erklärung genug:
Für einen Betrachter in Relativbewegung (Nic) vergeht die Zeit langsamer als für den Betrachter der sich nicht bewegt (Helle). Folglich braucht das Programm bei Nic auch deutlich weniger Zeit.
NicknameFj mit ebenso guter Laune

PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller


Re: Goto sinnvoll nutzen
Ich könnte wetten (*), dass Nic im Code vorher die 40000000 gekürzt hat, sein Rechner sollte wohl sicher fertig werden
mit der looperei bevor der Zug trotz Verspätung im Bahnhof einfährt.
(*) wenn ich jemals wetten würde
@Helle
Lustig ist bei deinem Code im Taskmanager zu gucken wie die Prozessoren (wenn man mehr als einen hat) pro loop an
und abspringen.
und jetzt fehlt noch eine Version für Multiprozessoren
mit der looperei bevor der Zug trotz Verspätung im Bahnhof einfährt.

(*) wenn ich jemals wetten würde
@Helle
Lustig ist bei deinem Code im Taskmanager zu gucken wie die Prozessoren (wenn man mehr als einen hat) pro loop an
und abspringen.
und jetzt fehlt noch eine Version für Multiprozessoren

pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.