AW: Mandelbrot-Menge optimieren
dumme Frage, aber können die Threads gleichzeitig auf die TBitMap zeichnen ? Denn sie sollten dank ScanLine ja niemals in der selben Zeile sein :?:
Ansonsten habe ich nachgedacht die Zeilen in Abhängigkeit von den Kernen zu erstellen, da es evtl. zu viel Aufwand ist X-kleine Threads zu erstellen als z.B. 8 die etwas mehr zu rechnen haben. Diese 8 Streifen könnten jeweils eine eigene BitMap haben, die dann im MainThread zusammengeklebt werden :idea: Zitat:
Delphi-Quellcode:
if (i < 100) and (A < 4)
then begin nX := (X*X) - (Y*Y) + X_Ko; nY := 2*X*Y + Y_Ko; nA := nX*nX + nY*nY; result := rechne(X_Ko, Y_Ko, nX, nY, nA, i+1); end; //Edit: Kann die .Execute nicht auf andere Methoden zugreifen ? Schutzklassen sollten da ja keine Probleme bereiten .. aber wenn ich meine 'rechne' function in der .Execute aufrufe passiert nichts - kopiere ich die function hinein läuft es ?! |
AW: Mandelbrot-Menge optimieren
Zitat:
Was ich über das Wurzelziehen und dessen Vermeidung geschrieben habe ist richtig und ist eigentlich in jedem Code so umgesetzt. Z.B. auf Wikipedia http://de.wikipedia.org/wiki/Mandelb...es_Bildpunktes |
AW: Mandelbrot-Menge optimieren
komischer weise tritt dieses Fehlverhalten nur bei der Rekursiven Variante auf :shock:
Das finde ich dann doch sehr seltsam .. kann mich da jemand aufklären was mein Denkfehler bei der Rekursion ist ? Strange.. |
AW: Mandelbrot-Menge optimieren
Zitat:
Tue es doch einfach! Ehe du es tust, um es abzukürzen: Ein gewaltiges Beschleunigungspotential ergibt sich dadurch, daß man (mehr oder weniger) kleine (rechteckige, am besten quadratische) Flächen gleich komplett färbt: Sind ihre 4 Eckpunkte, die man als erstes berechnet, gleichfarbig, so ist es mit großer Wahrscheinlichkeit das gesamte von ihnenn eingehüllte Viereck. Um Irrtümer anzahlig zu reduzieren, kann man ja auch rekursiv vorgehen und in größeren Vierecken kleinere auf gleiche Weise prüfen und ggf. füllen. Dagegen sind Scanline und Threads läppisch, obwohl beide natürlich auch ihre Berechtigung und Vorteile haben. |
AW: Mandelbrot-Menge optimieren
Zitat:
|
AW: Mandelbrot-Menge optimieren
Zitat:
Zitat:
Fällt nun der Groschen? Ausgedacht habe ich mir das nicht, sondern schon vor ca. 20 Jahren (!) in einem DOS-Fraktalprgramm wahrgenommen. Zitat:
|
AW: Mandelbrot-Menge optimieren
Ich kann mir nur schwer vorstellen, dass dabei keine Artefakte auftreten...
|
AW: Mandelbrot-Menge optimieren
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Mandelbrot-Menge optimieren
Liste der Anhänge anzeigen (Anzahl: 5)
Mein Versuch die Auswirkung von Threads bei bestimmten Randbedingungen zu untersuchen ...
|
AW: Mandelbrot-Menge optimieren
Zu der Sache mit dem Bitmap und den der Aufteilung der Arbeit unter den Threads nach Scanlines:
Unabhängig davon ob man das (bzgl. Threadsicherheit) so machen kann/darf: Ich habe dem Benutzer (aus Spaß) die Möglichkeit gegeben das Mandelbrot selbst einzufärben. Also je nachdem bei wie vielen Iterationen der Pixel "rausfliegt" diesen Pixel anders einfärben zu lassen. Wenn man in der Palette 10 Einträge hat dann bekommt ein Pixel der nach 11. Iterationen rausfliegt wieder die 1. Farbe. Das Wechseln der Palette ist um einiges leichter und schneller wenn man nicht direkt auf ein Bitmap zeichnet sondern die Anzahl der Iterationen pro Pixel in einem 2D-Array speichert. So kann man das Mandelbrot schnell und einfach neu einfärben ohne alles neu berechnen zu müssen :) Ist jetzt natürlich kein Tipp mit dem man die Performance der Berechnung steigern kann, aber falls du sowas vorhast, dann ist das Zwischenspeichern in einem Array sicher zu empfehlen ;-) Edit: Ich hoffe mein Text ist nicht zu verwirrend geschrieben :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 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