![]() |
Schleife beschleunigen sinnvoll?
Um welchen factor könnte man diese Schleife beschleunigen?
Delphi-Quellcode:
eventuell über ASM und wenn dann wie, wenn es was bringt.
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; Habe den eindruck als wenn BASS_ChannelGetData das ganze etwas ausbremst. gruss |
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 ![]() |
AW: Schleife beschleunigen sinnvoll?
Zitat:
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 |
AW: Schleife beschleunigen sinnvoll?
Zitat:
|
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... |
AW: Schleife beschleunigen sinnvoll?
Zitat:
Zitat:
Zitat:
gruss |
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.
|
AW: Schleife beschleunigen sinnvoll?
Zitat:
Den anderen vorschlag werde ich mal versuchen sollte sich hier nichts ergeben. Danke. gruss |
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: ![]() |
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 06:21 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