![]() |
Re: Buddhabrot
hmmm ich hab das mal so getestet mit den units von dizzy und selbst geschriebenes Zeugs.
Ich muss sagen dissys Zeug ist in der Handhabung echt klasse, jedoch ist es langsamer musste ich feststellen. Was sich bei meiner Berechnung in 1ner Sekunde ausschlägt, so wie ich es geschrieben hab dauerte die Rechnung ca 5 sekunden und mit dizzys Befehlen brauchte sie ca 6 sekunden. Ich habe anstatt z.B.: sqrC(c) das hier geschrieben:
Delphi-Quellcode:
und es ist schneller, woran liegt das, ich meine dizzys Zeug ist doch fast alles in asm geschrieben.
c.x := c.x * c.x - c.y * c.y;
c.y := 2 * c.x * c.y; Außerdem ist auch das normale quadieren mit sqr langsamer als x * x zu rechnen. Kann mir das einer erklären, oder liegt es einfach daran das ich ne funktion aufrufe und das die Zeit nimmt? |
Re: Buddhabrot
Zitat:
Delphi-Quellcode:
Ich habe mir mal eine Testanwendung geschrieben, im Schnitt kamen überall etwa die gleichen Zeiten heraus (CSqr eher langsamer).
TempX := z.x;
z.x := z.x * z.x - z.y * z.y; z.y := 2 * TempX * z.y;
Delphi-Quellcode:
function sqrC(const C: TComplex): TComplex;
const two: double = 2.0; asm fld C.x; fmul C.x; fld C.y; fmul C.y; fsubp; fstp result.x; fld C.x; fmul C.y; fmul two; fstp result.y; end; function CSqr(const C: TComplex): TComplex; inline; begin Result.x := Sqr(C.x) - Sqr(C.y); Result.y := 2 * C.x * C.y; end; procedure CSqr2(var C: TComplex); inline; var TempX: Single; begin TempX := C.x; C.x := C.x * C.x - C.y * C.y; C.y := 2 * TempX * C.y; end; procedure TForm1.Button1Click(Sender: TObject); var Start: Cardinal; i, ii: Integer; TempX: Single; z: TComplex; begin Start := GetTickCount; for ii := 0 to 1000000 do begin z.x := Sqrt(0.5); z.y := Sqrt(0.5); for i := 0 to 50 do z := sqrC(z); end; ShowMessage(Format('%d', [GetTickCount - Start])); Start := GetTickCount; for ii := 0 to 1000000 do begin z.x := Sqrt(0.5); z.y := Sqrt(0.5); for i := 0 to 50 do z := CSqr(z); end; ShowMessage(Format('%d', [GetTickCount - Start])); Start := GetTickCount; for ii := 0 to 1000000 do begin z.x := Sqrt(0.5); z.y := Sqrt(0.5); for i := 0 to 50 do begin TempX := z.x; z.x := z.x * z.x - z.y * z.y; z.y := 2 * TempX * z.y; end; end; ShowMessage(Format('%d', [GetTickCount - Start])); Start := GetTickCount; for ii := 0 to 1000000 do begin z.x := Sqrt(0.5); z.y := Sqrt(0.5); for i := 0 to 50 do CSqr2(z); end; ShowMessage(Format('%d', [GetTickCount - Start])); end; |
Re: Buddhabrot
Zitat:
In Khabarakhs Messung kommen beide Varianten auf fast gleiche Ergebnisse, weil auch beides in Funktionen ausgelagert ist. Zudem ist mein asm-code nicht so viel anders als der den Delphi aus deinem generiert. Mir fielen da nur gelegentlich kleine Dinge auf die nicht 100%ig optimal waren, und deshalb hatte ich gleich alles was ich konnte in asm gebaut. Da weiss man wenigstens was man hat ^^ \\edit: Khabarakh, du hast die asm-funktion nicht ge-inlined ;) |
Re: Buddhabrot
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Hab gerade die ![]() |
Re: Buddhabrot
Zitat:
Habe mir jetzt ma gr32 und Konsorten besorgt und ich muss sagen: Nicht schlächt... Hmm es müsste mal ne Delphi version im Stil von D 5,6,7 rauskommen die aber solche "mängel" beseitigt. Ich hab mir die D2005 Demo gerade von der Borland Website geladen und ich muss sagen: Wer da beim Start nicht einschlaft.... Und die Oberfläche ist kacke, nicht mehr so schön freischwebend, kann man zwar umstellen, ist aber nicht genauso. Fazit: Neues Delphi 7 mit verbessertem Compiler^^ (da kann ich lange drauf warte) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz