AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WTF? ASM langsamer als Delphi?

Ein Thema von Xenon · begonnen am 26. Jun 2004 · letzter Beitrag vom 26. Jun 2004
Antwort Antwort
Xenon

Registriert seit: 3. Jun 2004
4 Beiträge
 
#1

WTF? ASM langsamer als Delphi?

  Alt 26. Jun 2004, 19:57
Hi,

einfach ein Memofeld namens mmAus erstellen, einen Button und diese prozedur dafür verwenden:

Laut Speedtest hab ich bei mir 1800 und 100 ms warum ist bitte der delphi code schneller als der ASM code?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var f: array[1..8, 1..8] of byte;
    p: ^byte;
    i, j: cardinal;
    x, y: integer;
    s: string;
begin
  j := GetTickCount();
  for i:=1 to 1000000 do
  begin
  p := @f[1, 1];
  asm
    PUSH EAX
    PUSH EBX
    PUSH ECX
    PUSH EDX
    MOV ECX, 64
    MOV EBX, p
    ADD EBX, 63
    @@s1:
      PUSH ECX

      XOR EDX, EDX
      MOV EAX, ECX
      DEC EAX
      MOV ECX, 8
      DIV ECX
      INC EAX
      INC EDX
      CMP AL, DL
      JG @@mod
        MOV BYTE [EBX], AL
        JMP @@ende
      @@mod:
        MOV BYTE [EBX], DL
      @@ende:
      DEC EBX

      POP ECX
    LOOP @@s1
    POP EDX
    POP ECX
    POP EBX
    POP EAX
  end;
  end;
  j := GetTickCount-j;
  ShowMessage(IntToStr(j));
  j := GetTickCount();
  for i:=1 to 1000000 do
  begin
    for x:=1 to 8 do
      for y:=x to 8 do
      begin
        f[x, y] := x;
        f[y, x] := x;
      end;
  end;
  j := GetTickCount-j;
  ShowMessage(IntToStr(j));
  for j:=1 to 8 do
  begin
    s:='';
    for i:= 1 to 8 do
      s := s+format('%2d ', [f[i, j]]);
    mmAus.Lines.Add(s);
  end;
end;
Mfg Xenon
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: WTF? ASM langsamer als Delphi?

  Alt 26. Jun 2004, 20:26
ohne jetzt groß ahnung von asm zu haben, vermute ich, dass der delphi-code einfach höher optimiert ist. entweder, weil du nicht 1:1 in asm übersetzt hast, sondern irgendwo eine abweichung zuungunsten deines asm codes drin hast, oder aber weil die delphi code optimization mal wieder ganze arbeit geleistet hat, und da irgendwas optimiert werden konnte.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz