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

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

@Falko: Wieso speicherst du die Zeit in floats :?
Zuletzt geändert von Deeem2031 am 31.10.2004 02:23, insgesamt 1-mal geändert.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
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 »

@Deem2031

Sorry, hab vor lauter floats zuviel des Guten gemacht. Es braucht ja
nur ein StrF() nach der Division durch 1000.
Hab's nochmal geändert.

Danke für den Hinweis.

MfG Falko
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 »

Die Messung is sowieso etwas ungenau, andere Prozesse beeinflussen die Messung und nich jede schleife läuft gleich oft.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
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 »

Das merkt man besonders gut, wenn man dazu auch noch den Debugger
laufen läßt.
Dies ist ja auch nur ein ungefährer Vergleich. Wenn man das in Echtzeit messen wollte, müßte man theoretisch eine externe Uhr schalten.

Am besten mache ich noch ein Tildezeichen in der Ausgabe rein.

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Tibor
Beiträge: 42
Registriert: 29.08.2004 03:25
Wohnort: Mittelerde, südlich der großen Grasplantagen

Beitrag von Tibor »

Jetzt der beweis, ein guter Compiler ist die halbe Miete!
Der PB Compiler optimiert nichts und deswegen ist der von PB erzeugte ASM Code langsamer.
Ich zeige ich euch mal wie C das macht.

Code: Alles auswählen

test.l
!mov ebx,dword [v_test]
For x = 1 To 100000000
!inc ebx
Next
!mov dword [v_test],ebx
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Er hat aber nur das INC in C geschrieben, nich die ganze Schleife, also kann das nicht der Grund sein..
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Tibor
Beiträge: 42
Registriert: 29.08.2004 03:25
Wohnort: Mittelerde, südlich der großen Grasplantagen

Beitrag von Tibor »

Die Schleife ist doch scheiß egal!
Es geht darum das die Variable nicht immer wieder in und aus einem Register geschrieben wird.
PB macht das so:

Code: Alles auswählen

test.l
For x = 1 To 100000000
  !mov eax,dword [v_test]
  !inc eax
  !mov dword [v_test],eax
Next
Edit:
Mist du hast irgendwie Recht.
Während meines Optimierungswahn habe ich den original Code vergessen. :oops:
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Tibor hat geschrieben:Die Schleife ist doch scheiß egal!
Es geht darum das die Variable nicht immer wieder in und aus einem Register geschrieben wird.
PB macht das so:

Code: Alles auswählen

test.l
For x = 1 To 100000000
  !mov eax,dword [v_test]
  !inc eax
  !mov dword [v_test],eax
Next
Edit:
Mist du hast irgendwie Recht.
Während meines Optimierungswahn habe ich den original Code vergessen. :oops:
PB übersetzt das außerdem, so wie freak das schon gesagt hat, zu "INC dword [v_test]" und nicht zu "mov eax,dword [v_test]: inc eax: mov dword [v_test],eax".
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Tibor
Beiträge: 42
Registriert: 29.08.2004 03:25
Wohnort: Mittelerde, südlich der großen Grasplantagen

Beitrag von Tibor »

Ach das geht auch?
Wusste ich gar nicht.
Man lernt nie aus. :)
Kristel
Beiträge: 72
Registriert: 30.08.2004 00:17

Beitrag von Kristel »

Tibor hat geschrieben:Jetzt der beweis, ein guter Compiler ist die halbe Miete!
Der PB Compiler optimiert nichts und deswegen ist der von PB erzeugte ASM Code langsamer.
Ich zeige ich euch mal wie C das macht.

Code: Alles auswählen

test.l
!mov ebx,dword [v_test]
For x = 1 To 100000000
!inc ebx
Next
!mov dword [v_test],ebx
Das ist kein C-Code. Schon bemerkt ? :wink:

Ich glaube niemand hat sich hier die Mühe gemacht den Assembler-Output
von PB sich anzugucken. Naja ich werd mich jetzt mal "opfern".

Code: Alles auswählen

; test.l
; For x = 1 To 100000000
  MOV    dword [v_x],1
_For1:
  MOV    eax,100000000
  CMP    eax,dword [v_x]
  JL    _Next2
; test + 1
  INC    dword [v_test]
; Next  
_NextContinue2:
  INC    dword [v_x]
  JMP   _For1
_Next2:
Da steht INC dword [v_test]. Und wer jetzt noch sagt,
PB optimiert test + 1 nicht zu INC dword [v_test], der sollte sich einfach
zurückhalten und Fahrrad fahren gehen oder um es mit Dieter Nuhr zu
sagen: "Wenn man keine Ahnung hat, einfach mal Fresse halten!"

Edit: Mist, zu spät. *Deeemhau*
*Oberangebermodusan* http://www.robsite.de/php/pureboard-arc ... php?t=3675
Da steht im 1.Posting was zu Nic und Dec. Die weiteren Postings sind auch ganz interressant.
Haben wohl nicht all zu viele gelesen. 8) *Oberangebermodusaus*

Edit2: Entschuldigung angenommen
Zuletzt geändert von Kristel am 31.10.2004 14:07, insgesamt 4-mal geändert.
Antworten