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
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
730 Beiträge
 
Delphi XE5 Professional
 
#1

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

  Alt 22. Nov 2021, 14:30
...Natürlich muss es
z := x * x - y * y + 2 * a; // x² - y² + 2a heißen
Wahrscheinlich wäre noch eine Mikrosekunde Ersparnis dabei, wenn man anstelle von 2*a besser a + a schreibt...
Gruß, Adreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (22. Nov 2021 um 14:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 22. Nov 2021, 15:00
Beim Integer ist Mal schneller, weil ja "nur" ein Shift.

Aber hätte gedacht, dass es beim Float auch zutrifft.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Truther
Truther

Registriert seit: 27. Mai 2013
20 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 22. Nov 2021, 18:49
Ich bin hier auf diese Seite gestoßen, die sich mit Optimierung von Code befasst.

Link: http://www.rinneberg.de/programming/opti.htm

Was sind eure Meinungen dazu? Vielleicht könnte man auf jeden einzelnen Punkt davon eingehen und näher erläutern, sofern das nicht auf der Seite selbst geschehen ist.
Möglicherweise könnte man diese Liste eben auch erweitern.

Nachtrag: In einem Artikel zu Fast direct pixel gibt es einen Punkt zu Pointer. Dort steht:

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?

Geändert von Truther (22. Nov 2021 um 18:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

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

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

  Alt 23. Nov 2021, 08: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.732 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

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

  Alt 23. Nov 2021, 08: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
 
#6

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

  Alt 23. Nov 2021, 08: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.752 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 23. Nov 2021, 11: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
 
#8

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

  Alt 24. Nov 2021, 06: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
Antwort Antwort


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 16:32 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