-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
27. Feb 2016
Kann ich verstehen, betriebswirtschaftlich ist das für mich auch wenig sinnvoll, aber ist eben interessant.
Mir ist bei Deinem Testprogramm noch aufgefallen, dass bei SSEex die falsche Prozedur aufgerufen wird:
{------------------------------------------------------------------------------}
{ IsPartlyTransparentSSEex }...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
26. Feb 2016
Wenn Du so weiter machst, hast Du bald so eine Art Test-Suite im Angebot...:wink:
Die Ex und SSEex erscheinen recht schnell, jedoch weichen die Messungen relativ stark voneinander ab, wenn ich einfach ein paar mal hintereinander die gleiche Funktion aufrufe (siehe anliegenden Screenshot).
Woran könnte denn so etwas liegen?
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
25. Feb 2016
Klar, das kannte ich auch schon, denn wenn man unter FMX was messen will (insbesondere andere OS), dann ist es da die angesagte Funktion.
Unter Windows benutzt TStopwatch aber auch QueryPerformanceCounter und hier hatte ich mir schon vor langer Zeit mal die benötigten MS-Funktionen in eigene Start- und Stop-Funktionen gekapselt.
Aber wer das noch nicht gemacht hat, kann hier Dank der...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
25. Feb 2016
Meine ASM-Kenntnisse sind leider sehr rudimentär. Scheint aber mit Deinen Änderungen jetzt zu funktionieren, jedenfalls fällt mir nichts ungewöhnliches mehr auf. Scheint wohl insgesamt die schnellste Variante zu sein. Unter AQTime kommt die so zwischen 35 und 45 MS (meine Demo-Version ca. 22 MS).
Insgesamt glaube ich aber inzwischen, dass man hier per ASM oder sonstige Prüf-Optimierungen wohl...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
25. Feb 2016
Messe mit
QueryPerformanceFrequency(iTimerFreq);
QueryPerformanceCounter(iTimerStart);
Das sollte doch OK sein, oder?
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
25. Feb 2016
Also die erste Messung meiner Standard-Methode war im Debug-Modus mit AQTime, da habe ich wohl mal 80 MS gemessen. Das scheint aber relativ zu schwanken, jetzt kriege ich DEBUG-Modus immer um die 60 MS. Im Release-Modus um die 50 MS.
Im Unterschied dazu sind die Messungen mit der Demo-Anwendung, die ich geschrieben und hier ja mal hochgeladen hatte etwas anders.
Im Debug-Modus erhalte ich...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
25. Feb 2016
Ja, korrekt. Aber durch eine Giga-SSD und zügige NVIDIA-Karten eigentlich noch gut nutzbar.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
24. Feb 2016
Also die Single-Core-Lösung die hier am schnellsten ist, ist die aus "IsPartlyTransparentASM" (unter AQTime wird die in Average-Time ca. 20 MS schneller angezeigt, als meine Standard-Variante. Im Einzeltest sind die aber fast gleichschnell. Keine Ahnung, warum hier so Unterschiede entstehen. Bei AQTime gab es allerdings ca. 26 Durchläufe).
Die Variante habe ich hier mal auf meine...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
24. Feb 2016
Wow, bin beeindruckt:thumb:
In der Anlage ein Screenshot mit den Testergebnissen. Meine AMD-CPU ist halt doch ein Ticken langsamer.
Was mich aber wundert, sind die z.T. erheblichen Schwankungen beim gleichen Test (SSE: 13 / 25 MS).
32- oder 64-Bit macht keinen nennenswerten Unterschied.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
24. Feb 2016
Meine CPU ist schon etwas älter, aber durchaus schnell genug für meine Zwecke:
AMD Athlon 64 X2 Dual Core Processor 5000+, 2600 MHz, 2 Kern(e), 2 logische(r) Prozessor(en)
Die hier gezeigte Variante ist mit ca. 23 MS in etwa so schnell wie meine Lösung (ebenfalls im Release-Mode)
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
23. Feb 2016
Es ist halt ein simples Flag, das an vielen Stellen gesetzt werden müsste und wenn ich jetzt nur eine Stelle übersehe, dann kann es schon falsch laufen. Außerdem könnten letztlich viele Funktionen aufeinanderwirken, so dass ich letztlich auch mehrmals prüfen müsste, ob eine Grafik einer Bildebene nun teiltransparent ist oder nicht und dann stellt sich die Frage, ob hier in der Summe von mehr oder...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
23. Feb 2016
Vielen Dank für die weiteren Bemühungen.
Deine vorletzte Variante ist nun ca. 1 MS schneller als meine.
Die letzte Variante stürzt immer ab.
Du kannst übrigens auch mit Delphi 2010 mein Demo, dass ich hier hochgeladen habe, verwenden, entfernst halt nur System.Threading und System.syncobjects und die Variante mit TParallel, dann hast Du eine 32-Bit-Bitmap und kannst diese per Schalter auch...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
22. Feb 2016
Ja, für jede Ebene gibt es ein Ebenen-Objekt, wo verschiedene Informationen zu den Bildern der Ebene gespeichert werden.
Aber bei einem 32-Bitmap-Bild sich einmal zu merken, ob es (Teil-)transparente Pixel hat, bringt wahrscheinlich nicht soviel, denn man müsste bei jeder Änderung, die potentiell Transparenz erzeugen kann (Löschen, Einfügen, Filter, Verläufe, Malen mit unterschiedlicher...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
22. Feb 2016
Ja, Deine Nachfrage und meine Antwort haben sich hier gerade überschnitten.
Also im Release-Modus leider nicht schneller.
Wenn es da den SUPER-ASM-Befehl nicht gibt, müsste man sich vielleicht in den DirectX-Funktionen noch einmal umsehen, evtl. gibt es da etwas, was per GPU-Unterstützung diese Frage beantworten kann.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
22. Feb 2016
Hey, Danke erst mal an Alle, die sich hier an den Überlegungen beteiligt haben.
In der Tat muss man den Einwand von Uwe berücksichtigen, ob mit Debug oder Release kompiliert.
Da die Auslieferung des Programms natürlich in Release erfolgt, ist das letztlich der Maßstab (hatte mein Demo aber im Debug-Modus getestet).
Anliegend daher die hier aufgeführten Varianten einmal zum Testen...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
22. Feb 2016
Ja, es geht hier um Bilder, das aus mehreren Ebenen besteht (z.B. aus Photoshop bzw. meinem eigenen Dateiformat, siehe mal zur Demo anliegenden Screenshot). Da muss ich halt prüfen, ob ein Ebenenbild ein oder mehrere Pixel mit Transparenz hat, denn das muss ich dann mit dem darunterliegenden verrechnen (ohne Transparenz kann man es einfach drüberschreiben).
Da die Verrechnungsvariante auf...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
21. Feb 2016
Oder gibt es was in der Grafik-32 Bibliothek?
Oder DirectDraw? Irgendeine Lösung, welche die schnellere GPU nutzt, wäre natürlich auch willkommen.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
21. Feb 2016
Ja, wäre eine mögliche Verbesserung. Doch damit steigt die Komplexität wieder an und es wird so ein unschönes unleserliches Ungetüm draus. Und ob es schneller ist?
Insofern wäre mir eine Standard-Lösung lieber, z.B. per ASM.
Kenne mich mit Assembler aber leider nicht so gut aus.
Aber hier muss ja letztlich nur über einen zusammenhängenden Speicherbereich, jeweils in Abständen von 4 Byte...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
21. Feb 2016
Na, sowas sollte ja wohl jedes Grafikbearbeitungsprogramm drauf haben (in meinem Programm - PixPower - wählt man dazu einfach im Dropdown-Schalter "Farbe" unter Menü "Farbtiefe" 32 Bit, siehe anliegenden Screenshot).
Photoshop braucht man dafür wirklich nicht.:wink:
Aber wie auch immer, habe mal die Demo so verändert, dass die Grafik zur Laufzeit erzeugt wird (will hier keine 45...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
21. Feb 2016
Bin mir da nicht so sicher, wegen des Overheads. Hatte ich zwar schon mal gemacht, allerdings zeigt mir AQtime seltsame Messwerte an (0,3 MS, was nicht sein kann) und bei einem Extra-Test-Projekt schwanken die einzelnen Testergebnisse zwischen 28 und 56 MS:
type
TRGB32 = packed record
B, G, R, A: Byte;
end;
TRGB32Array = packed array of TRGB32;
PRGB32Array = ^TRGB32Array;
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Harry Stahl,
21. Feb 2016
Derzeit verwende ich folgende Methode, um ein 32-bit-Bitmap auf Vorhandensein eines (Teil-) Transparenten Pixels zu prüfen:
function HasTransparentRGBAValues (const bm:TBitmap): Boolean;
var
x, z: Integer; RGBA: pRGBALine;
begin
Result := FALSE;
RGBA := bm.Scanline;
z := bm.Width * bm.Height;