LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

FFT Memory Usage

Hi,

I am using LV2014 (64Bit) and a DAQ-Card to acquire huge amounts of Data and want to put those into an FFT. Unfortunately I run out of memory very quick which is why I want to understand the memory usage of the FFT better. I have been writting a little VI that simulates my situation and gives an estimation of the memory that should be used.

 

Lets assume a double Array with 120 Mio. Datapoints: This should (and does) take up around 1GB of Memory.

To my understanding the memory usage for the FFT should now be the 64Bit for the double Array (FFT-Input) and 128Bit for the complex double array (FFT-Output), so overall around 1GB+2GB=3GB. For some reason the memory used is around 4,5GB. One guess of mine is, that the FFT-VI copies the Input array for some reason, but even then I wonder where the last missing 0,5GB are being used?

 

If I cant change anything about this (still I would like to understand why so much memory is used in the FFT) I have to think of ways how to reduce the memory usage. Of course the easiest is to use a smaller Data-type but unfortunately I need the full range of the double Datatype. So I wonder if I at least can somehow manually deallocate the memory that is being used for the Input-Array of the FFT?

Is it in labview in general possible to deallocate memory programmatically for a specific Array/Cluster/... ? I only know how to deallocate memory for a comnplete VIs but not for a specific array (in my case). As I only need the FFT-result it would be nice to be able to delete the memory used for the time-domain-Data so it takes up less memory (in my example only the 2GB for the complex double output Array instead of those 4,5GB used).

 

All the best,

Daniel

 

 

Download All
Message 1 of 2
(2,937 Views)

When you use the FFT  it calls an external library that passes variables by value, which means that a copy of the input array is made, just as you suspected. 

For freeing the memory after the calculation is done, you could load your subVI doing the calculation dynamically, because then the memory is deallocated once the reference is closed. use the "call by reference" node for this.

0 Kudos
Message 2 of 2
(2,817 Views)