Kurios-Inkrement Funktion in C als Library schneller? Nein!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Kurios-Inkrement Funktion in C als Library schneller? Nein!

Beitrag von grapy »

Hallo,

habe mal so zum Testen eine Library Funktion in C geschrieben: inc(*toinc)

und festgestellt, das dieser Code (~1,4 s) doppelt so schnell ist ...

Code: Alles auswählen

For x = 1 To 100000000
inc(@test)
Next
... wie dieser Code (~2,8 s):

Code: Alles auswählen

For x = 1 To 100000000
test+1
Next
echt krass, oder?

:mrgreen: grapy
Zuletzt geändert von grapy am 31.10.2004 16:04, insgesamt 1-mal geändert.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

mmmh, ich find das eher merkwürdig. ich dachte purebasic sei genauso schnell wie C :?
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ist es auch so bei While..Wend? da kriege ich ungefähr 1.82s raus

Code: Alles auswählen

Global Ausgabe.f,Ausgabe1.f,Ausgabe2.f
Zeit=ElapsedMilliseconds()
While test<100000000
test+1
Wend
Zeit1=ElapsedMilliseconds() 
Ausgabe=(Zeit1-Zeit)/1000
MessageRequester("Zeitmessung","While/Wend: ~"+Strf(Ausgabe))
> [Edit]Der Debugger bremst das wirklich stark aus
> Ohne sind's natürlich ca. 0,26s
Zuletzt geändert von Falko am 31.10.2004 02:35, insgesamt 6-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

PB moved die Variable warscheinlich erst in einen Register erhöht sie da und moved 'se dann zurück, C hingegen wird die ohne ohne den Register erhöhen, das wär jedenfalls eine logische Erklärung dafür.
Sollte Fred, wenn's so ist vielleicht mal ändern.

EDIT: @Falko Is doch Schnuppe welche Schleife du nimmst, sind doch immer die selben, brauch also auch immer gleich lange...

EDIT2: Hmm.., stimmt doch nich. PB macht das auch ohne Register...
Zuletzt geändert von Deeem2031 am 31.10.2004 01:53, insgesamt 1-mal geändert.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

eben nicht 8)
jede scleife hat seine vorzüge.
while / wend z.b. muss im gegensatz zu for / next keine variable einen wert zu ordnen bevor while / wend weiter machen kann.
Bild
Kristel
Beiträge: 72
Registriert: 30.08.2004 00:17

Re: Kurios - Inkrement Funktion in C als Library schneller..

Beitrag von Kristel »

grapy hat geschrieben:...habe mal so zum Testen eine Library Funktion in C geschrieben: inc(*toinc)
Könnten wir uns die Funktion bitte einmal ansehn, denn ich kann mir nicht vorstellen, dass C bei so einer einfach Sache doppelt so schnell ist.
Zuletzt geändert von Kristel am 31.10.2004 01:49, insgesamt 1-mal geändert.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

@LittleFurz: Das meinte ich doch garnicht, ich meinte nur das jede Schleife genauso lange wie die selbe Schleife dauert.. es also egal ist welche Schleife man nimmt, am Ergebniss welche schneller ist ändert sich nichts. Das einzige was passieren kann ist das beide Werte höher/tiefer sind.
Zuletzt geändert von Deeem2031 am 31.10.2004 01:50, insgesamt 1-mal geändert.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

"test+1" wird in "INC dword [v_test]" umgewandelt. Das kannste gar nicht schneller machen.
Du hast also irgendwo gewaltig mist gebaut mit deiner Zeitmessung.

Bestimmt war wieder der Debugger an... :roll:
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

achso :oops:
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Sch.... Debugger. :mrgreen:

Code: Alles auswählen

;Debugger bitte ausschalten
Zeit=ElapsedMilliseconds()
For i=1 To 100000000
test+1
Next i
Zeit1=ElapsedMilliseconds() 
Ausgabe.f=(Zeit1-Zeit)/1000
;
test=0
Zeit=ElapsedMilliseconds()
Repeat
test+1
Until test=100000000
Zeit1=ElapsedMilliseconds() 
Ausgabe1.f=(Zeit1-Zeit)/1000
;
;
test=0
;
Zeit=ElapsedMilliseconds()
While test<100000000
test+1
Wend
Zeit1=ElapsedMilliseconds() 
Ausgabe2.f=(Zeit1-Zeit)/1000
MessageRequester("Ausgabe","For/Next: ~"+StrF(Ausgabe)+Chr(10)+Chr(13)+"Repeat/Until: ~"+StrF(Ausgabe1)+Chr(10)+Chr(13)+"While/Wend: ~"+StrF(Ausgabe2))
Jetzt mal ohne Debugger getestet und da kriege ich
0,23s ; 0,18s ; 0,26s raus. (Danke @Freak, habe auch mal ausgemisstet :mrgreen:)
Zuletzt geändert von Falko am 31.10.2004 02:38, insgesamt 5-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten