Several attendees requested LabVIEW 8.5 data for the benchmarks I showed at my NI Week presentation -
TS1284 - Reference Objects in LabVIEW. In addition, the severe performance degradation seen in Datasockets going from LabVIEW 7.1 to 8.2 was an artifact of my testing environment. I have fixed it and now actually see a performance improvement. I have updated the presentation and zipped it and the test code in the attachment below. I also tested in LabVIEW 8.5 with the following results, which can be compared to the presentation (same experimental setup).
10,000 DBL read/write cycles
Mode - Time (ms)
Global - 7.6
Single Process Shared Variable - 12.8
Network Shared Variable - 1980
Datasocket - 10700
Configuration VI - 745
Control Reference - 2440
GOOP 1.0 - 2000
LV2 Global - Semaphore - 294
LV2 Global - Action Engine - 13.7
Single Element Queue - 41.4
Read of 1MByte Buffer
Mode - Time (ms)
Global - 0.000300
Single Process Shared Variable - 0.000309
Network Shared Variable - 0.125
Datasocket - 7.05
Configuration VI - 168.0
Control Reference - 0.000726
GOOP 1.0 - 0.00538
LV2 Global - Semaphore - 0.00295
LV2 Global - Action Engine - 0.00161
Single Element Queue - 0.000314
Performance is generally worse if launched from the project rather than opening the test VI directly. Note that the network shared variable must be used from a project.
As expected, the network shared variable is much better. The global is 50% faster for scalars than it was in LabVIEW 8.2. In general, performance improves almost across the board to as good or better than the LabVIEW 7.1 values for scalar values. Array performance is pretty similar, with some better and some worse. CIN nodes (GOOP and semaphore) seem to have degraded, now being about half the speed they were in LabVIEW 7.1.
I tested changing the action engine implementation to use an explicit feedback node instead of a shift register in a WHILE loop. Scalar performance improved a bit - about 6%. Large array performance improved 70%, making them somewhat competitive with single-element queues and globals.
I plan to start looking at LVOOP implementations and how to optimize them next.