AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Schleife beschleunigen sinnvoll?

Ein Thema von EWeiss · begonnen am 19. Jul 2013 · letzter Beitrag vom 21. Jul 2013
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
EWeiss
(Gast)

n/a Beiträge
 
#1

Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 07:24
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 07:31
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...

Geändert von Namenloser (19. Jul 2013 um 07:36 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 07:39
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

Geändert von EWeiss (19. Jul 2013 um 07:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 07:44
Der einzige Ansatz der hier in frage käme wäre halt die optimierung der IF schleifen der FFT und WaveDaten.
Erwischt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 07:46
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...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 07:50
Der einzige Ansatz der hier in frage käme wäre halt die optimierung der IF schleifen der FFT und WaveDaten.
Erwischt
Grrr jo FOR hehehehe

Zitat:
SamplingProfiler
Jo geht nicht unterstützt nur EXE

Zitat:
C#-Profiler
Mal schaun ob es sowas gibt.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 08:35
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 08:54
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 10:24
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Schleife beschleunigen sinnvoll?

  Alt 19. Jul 2013, 10:33
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

Geändert von EWeiss (19. Jul 2013 um 11:25 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:37 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