LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

RT FIFO performance

Hi,

 

I want to know if there is any difference in performance when using a RT-FIFO to transfer a cluster of several values of different data type, or using several RT-FIFOs, each transfering only one type of data, or even one RT-FIFO for every of the elements of the original cluster?

 

Thank you,

 

Christian

0 Kudos
Message 1 of 5
(2,842 Views)

Hi Christian,

 

I think there is no advantage of using several RT-FIFOs in parallel if you want to transmit a fixed number of different values in a cluster. Unfortunately there are no benchmarks I could post handling this special topic. It depends on the controller you use and what is included in your loops.

 

So if you use cRIO and Scan Engine, you can refer to this benchmark:

NI Scan Engine Performance Benchmarks: http://forums.ni.com/t5/forums/replypage/board-id/170/message-id/750098

 

I propose the benchmarking template included in the LabVIEW Example Finder: see attached screenshot.

You can do your own benchmarking tests easily with this project.

 

I hope this helps.

 

Best regards

Suse

______________________________
Certified LabVIEW Developer (CLD)
Message 2 of 5
(2,800 Views)

Thank you for your reply. I already thought that there is no difference doing it one way or the other. Anyway, I will check the benchmark project and do some tests.

 

Best regards,

 

Christian

0 Kudos
Message 3 of 5
(2,789 Views)

I can only comment on benchmarks made on our system (8115 chassis with 85-er FPGA) under LV 2011.

 

There's an overhead involved with using a single FIFO read from FPGA to RT.  This is in the order of 5-6 microseconds.  By benchmarking the transfer rate, even sending a single U8 requires this 5-6 microseconds, but if we gradually increase the size of the data packet to send, we eventually require longer than the 5-6 micrioseconds and the time required then increases mostly linearly with the size of the data being sent.

 

My measurements showed that the 5-6 microsecond overhead corresponded to about 100 U32 elements.  If you're sending MORE than 100 U32 at a time, two channels may help but shifting a FIFO transfer to a level below 100 elements at a time results in no gain in speed.

 

Example: Sending 500 U32 takes 25 microseconds.  Sending the data ofer 2 FIFOs (250 each) reduces the execution time to 2x 250 microseconds (which can be done in parallel).  We've saved a lot of time.  Sending over 4 parallel FIFOs reduces the executiont inme further to about 4x 125 microseconds.

 

Sending 200 U32 takes  10 microseconds.  Sending over two parallel FIFOs reduces the time to 2x5 microseconds.  Sending over 4 parallel FIFOs takes the same time (4x5 microseconds) due to the overhead of the FIFO call, resulting in no net gain.

Message 4 of 5
(2,770 Views)

Intaris,

 

thank you for your detailled description.

This sounds really interesting, I think I also need to take care of this ~100U32 threshold, because my application needs to send a lot of data but on the other hand, performance is critical.

I will try to find out, if the threshold corresponds to the number of elements sent or to the overall sum of the size of the single elements. At the moment, I assume that when sending doubles, the number of elements will be less than 100 before the threshold is reached and a second FIFO can increase performance.

 

Christian

0 Kudos
Message 5 of 5
(2,746 Views)