AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Geschwindigkeit

Ein Thema von TomyN · begonnen am 30. Nov 2020 · letzter Beitrag vom 4. Dez 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Problem mit Geschwindigkeit

  Alt 30. Nov 2020, 12:14
Wie sind datenA und datenB denn definiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
289 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Problem mit Geschwindigkeit

  Alt 30. Nov 2020, 12:19
Wie sind datenA und datenB denn definiert?
Code:
TAE = Array of Extended
Anzahl siehe den Post darüber.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit Geschwindigkeit

  Alt 1. Dez 2020, 20:33
Hinweis: Extended wird bei x64 auf Double gekappt da der 64 Bit Compiler nicht die FPU sondern SSE2 benutzt. Evtl. könnte ein Wechsel auf Single noch signifikant was bringen, falls das genau genug ist.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Problem mit Geschwindigkeit

  Alt 1. Dez 2020, 21:46
Intel VTune oder AMD μProf (je nach CPU) zur Hand nehmen und schauen, wo der Flaschenhals liegt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit Geschwindigkeit

  Alt 1. Dez 2020, 22:45
Extended war "eigentlich" nie zur Speicherung gedacht, sondern nur kurz während der Berechnung (drum kennen/kannten viele Programmiersprachen diesen Typ garnicht erst)

Tja, und wie schon erwähnt, gibt es den in Win64 garnicht mehr.
Extended außerhalb von Win32 ist im Delphi daher ein Alias für Double (Abwärtskompatibilität, damit Programme/Komponenten/Quellcodes von Programmierern, die es nicht besser wussten, dennoch kompilierbar bleiben)

Und dieses 10 Byte-Align vom Extended ist für das Caching auch nicht grade optimal.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Dez 2020 um 22:47 Uhr)
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
289 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Problem mit Geschwindigkeit

  Alt 2. Dez 2020, 08:19
Hi,

Erstmal Danke für Euere Antworten.
Zuerst wollte ich nur verstehen, warum die Doppel-FFT teilweise langsamer ist als zwei einzelne FFTs, obwohl dabei deutlich weniger Berechnungen nötig sind. Da war die erste Antwort 'CPU-Cache' eigentlich schon die 'Lösung'.
Durch die weiteren Antworten bin ich aber etwas neugierig geworden und habe noch ein wenig rumgespielt. Ich habe jeweils 100 Durchläufe berechnen lassen (jeweils mit den gleichen Startdaten).

Wenn ich nach Windows 64 kompiliere, wird Extended wohl einfach in Double umgewandelt. Daher meine irrige Meinung, dass Extended mehr Präzision 'ohne Aufpreis' bringt (und daher die Umstellung von double auf Extended). Bei den Tests war jedenfalls kein Unterschied bei der Geschwindigkeit feststellbar.

Bei Win32 als Target ist ein Unterschied zwischen Extended und Double feststellbar, dieser ist in den meisten Fällen aber relativ gering, nur bei einer FFT-Größe fällt auf, dass der CPU Cache mit double noch zurecht kommt, mit Extended aber nicht mehr so gut (oder der Compiler deutlich unterschiedlich kompiliert). Da beträgt die Verbesserung fast 50%.

Single als Datentyp bringt bei Win64 keinerlei Vorteile sondern ist sogar etwas langsamer, speziell bei kleineren FFT Größen. Vermutlich wird da erstmal alles 'verdoubled' und zurück 'gesinglet', was auch etwas Zeit kostet.

Bei Win32 bringt single eine deutliche Verbesserung.

Bei single ist Win64 als Target deutlich langsamer als die Win32, ansonsten ca. 1/3 schneller.
Für mich habe ich aktuell entschieden auf double zu gehen und das Thema 'Abwärtskompatibilität zu 32Bit Windows' nochmals zu überdenken.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.513 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Problem mit Geschwindigkeit

  Alt 2. Dez 2020, 09:30
Wie ist der Vergleich 32-Bit mit 64-Bit?
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
289 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Problem mit Geschwindigkeit

  Alt 2. Dez 2020, 10:07
Hier mal ein paar Zahlen
(A): Berechnung zweier FFTs hintereinander.
(B): Berechnung einer 'Dualen' FFT.

Kompiliert für win64 (Daten: double)

1024k FFT -> A: 289ms, B: 331ms
512k FFT -> A: 88ms, B: 139ms (!!)
256k FFT -> A: 29ms, B: 40ms (!!)
128k FFT -> A: 13ms, B: 13ms
64k FFT -> A: 6ms, B: 6ms
32k FFT -> A: 2,5ms, B: 2,4ms

Kompiliert für win32 (Daten: double)

1024k FFT -> A: 309ms, B: 350ms
512k FFT -> A: 96ms, B: 142ms (!!)
256k FFT -> A: 34ms, B: 38ms
128k FFT -> A: 16ms, B: 14ms
64k FFT -> A: 7ms, B: 6ms
32k FFT -> A: 3,0ms, B: 2,7ms

Irgendwie hängt das anscheinend sehr von der Umgebung ab. Wenn ich das Programm im VTune ausführe, dann bekomme ich (win32 + win64) bessere Werte bei der größten FFT (1024k FFT -> A: 286ms, B: 332ms, win32 und A:269ms, B: 315ms in win64), ab 512k sind die Resultate bei 32bit gleich, bei win64 gibt's bei 512k / 'dual' ein besseres Resultat ( 126ms zu 139ms).

Insgesamt sind die Unterschiede anscheinend sehr von der Umgebung abhängig, so dass ich das alles nur als große Richtung verstehe. Interessant war und ist es aber schon.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Problem mit Geschwindigkeit

  Alt 2. Dez 2020, 10:49
Tja, und wie schon erwähnt, gibt es den in Win64 garnicht mehr.
Zumindest git es noch den TExtended80Rec, mit dem man solche Zahlen auch aus einem Stream lesen kann. Der hat auch ein automatisches Fallback auf Extended unter Win32.

Um die Größe eines Extended festzustellen gibt es auch die Compilerdirektive $EXTENDEDIS10BYTES.

Single als Datentyp bringt bei Win64 keinerlei Vorteile sondern ist sogar etwas langsamer, speziell bei kleineren FFT Größen. Vermutlich wird da erstmal alles 'verdoubled' und zurück 'gesinglet', was auch etwas Zeit kostet.
Dazu gibt es hier noch ein paar Informationen: Steuerung der Gleitkommagenauigkeit (Delphi für x64)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
289 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Problem mit Geschwindigkeit

  Alt 2. Dez 2020, 10:57
Danke für die Infos.
Interessant finde ich auch, dass der Einsatz von Int64 für die Indizes die Performance sowohl für win32 (da hätte ich es erwartet) aber auch für win64 (was mich überrascht) deutlich verschlechtert.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 02:05 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