The simplest change you can make to your code to decouple or "de-serialize" the two bits of code is use shift registers to pipeline your application into two stages as shown in the attached image. You can easliy pipeline the DMA FIFO acquisition portion of the application as stage 1, and place the cross-correlation portion into stage two. Pipelining essentially places the two (or more) previously serial operations in parallel so they no longer run as two sequential operations within a single loop cycle.
There are many articles on ni.com and other sources on techniques for pipelining. I like this introduction.
If you are feeling zealous, the best LabVIEW architecture for this type of streaming & signal processing application is the Producer/Consumer template. This can be found by creating new VI via the File>>New... menu (not File>> New VI). In the resulting dialog box, expand VI>>From Template>>Frameworks>>Design Patterns>>Producer/Consumer Design Pattern(Data).
The Producer/Consumer is a very flexible design pattern used in many LabVIEW applications, in various forms. The producer/consumer adds flexibility to your application because it separates your acquistion and analysis tasks. This frees you up in some ways, for example, you could acquire data at a different chunk size and loop rate than your analysis loop. The producer/consumer handles the buffering between the tasks, so the consumer analysis loop will automatically process a given chunk size of data when the producer has provided enough. For more information on the producer/consumer design pattern and other common LabVIEW design patterns, search the developer zone on ni.com.
That is a great suggestion, please let us know if you have any questions implementing a pipeline.
Have a good weekend all 🙂