umsortieren von Speicher (für fft)
-
Was ist fft?
-
-
ing schrieb:
SeppJ schrieb:
Das schlaueste und schnellste wäre es, fft nicht selber zu implementieren.
Findest du? Sehe ich anders. Viele dieser Bibliotheken sind total überladen und damit langsamer als es sein muss. Man ist meistens schneller wenn man es auf sein spezielles Problem optimiert und alles unnötige herausschmeisst.
Hihi. Will sehen. Deine Implementierung die schneller ist als FFTW.
Muaha
pospiech schrieb:
würde auch swap_ranges funktioniere, und welche Variante wäre schneller?
Öhm. Ausprobieren?
-
hustbaer schrieb:
Hihi. Will sehen. Deine Implementierung die schneller ist als FFTW.
Muaha
Na dann solltest du dich mal zuerst damit auseinandersetzen bevor du hier herumkicherst.
Trotz des recht hohen Alters dieser Programme gibt es immer wieder neue Versionen die i.d.R. schneller werden. Woran liegt es wohl? Als Beispiel könnte man Anpassungen an neue Prozessoren nehmen. Ich weiß nicht in wie weit der Hauptzweig von FFTW inline assemblies gestattet aber da würde ich z.B. starkes Potential sehen. Die Compiler sehen heute sehr viel aber nicht alles. Da solche Hacks Prozessorabhängig sind, werden sie oft nicht im Hauptzweig zugelassen.
Dann kommen noch Prozeduraufrufe zur nummerischen Stabilisierung (z.B. LAPACK conditioner, Konditionszahl, Determinante). Wenn man genau weiß dass man es für seinen Datensatz nicht braucht dann kann man getrost darauf verzichten.
Was man auch gerne macht ist aus dem schönen gegliederten und auf Funktionen/Prozeduren aufgeteilten Code eine einzelne gemeinsame Funktion für den eigenen speziellen Fall. Dadurch spart man sich Funktionsaufrufe, Parameterübergaben usw.
Dann kommen noch speziell für FFTs die Wavelets. Ich weiß nicht ob du studiert hast oder ob im Informatikstudium Wavelets im gelesen werden aber spätestens hier könnte es ein O(n) vs. O(n*log(n)) zu Gunsten der Wavelets geben. Wenn man in der Lage ist das Problem zu überblicken.
Noch ein spezielles FFTW Problem ist das für SMP nur POSIX,OpenMP und MPI zur Verfügung stehen. Damit hast du unter Windows eine Krücke verglichen mit Win32 Threads.
Aus diesem Grund verwende ich nur sehr selten diese Fertigpakete so wie sie im Netz bereitstehen. Sie sind eine äußerst exzellente Ausgangsbasis für
(kleinere Werte = besser)
1)Code Optimierung
2)Objektorientierung
3)allgemeine Probleme
4)übersichtlichen "schönen" Code.
5)nicht ausreichende Mathematikkenntnisse
6)Faule Menschen, die einfach nicht in den Code schauen möchten weil sie dort Voodoo vermuten
7)wenn der Projektleiter/Zuständige zu wenig Spitzengefühl für die auszuwertenden Datensätze besitztoder einfach weil kein Grund besteht Mittel für Optimierungen bereitzustellen.
Meistens jedoch haben diese Pakete zumindest in meinem Umfeld nie den gleichen Code im fertigen Produkt wie er mal heruntergeladen wurde.
Bevor du daran denkst hier zu widersprechen und weiter zu kichern solltest du dir mal die Beschreibung der Intel MKL anschauen.
-
ing schrieb:
Bevor du daran denkst hier zu widersprechen und weiter zu kichern solltest du dir mal die Beschreibung der Intel MKL anschauen.
Dann kichere ich in hustbaers Namen weiter und ich kenne auch die Intel MKL. Wenn du behauptest man könne einfach mal eine fft implementieren die schneller ist als FFTW oder FFTW anpassen, um es schneller zu machen, dann will ich mehr als großspurige Worte sehen.
-
SeppJ schrieb:
ing schrieb:
Bevor du daran denkst hier zu widersprechen und weiter zu kichern solltest du dir mal die Beschreibung der Intel MKL anschauen.
Dann kichere ich in hustbaers Namen weiter und ich kenne auch die Intel MKL. Wenn du behauptest man könne einfach mal eine fft implementieren die schneller ist als FFTW oder FFTW anpassen, um es schneller zu machen, dann will ich mehr als großspurige Worte sehen.
Oben ist alles zusammengefasst und sollte für jeden verständlich sein!? Ich habe mir Mühe gegeben und wundere mich jetzt ganz gewaltig. Nochmal kurz:
Weglassen von Funktionssprüngen -> Vorteil
Weglassen von Konditionierungen -> Vorteil
Weg von OpenMP zu Win32 Threads -> Vorteil
(Wenn Wavelets möglich) -> VorteilMal ehrlich:
Wie oft hast du damit zu tun?
Was ist daran bitte unschlüssig?
Wie oft hast du versucht da etwas herauszuholen?Alleine die Tatsache dass FFTW jetzt demnächst AVX unterstützen wird ist doch abzusehen dass es zu Performancesteigerungen kommt. Wenn keiner von euch Da ist mir meine Zeit doch ein wenig zu schade.
BTW:
Wo bist du beschäftigt und was ist dein Aufgabenfeld und wie ist deine Qualifikation?Mein Aufgabenfeld ist die Nahbereichsphotogrammetrie und Parameterschätzung an einem Institut einer Bildungseinrichtung einer Landeshauptstadt. (Dürften genügend Variablen sein um anonym zu bleiben).
-
Schön für dich. Und ich mache wissenschaftliche Rechnungen auf einem anderen Gebiet an einem Institut einer Bildungseinrichtung einer Landeshauptstadt. Und ich behaupte, du kommst mit einer Eigenentwicklung nicht gegen fertige FFT an. Und nun? Schwanzvergleich?
Wenn du behauptest, die professionell entwickelten FFT-Bibliotheken in Handarbeit schlagen zu können (was meinst du wohl, wie die entwickelt werden?), dann zeig her, am besten mit fertigem Benchmark. Deine Gründe kann ich auch nicht nachvollziehen:
Prozessorspezialisierungen? Für die bekannten Prozessoren gibt es Spezialisierungen der FFTW und auch eigene Bibs der Prozessorhersteller. Die Intel MKL hast du selber genannt. Willst du alleine besseren Code für Intelprozessoren entwickeln als das Entwicklerteam von Intel selbst?
Weglassen nummerischen Stabilisierung: Ok, das ist ein Punkt, aber wann liegt das schon vor, dass man sich wirklich 100% sicher ist, dass man es nicht braucht?
Weglassen von Funktionssprüngen: Uhh, 20 Anweisungen gespart von 200 Milliarden.
Wavelets: Wenn Wavelets günstiger sind, dann nimm eben die. Aber das willst du doch wohl nicht auch noch selber entwickeln?
Win32-Threads: Windowssysteme in professionellem, verteiltem Rechnen? Wo gibt's das denn?
-
SeppJ schrieb:
Schön für dich. Und ich mache wissenschaftliche Rechnungen auf einem anderen Gebiet an einem Institut einer Bildungseinrichtung einer Landeshauptstadt. Und ich behaupte, du kommst mit einer Eigenentwicklung nicht gegen fertige FFT an. Und nun? Schwanzvergleich?
Wenn du behauptest, die professionell entwickelten FFT-Bibliotheken in Handarbeit schlagen zu können (was meinst du wohl, wie die entwickelt werden?), dann zeig her, am besten mit fertigem Benchmark.
Prozessorspezialisierungen? Für die bekannten Prozessoren gibt es Spezialisierungen der FFTW und auch eigene Bibs der Prozessorhersteller.
Die Intel MKL hast du selber genannt. Willst du alleine besseren Code für Intelprozessoren entwickeln als das Entwicklerteam von Intel selbst?
Dafür dass du überlesen hast dass meine Ausgangslage der heruntergeladene Code war/ist den ich später auf mein Aufgabenfeld reduziere bist du ganz schön unfreundlich obwohl kein Grund dafür besteht.
... Wissenschaftliche Berechnungen soso ...
SeppJ schrieb:
Weglassen nummerischen Stabilisierung: Ok, das ist ein Punkt, aber wann liegt das schon vor, dass man sich wirklich 100% sicher ist, dass man es nicht braucht?
Liegt regelmäßig vor. Man achtet schon bei der Bildung eines Modells darauf. Ein ganz simples Beispiel ist ein Kreis im Lp-Raum. Man kann ihn als : (x + vx - xm)² + (y + vy - ym)² - r² = 0 ansehen oder als sqrt((x + vx - xm)² + (y + vy - ym)²) - r = 0 oder als Quadrik oder als Kegelschnitt. In der zweiten Notation hast du im Differenzial eine Normierung durch den Radius was äußerst günstig gegenüber den Quadraten in der ersten Notation steht.
... Mir dämmert da etwas was ich nicht aussprechen möchte ...
SeppJ schrieb:
Weglassen von Funktionssprüngen: Uhh, 20 Anweisungen gespart von 200 Milliarden.
Wohl eher pro Berechnungsgruppe ein Funktionsaufruf. Am besten in Echtzeit.
... Das Gefühl wird immer stärker ...
SeppJ schrieb:
Wavelets: Wenn Wavelets günstiger sind, dann nimm eben die. Aber das willst du doch wohl nicht auch noch selber entwickeln?
Bitte zuerst informieren was Wavelets sind und wie/wo sie eingesetzt werden (können). Finger Weg von Wikipedia.
... Spätestens hier müsste ich aufhören dir zu antworten ...
SeppJ schrieb:
Win32-Threads: Windowssysteme in professionellem, verteiltem Rechnen? Wo gibt's das denn?
Willkommen im 21 Jahrhundert. Nahezu jedes professionelle Tool hat eher eine Windows Version als eine Linux Version. Was ich jetzt sicherlich nicht befürworte. Dennoch wäre es als Geldgeber nachlässig Windows zu ignorieren. Derjenige, der hier um Hilfe bat hat sicherlich nicht nach einer Distributed Computing oder Cluster Lösung gesucht, das hätte er sicherlich woanders gemacht.
Verstehe mich jetzt bitte nicht falsch aber ich habe wirklich das Gefühl dass du noch nie in diesem Gebiet gearbeitet hast. Worüber wir uns hier unterhalten sind Basics und Allgegenwärtig. Das muss man noch nicht einmal ausdiskutieren. Auf einer Podiumsdiskussion würde ich mich an deiner Stelle nicht so weit hinauslehnen. Jetzt wärest du ganz ohne Hose da gestanden. Dieses Gebiet ist ein bisschen komplexer als du es dir vorstellst und da fällt es sofort auf wenn jemand über Basiswissen verfügt oder nicht. Ich kann doch auch nicht zu einem Biologen gehen und ihm was über Zellwände erzählen oder was anderes was ich im Abitur gehört habe. Das wäre einfach zu mager. Genau so ist es hier. Heisse Luft produzieren und sie durch eigene Gestikulation umwälzen. Ich möchte mich auch nicht mit dir streiten weil mir deine Sprachwahl etwas zuwider ist (meine mittlerweile auch), deswegen verabschiede ich mich mal. Gute Nacht.
-
Übersetzung: Dädädä, was ich mach is viel komplizierter!111111
-
@ing:
Wieso wunderst du dich jetzt?
Du hast ein allgemeines Statement gegeben, das so, für die meisten Anwendungen und Programmierer, einfach nicht stimmt.
Für die meisten Anwendungen und Programmierer macht es nämlich keinen Sinn, eine FFT selbst zu implementieren. Sei es nun ohne "Vorlage" oder auf Basis eines Pakets wie FFTW.
Ganz einfach weil die meisten Anwendungen die zusätzliche Geschwindigkeit nicht brauchen, und weil die meisten Programmierer es einfach nicht besser hinbekommen werden.Jetzt versuchst du zu argumentieren dass wir ja alle bloss zu doof sind (=nicht die nötige Ausbildung/die nötigen Kenntnisse dazu haben). Das zeigt doch schon deutlich, dass deine - allgemeine - Aussage so nicht haltbar ist.
Und dann kommst du mit Dingen, die mit FFT nur wenig zu tun haben, wie z.B. Wavelets. Das ist ja wohl keine Optimierung, das ist ein ganz anderes Verfahren. Bestimmte Dinge lassen sich mit Wavelets besser (schneller) machen als mit FFT/DCT/..., OK. Nur das hat mit Optimieren einer FFT nichts zu tun. Dann kannst du gleich nen Sortier-Algorithmus mit einer min-max Suche vergleichen. Macht irgendwie keinen Sinn.
Aber bleib ruhig weiter bei deiner "ich hab immer Recht, und wenn nicht, sind die anderen bloss zu doof" Einstellung.