Großer Zweidimensionaler Vector braucht ewig zur Freigabe



  • Im Großen und Ganzen genau das, was ich sagen wollte.
    🕶
    Ich maulfauler, ich...



  • CStoll schrieb:

    Caligulaminus schrieb:

    14.000.000 complex auf dem Stack?
    Sportlich! 🤡

    Wenn du sie in einen vector<> packst, landen sie trotzdem auf dem Heap - aber das Zerstören eines complex geht wesentlich schneller als das Zerstören eines (Unter)vector<>s

    Argh, natürlich. Kleiner Denkfehler 😃



  • CStoll schrieb:

    Caligulaminus schrieb:

    14.000.000 complex auf dem Stack?
    Sportlich! 🤡

    Wenn du sie in einen vector<> packst, landen sie trotzdem auf dem Heap - aber das Zerstören eines complex geht wesentlich schneller als das Zerstören eines (Unter)vector<>s

    Vor allem als das Zerstören eines nicht-leeren (Unter)vector<>s.
    Dann heisst es nämlich 14 Mio. mal "delete", und das kostet (dauert).



  • So, ich hab jetzt das komplette Programm umgeschrieben. Und es ist wundervoll, das Problem ist praktisch nicht mehr vorhanden. Und der Code erschließt sich sogar noch leichter, weil man sieht, dass mit komplexen Zahlen gerechnet wird.

    Übrigens handelt es sich bei der ganzen Sache um ein Projekt hier an der Uni (Bauhaus Uni Weimar) an dem ich beteiligt bin. Und zwar geht es darum, gute analoge Photos mit guten digitalen Photos zu vergleichen, besonders in Bezug auf Auflösung in verschiedenen 'krummen' Abtastrichtungen (soll heißen, bei digitalen Bildern erreicht man nur bei horizontalen und vertikalen Signalen die volle Abtastung, schräge Linien etc. werden auf einer Koordinate viel geringer gesampled).

    Und daher haben wir große Bilddateien, die Fourrier-transformiert werden. Momentan arbeite ich mit ersten Testbildern, am Ende kann's sein, dass wir Bilder mit 50 Millionen Bildpunkten haben. Da sollte das Programm schon einigermaßen performant sein^^

    Die FFT mit den 14M Pixeln macht mein Laptop jetzt in 1,5min, das ist akzeptabel (jetzt wo die Dreiviertelstunde Vektor-wieder-freigeben wegfällt)

    lg
    Bastian


  • Mod

    Das heißt, du machst professionelle Numerik und hast die FFT selber programmiert? 😮



  • SeppJ schrieb:

    Das heißt, du machst professionelle Numerik und hast die FFT selber programmiert? 😮

    Wenn ich es richtig verstanden habe benützt er die FFTW-Lib http://fftw.org/



  • VS braucht ewig um Speicher freizugeben, wenn man den Debug-Modus verwendet.

    Also nur um sicher zu gehen: Auf "Release" kompiliert? Programm mit Strg+F5 gestartet ("ohne Debugging")?



  • Ja, das Programm lief schon im Release Modus.

    Und nein, ich hab die FFT nicht selbst programmiert. Ich benutze das Library FFTW. Chen, ein Masterstudent mit dem ich im Rahmen dieses Projektes Kontakt hatte, der hat DFT, DCT und Wavelettransformation selbst programmiert. Mal schauen, vllt. kommt sowas auch mich auch noch irgenwann zu...


  • Mod

    wronglyNeo schrieb:

    Ja, das Programm lief schon im Release Modus.

    Und nein, ich hab die FFT nicht selbst programmiert. Ich benutze das Library FFTW. Chen, ein Masterstudent mit dem ich im Rahmen dieses Projektes Kontakt hatte, der hat DFT, DCT und Wavelettransformation selbst programmiert. Mal schauen, vllt. kommt sowas auch mich auch noch irgenwann zu...

    Meine Antwort wäre eher gewesen, dass es keinen guten Grund gibt, FFT selber zu programmieren und man dabei wahrscheinlich nur einen minderwertigen Abklatsch von FFTW & Konsorten bekommt.



  • wronglyNeo schrieb:

    Ja, das Programm lief schon im Release Modus.

    Bitte beide Fragen mit "ja" beantworten. Auch im Release Modus gibt es noch einen riesigen Unterschied zwischen "Starten" (F5) und "Starten ohne Debugging" (Strg+F5).



  • Hey, cool, das geht wirklich nochmal deutlich schneller. Die Transformation hat jetzt in ca. 20 Sekunden geklappt.


Anmelden zum Antworten