I have developed a IMAQ pattern matching program that analysis images from a .avi file. In it use there are up (but not limited) to 22 matching template pattern used, each with a (their own) set area of the image to search.
At the moment the pattern matching process is sequential that is read the image from the avi file
With the present computer system it takes about 46 ms to read the image and 10 ms per templates match with a quad-core computer working about 30%.
Now the question is how to reduce the processing time. I will pursue reading the image from the avi file while the pattern matching process is going on (I assume that these two processes will be on separate threads within the same For loop 😉 ). Another solution, is to replace the spinning storage disk with a SSD. I may try that one first since it is easier.
But the more interesting/difficult questions are:
LabVIEW 2017 (64 bit)
Thank in advance
Paul A. Rochefort
What you may want to do is to "spawn an asynchronous VI" (what I call "spawn a Clone"). For example, I record AVIs of animal behaviors lasting a few seconds, and "capture" about 10-30 behaviors over a 2-hour recording session. Tedious to do for one animal at a time, so I have 24 cameras, 24 Event Detectors, and collect them all in parallel (on a 7-8 year old PC, yet). The function you want to learn about is called "Start Asynchronous Call", it is on the Application Palette, and if you search LabVIEW Examples with "Asynchronous", you should find some example code.
If the processing happens in a for loop, you can simply configure the for loop for parallel processing. That would give you the answer straight away... Alternatively, you could make a test VI using a parallel for loop simply to check if parallelization would help.