Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schleife beschleunigen sinnvoll? (https://www.delphipraxis.net/175794-schleife-beschleunigen-sinnvoll.html)

EWeiss 19. Jul 2013 07:24

Schleife beschleunigen sinnvoll?
 
Um welchen factor könnte man diese Schleife beschleunigen?

Delphi-Quellcode:
           BASS_ChannelGetData(FChannelId, @SpectrumData, BASS_DATA_FFT2048 or BASS_DATA_FFT_INDIVIDUAL);

           for i := 1 to 576 do
           begin
             p2^ := trunc(SpectrumData[i * 2] * FVisScale);
             inc(p2);
           end;
eventuell über ASM und wenn dann wie, wenn es was bringt.
Habe den eindruck als wenn BASS_ChannelGetData das ganze etwas ausbremst.

gruss

Namenloser 19. Jul 2013 07:31

AW: Schleife beschleunigen sinnvoll?
 
Die FFT ist mit Sicherheit deutlich langsamer als die Schleife → Bringt nichts, die Schleife zu optimieren.

Ich glaube auch nicht, dass man da überhaupt viel optimieren könnte, außer vielleicht mit speziellen SSE-Befehlen in Assembler. Dann läuft die Schleife vielleicht 4x so schnell, aber das ganze Ding nur 1% schneller. Daher ist es den Aufwand, die höhere Komplexität und die schlechtere Lesbarkeit definitiv nicht wert.

Generell hat es aber wenig Sinn, basierend auf Mutmaßungen optimieren zu wollen. Lad dir mal den SamplingProfiler (kostenlos) runter, stell unter Delphi in den Projekt-Optionen (unter „Linker“) deines Projektes ein, dass eine MAP-Datei generiert werden soll (je detaillierter desto besser) und erzeuge das Projekt neu. Anschließend lass mal den Profiler drüberlaufen, dann siehst du eher, wo die Flaschenhälse liegen...

EWeiss 19. Jul 2013 07:39

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Generell hat es aber wenig Sinn, basierend auf Mutmaßungen optimieren zu wollen.
Da stimme ich dir grundsätzlich zu.

Mein problem ist halt das bei C# Anwendungen die CPU last rapide in die höhe schnellt.
Der einzige Ansatz der hier in frage käme wäre halt die optimierung der IF schleifen der FFT und WaveDaten.

Seltsamer weise ist das wiedermal nur in .NET zu verzeichnen.
Bei anderen Awnendungen Delphi > Delphi, VB > Delphi usw.. gibt es die probleme nicht.
Ich muss halt nun feststellen was dieses problem verursacht meine DLL oder die NET Anwendung selbst.

Werde mal testen was das mit dem SamplingProfiler auf sich hat.

Danke.

gruss

DeddyH 19. Jul 2013 07:44

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Zitat von EWeiss (Beitrag 1222001)
Der einzige Ansatz der hier in frage käme wäre halt die optimierung der IF schleifen der FFT und WaveDaten.

Erwischt :mrgreen:

Namenloser 19. Jul 2013 07:46

AW: Schleife beschleunigen sinnvoll?
 
Achso, der Code läuft in einer DLL, die von C# aus benutzt wird? Da kenne ich mich nicht mit aus... weiß auch nicht, ob man den SamplingProfiler da überhaupt benutzen kann, vermutlich nicht.

Aber wenn die Performance nur unter C# schlecht ist, dann wird es wohl kaum an dem Code selber liegen. Also wäre ein C#-Profiler wohl eh besser...

EWeiss 19. Jul 2013 07:50

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Zitat von DeddyH (Beitrag 1222002)
Zitat:

Zitat von EWeiss (Beitrag 1222001)
Der einzige Ansatz der hier in frage käme wäre halt die optimierung der IF schleifen der FFT und WaveDaten.

Erwischt :mrgreen:

Grrr jo FOR ;) hehehehe

Zitat:

SamplingProfiler
Jo geht nicht unterstützt nur EXE

Zitat:

C#-Profiler
Mal schaun ob es sowas gibt.

gruss

Union 19. Jul 2013 08:35

AW: Schleife beschleunigen sinnvoll?
 
Du könntest höchstens versuchen, den Faktor als Integer (z.b. iVisScale := trunc(FVisScale * 100)) zu setzen und in dem Zielbereich dann mit höheren Werten zu arbeiten. Dann müsstest Du allerdings die daraf basierenden Funktionen zur Weiterverarbeitung ebenfalls umstellen. Es würde dann in der Schleife jedenfalls kein trunc und keine Float-Multiplikation mehr auftauchen. Versuch aber auf jeden Fall zunächst die Laufzeit zu loggen. Es bringt gar nichts eine Funktion die nur 1% der Gesamt-Laufzeit verbaucht um 100% zu beschleunigen.

EWeiss 19. Jul 2013 08:54

AW: Schleife beschleunigen sinnvoll?
 
Zitat:

Versuch aber auf jeden Fall zunächst die Laufzeit zu loggen
Bin gerade dabei mit dotTracePerformance ;)

Den anderen vorschlag werde ich mal versuchen sollte sich hier nichts ergeben.
Danke.

gruss

jfheins 19. Jul 2013 10:24

AW: Schleife beschleunigen sinnvoll?
 
Wenn du ein C# Projekt da hast, kann ich für dich auch mal den Profiler drüber laufen lassen. (Den, der in VS2012 eingebaut ist)

Normalerweise ist aber eine unmanaged dll relativ performant bei dem Zeug was darin ausgeführt wird. Lediglich der Aufruf an sich hat etwas overhead. (Also lieber eine Funktion, die viele Parameter entgegen nimmt, als 5 Funktionen die alle nur einen haben)

Weitere Ratschläge gibt's auch hier: http://msdn.microsoft.com/en-us/library/ms998551.aspx

EWeiss 19. Jul 2013 10:33

AW: Schleife beschleunigen sinnvoll?
 
Wie gesagt die Delphi DLL wenn sie in einer Anwendung mit Delphi geschrieben verwendet wird
und ich anschließend Milk2 im Vollbild laufen lasse hab ich ne last von 7% maximal.
Unter NET sind es gut 30%.

Das will mir nicht in den kopf das nur hier die auslastung so hoch ist.

Das projekt ist Mediaportal ist einfach zu groß um zu schicken ;)
Ich hab den Profiler von 2012 drüber gejagt der mir aber nur da sagt was ich schon wußte bzw.
die functionen aufgezeigt welche die last verursachen.


gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.
Seite 1 von 5  1 23     Letzte »    

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