Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern) (https://www.delphipraxis.net/209310-moeglichkeiten-code-zu-optimieren-z-b-laufzeit-verringern.html)

Sinspin 23. Nov 2021 08:23

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
Zitat:

Zitat von Truther (Beitrag 1498008)
Warum ist das Nutzen von Pointer in dem Fall schneller? Das würde sich auf die Implementierungsfrage beziehen, wie oben an dem Beispiel von
Delphi-Quellcode:
ScanLine
.
Könnte man sagen, dass das Nutzen von Pointern in der Regel schneller ist?

Pointer sind Zeiger auf Speicherbereiche. Mit Pointern kann man Rechnen und selber festlegen auf welche Stelle im Speicher man zugreifen will.
Aber schneller als andere Methoden? Nicht wirklich.

Wenn es dir auf Speed ankommt dann vezichte darauf das Bild in irgend einem Objekt (oder einer Komponente) zu lassen.
Ein Bild kann auch als eindimensionales Array gesehen werden. Im Regelfall aus drei Bytes, eins pro Farbe.
Noch schneller wird der Zugriff mit 4 Bytes. Da die Speicherzugriffe dann noch weiter optimiert werden können. Das 4. Byte wird dann einfach nicht werwendet, Speicherverschwendung aber egal wenn es nur um Speed geht.
Also nach dem laden des Bildes die Pixel in ein Array kopieren und mit dem Array arbeiten.
Den Index zum Zugriff berechnet man sich einfach selber um weiterhin Zeilen und Spalten zu haben.

dummzeuch 23. Nov 2021 08:37

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
Zitat:

Zitat von Truther (Beitrag 1498008)
Zitat:

With use of pointers we can eliminate much of pixel address addition and multiplication by Pixels property access. Only fast increment operation is performed.
Link: https://wiki.lazarus.freepascal.org/...ccess#Pointers

Warum ist das Nutzen von Pointer in dem Fall schneller? Das würde sich auf die Implementierungsfrage beziehen, wie oben an dem Beispiel von
Delphi-Quellcode:
ScanLine
.
Könnte man sagen, dass das Nutzen von Pointern in der Regel schneller ist?

Die Alternative zu Pointern ist ein Array. Das ist einfacher zu verwenden, aber je nachdem wie gut der Compiler es umsetzt besteht der erzeugte Code zum Zugriff auf ArrayDaten[x,y] immer aus einem Pointer auf den Datensatz, der berechnet wird aus:

(Pointer auf ArrayDaten) + (Datensatzgröße) * (1. Dimension) * y + (Datensatzgröße) * x

Je nachdem wie gut der Compiler das optimiert wird das Ergebnis gespeichert und kann für mehrere aufeinanderfolgende Zugriffe auf einen Datensetz verwendt werden. Wenn sehr gut optimiert wird, wird in einer Schleife der Pointer immer nur um einen Offset erhöht. Im schlimmsten (unoptimierten) Fall wird diese Berechnung bei jedem Zugriff auf ein Feld des Datensatzes neu durchgeführt.

Da aber der Delphi-Compiler dabei nicht besonders gut optimiert, kann man den Zugriff deutlich beschleunigen, indem man diese Pointer-Arithmetik selbst implementiert.

Beim Zugriff auf die ScanLine Property kommt noch dazu, dass die Getter-Funktion noch komplexere Berechnungen anstellt als einfach nur Pointer-Arithmetik.

(Alles bezogen auf Delphi, ich habe keine Ahnung, wie gut Lazarus / Free Pascal solche Zugriffe optimiert.)

KodeZwerg 23. Nov 2021 08:53

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
>> Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)

Nachdem ich gelesen habe was du geschrieben hast komme ich nur zu dem Schluß "selbst-schreiben".
Nur so kannst du das volle potenzial ausschöpfen.
"vorgefertigter" code kann gut sein, doch die sind meist auf stabilität aufgebaut und nicht auf geschwindigkeit.

Jetzt musst du halt für dich selber entscheiden was dir wichtiger ist, das erlangen neuen wissens um daraus eine hochoptimierrte variante zu entwickeln die wiederum in der herstellung viel zeit kostet,
oder nehme produkt xyz mit dessen bereitgestellten code und lebe mit der geschwindigkeit wie sie ist.

Uwe Raabe 23. Nov 2021 11:06

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
Zitat:

Zitat von KodeZwerg (Beitrag 1498027)
"vorgefertigter" code kann gut sein, doch die sind meist auf stabilität aufgebaut und nicht auf geschwindigkeit.

Jetzt bin ich etwas besorgt ob des Umkehrschlusses...

KodeZwerg 24. Nov 2021 06:27

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1498038)
Zitat:

Zitat von KodeZwerg (Beitrag 1498027)
"vorgefertigter" code kann gut sein, doch die sind meist auf stabilität aufgebaut und nicht auf geschwindigkeit.

Jetzt bin ich etwas besorgt ob des Umkehrschlusses...

Was ich damit sagen wollte, selbst erstellter code fängt nur das ab was benötigt ist, "vorgefertigter" code hat meist viel mehr Prüfungen und Routinen enthalten, die die Ausführung verlangsamen aber es sichergestellt ist das hinten was bei rauskommt.
Generic vs Specific

TSchnuckenbock 24. Nov 2021 10:22

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
Mal etwas klugscheissend: Man kann auch darauf warten, daß die Rechner schneller werden.

Das Projekt, welches ich betreue, ist so 20 Jahre oder Teile davon sogar älter. Damals mußten einige Dinge sehr zeitoptimiert ablaufen, weil die damaligen Rechner es sonst nicht schafften, die Daten zu wuppen und darzustellen.
Der Code basiert z.B. auf Reservierung von Speicher und dann die Zugriffe über Pointer. Jede Änderung am Code bedeutet immer wieder eine intensive Einarbeitung und ist extrem fehleranfällig.
Heutzutage würde man diese Code-Konstrukte durch dynamische Arrays implementieren, was viel einfacher zu verstehen und wartbarer wäre.

Was ich damit sagen will: Man sollte sich bei solchen "tricky" Optimierungen nur auf die notwendigsten Bereiche beschränken.

Uns wurde schon vor 25-30 Jahren im Studium von einem Prof. gepredigt, daß Code möglichst immer leicht verständlich sein sollte. Er warnte damals vor Code, der zwar z.B. in genial wenigen Zeilen umgesetzt wurde, aber eben "tricky" und schwer verständlich ist.

Ich meine, man kann rechenintensive Sachen auch in die Grafikkarte auslagern. Ich meine, das geht mit so ziemlich allem Krams. Ich hab da so im Hinterkopp OpenCL.

TSchnuckenbock 26. Nov 2021 07:56

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
 
Zitat:

Zitat von jaenicke (Beitrag 1497934)
Mich wundert, dass noch kein Profiler angesprochen wurde. Es gibt Tools, die analysieren welcher Teil des Codes wie lange benötigt. Daraus kann man dann ableiten wo man optimieren sollte, wenn möglich.

Die wirklich guten Profiler sind nicht gerade billig, aber dieser hier ist für den Anfang ganz gut:
https://yavfast.github.io/dbg-spider/
Quelltext:
https://github.com/yavfast/dbg-spider

Ich hab mir das Spider-Projekt mal kompiliert. Nur jetzt weiß ich nicht, wie ich genau was damit machen kann. Gibt es dazu irgendwie/irgendwo eine Anleitung? Muß die Dll irgendwie ins zu analysierende Projekt eingebunden werden?
Ich hab noch nie mit so Profilern gearbeitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Seite 3 von 3     123   

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