Seite 2 von 3

Verfasst: 31.10.2004 02:09
von Deeem2031
@Falko: Wieso speicherst du die Zeit in floats :?

Verfasst: 31.10.2004 02:22
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

Verfasst: 31.10.2004 02:25
von Deeem2031
Die Messung is sowieso etwas ungenau, andere Prozesse beeinflussen die Messung und nich jede schleife läuft gleich oft.

Verfasst: 31.10.2004 02:34
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

Verfasst: 31.10.2004 03:13
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

Verfasst: 31.10.2004 03:19
von Deeem2031
Er hat aber nur das INC in C geschrieben, nich die ganze Schleife, also kann das nicht der Grund sein..

Verfasst: 31.10.2004 03:25
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:

Verfasst: 31.10.2004 03:35
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".

Verfasst: 31.10.2004 03:37
von Tibor
Ach das geht auch?
Wusste ich gar nicht.
Man lernt nie aus. :)

Verfasst: 31.10.2004 03:39
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