AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Truther · begonnen am 20. Nov 2021 · letzter Beitrag vom 26. Nov 2021
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
680 Beiträge
 
Delphi 10.3 Rio
 
#21

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

  Alt 23. Nov 2021, 09:23
Warum ist das Nutzen von Pointer in dem Fall schneller? Das würde sich auf die Implementierungsfrage beziehen, wie oben an dem Beispiel von 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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.605 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#22

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

  Alt 23. Nov 2021, 09:37
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 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.)
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#23

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

  Alt 23. Nov 2021, 09:53
>> 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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#24

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

  Alt 23. Nov 2021, 12:06
"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...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#25

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

  Alt 24. Nov 2021, 07:27
"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
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TSchnuckenbock

Registriert seit: 20. Jul 2017
Ort: Lüneburger Heide
71 Beiträge
 
Delphi XE5 Professional
 
#26

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

  Alt 24. Nov 2021, 11:22
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.
  Mit Zitat antworten Zitat
TSchnuckenbock

Registriert seit: 20. Jul 2017
Ort: Lüneburger Heide
71 Beiträge
 
Delphi XE5 Professional
 
#27

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

  Alt 26. Nov 2021, 08:56
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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:53 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