<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: cluster array performance penalty in LabVIEW</title>
    <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/540251#M254635</link>
    <description>&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;I was following this thread with great interest as I am having similar issues and have to use the 'show buffer allocations' feature every 5 mins to ensure my code runs efficiently.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;My question is:&amp;nbsp; Travis, what was the&amp;nbsp;outcome of this and am I safe using 8.2.1 or should I wait for the next version to be released?&lt;/P&gt;&lt;P&gt;Message Edited by Support on &lt;SPAN class="date_text"&gt;06-22-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;08:42 AM&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 22 Jun 2007 05:37:32 GMT</pubDate>
    <dc:creator>AnthonV</dc:creator>
    <dc:date>2007-06-22T05:37:32Z</dc:date>
    <item>
      <title>cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/481919#M231529</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;I'm creating this thread as an off-shoot from &lt;A href="http://forums.ni.com/ni/board/message?board.id=170&amp;amp;message.id=230714" target="_blank"&gt;here&lt;/A&gt;.&lt;BR /&gt;&lt;BR /&gt;Regarding the discussion which has gone on before regarding a big performance penalty when operating on otherwise in-place arrays within and without a cluster:&lt;BR /&gt;&lt;BR /&gt;Ben correctly stated that arrays within a cluster carry a significant overhead and that handling non-clusteres arrays are faster.&amp;nbsp; This has been verified.&lt;BR /&gt;&lt;BR /&gt;I have trouble understanding WHY this is.&lt;BR /&gt;&lt;BR /&gt;I've just repeated some of the tests mentioned in the original post, but in LabVIEW 6.1.&amp;nbsp; Here I see that a clustered array with the cluster carried forward as in:&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3156/1/cluster1.png" /&gt;This is "Method 1" Unbundle 1&lt;BR /&gt;is just as fast as handling the naked arrays (a shift register for each array separately with unbundle / bundle OUTSIDE the loop) in LabVIEW 6.1 regardless whether the second array contains a load of data or not.&amp;nbsp; In LabVIEW 8.20, it's significantly slower.&amp;nbsp; Something changed between 6.1 and 8.20.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;But when unbundling BOTH arrays as in:&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3156/2/cluster2.png" /&gt;This is "Method 1" Unbundle 2&lt;BR /&gt;, the clustered arrays are still an order of magnitude slower than naked arrays.&lt;BR /&gt;&lt;BR /&gt;Referring to the version working directly with clustered arrays as "Method 1" and non-clustered arrays as "Method 2", here's a table of results I've just measured with the attached program:&lt;BR /&gt;"Small" and "Large" refer to the size of the second array element in the clusters being tested.&amp;nbsp; This array is actually not altered during testing.&amp;nbsp; Times are given in milliseconds.&lt;BR /&gt;&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3157/1/61%20versus%20820.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;I used the following settings for the "unbundle both" version and 1000 repeats for the "unbundle 1" option:&lt;BR /&gt;&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3157/2/61%20prog.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Final results were scaled to 1000 repeats to allow direct comparisons.&lt;BR /&gt;&lt;BR /&gt;The plot thickens.&lt;BR /&gt;&lt;BR /&gt;Shane.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;Message Edited by shoneill on &lt;SPAN class="date_text"&gt;02-22-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;05:11 PM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Feb 2007 16:10:02 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/481919#M231529</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-02-22T16:10:02Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/481951#M231546</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Interesting. I never run across this because my sanity always prevented me from resizing arrays inside clusters. &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;What is surprising is the fact that LabVIEW 8.20 claims that the entire inner loops are "folded" (see image).&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/170/231546/1/Folding.png" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Message Edited by altenbach on &lt;SPAN class="date_text"&gt;02-22-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;08:43 AM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Feb 2007 16:43:04 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/481951#M231546</guid>
      <dc:creator>altenbach</dc:creator>
      <dc:date>2007-02-22T16:43:04Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482236#M231666</link>
      <description>My "Sanity" also prevented me from doing this up until recently.&lt;BR /&gt;&lt;BR /&gt;I learned that variable length elements of a cluster are stored externally (out-sourced if you wish) meaning that a dimension change of one of these elements should require no copying of moving of the other cluster elements. They should be handled the same as a plain old unclustered element.&lt;BR /&gt;&lt;BR /&gt;I then made a comment that this would be a good idea for state machines, whereupon Ben informed me (and showed me) that there is very much a performance penalty.&amp;nbsp; I'm trying to find out why.&lt;BR /&gt;&lt;BR /&gt;I think it would be really advantageous to be able to operate with clusters mixed with fixed- and variable-sized elements without having to worry about dramatic slowdown as is currently the case.&lt;BR /&gt;&lt;BR /&gt;The fact that things have changed since LV 6.1 could be taken as an indicator that&lt;BR /&gt;&lt;OL&gt;&lt;LI&gt;The code to do this was unneccessarily complex and was dumped to reduce errors&lt;/LI&gt;&lt;LI&gt;The code was somehow "forgotten" or left out due to time constraints.&lt;/LI&gt;&lt;/OL&gt;Either way, if we're going to suggest a new feature for handling "sometimes uninitialised shift registers" for state machines, I think making the clustered arrays behave as one would think after reading that the elements are not stored in contiguous memory would be the first step in the right direction.&amp;nbsp; Then a single cluster wire for ALL elements passed through a state machine would clean up a lot of code.&lt;BR /&gt;&lt;BR /&gt;Here's an example of mine for example which, although somewhat pretty, could do with some cleaning up.....&lt;BR /&gt;&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3159/2/State%20machine%20wire%20frenzy%20%28mild%20example%29_small.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Shane.&lt;BR /&gt;&lt;SPAN class="noindex"&gt;&lt;/SPAN&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 23 Feb 2007 07:45:09 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482236#M231666</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-02-23T07:45:09Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482320#M231708</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Hi Shane,&lt;/P&gt;
&lt;P&gt;I spent about 2 hours looking at your example and could not figure it all out.&lt;/P&gt;
&lt;P&gt;The differnce between 6.1 and latter I can not address since I no longer have 6.1 at home.&lt;/P&gt;
&lt;P&gt;To get a proper understanding I will have to compare the performance with the "show buffer allocations" display and work up individual test were we can compare various methods and get some numbers on each variation.&lt;/P&gt;
&lt;P&gt;I will try to return to this Q this week-end if my schedule permits.&lt;/P&gt;
&lt;P&gt;This is what I can say now.&lt;/P&gt;
&lt;P&gt;We are measuring to mant variables in your examples.&lt;/P&gt;
&lt;P&gt;In the attached 7.1 VI I have moved the indicator updates to outside the time structure. I can not rule out LV attempting to update the GUI for test 1 while test 2 is running.&lt;/P&gt;
&lt;P&gt;After doing that I get these two rather dramatic effects&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/170/231708/2/ver%201.JPG" /&gt;&amp;nbsp;&amp;nbsp; &lt;IMG src="http://forums.ni.com/attachments/ni/170/231708/3/ver%202.JPG" /&gt;&lt;/P&gt;
&lt;P&gt;The red circle note the beffer allocations&lt;/P&gt;
&lt;P&gt;To continue I would alos like to to test the cluster performance using in-place operations. the build array and other non-in-place operators are forcing us to measure the amount of time required for LV to allocate larger buffers and this is blurring our ability to measure the cluster work alone. I don't even know if the inplaceness algorithm is even involved.&lt;/P&gt;
&lt;P&gt;Those are my thought for now. I'll post more if I run across any other discoveries.&lt;/P&gt;
&lt;P&gt;Just as perplexed as you are,&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;
&lt;P&gt;Message Edited by Ben on &lt;SPAN class="date_text"&gt;02-23-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;06:16 AM&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Message Edited by Ben on &lt;SPAN class="date_text"&gt;02-23-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;06:16 AM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Feb 2007 12:15:22 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482320#M231708</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-23T12:15:22Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482387#M231737</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;Ben,&lt;BR /&gt;&lt;BR /&gt;I'm at it two DAYS now and I still don't know what's going on.&lt;BR /&gt;&lt;BR /&gt;I've taken your new suggestions to heart and made a new version.&amp;nbsp; I've changed the "Append array" to "Replace array subset" and have moved the indicator update outside the timing structure.&amp;nbsp; I also programatically generate the clusters involved and have put all relevant settings on the front panel.&lt;BR /&gt;&lt;BR /&gt;In this VI I test 6 different methods.&lt;BR /&gt;&lt;BR /&gt;Method 1 is the "Naked array" method shown below.&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/1/Method%201.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Method 2 is a Clustered array with one unbundle output wired and a cluster wire passthrough as shown below.&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/2/Method%202.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Method 3 is a clustered array with both unbundle outputs wired and a cluster wire passthrough as shown below.&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/3/Method%203.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Method 4 is a clustered array with both unbundle outputs wired and NO cluster wire passthrough as shown below.&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/4/Method%204.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Method 5 is a clustered array with one NAMED unbundle output wired and a cluster wire passtorugh (obligatory) as shown below.&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/5/Method%205.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;Method 6 is a clustered array with both NAMED unbundle outputs wired and a cluster passthrough (obligatory) as shown below.&lt;BR /&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/6/Method%206.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Running these with the VI attached (saved under 8.20 for LV 8.20) and the options shown on the diagram, I get following results:&lt;BR /&gt;&lt;BR /&gt;&lt;FONT color="#ff0000"&gt;NOTE:&amp;nbsp; Columns for Method 3 and 4 are switched.&amp;nbsp; The labelling is correct, "Cluster 2 no Thru" is for the clustered array with both unbundles wired and NO wire passthrough!&lt;BR /&gt;&lt;BR /&gt;&lt;/FONT&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/130/3160/7/Cluster%20Pointers%207%206.1%20and%208.20.png" /&gt;&lt;BR /&gt;&lt;BR /&gt;I thnk this is correct, but for the life of me, I can't explain why naked arrays are slower than clustered arrays in LV 6.1.&amp;nbsp; I think I might need to move the "unbundle" and "bundle" for this case outside the timing structure.&amp;nbsp; What do you think?&lt;BR /&gt;&lt;BR /&gt;From my results in LV 8.20, it would seem that it makes no difference whether we are working with clustered arrays or bare arrays, just like the LV documentation says.&amp;nbsp; I never thought of the indicator update issue you mentioned earlier.&amp;nbsp; I was stuck in "data-flow" and I thought it would be finished updating before carrying on.&lt;BR /&gt;&lt;BR /&gt;I appreciate your having a look at this.&lt;BR /&gt;&lt;BR /&gt;VI Included (Version difference to the featured picture is because of the comments on the Block diagram).&lt;BR /&gt;&lt;BR /&gt;Shane.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;Message Edited by shoneill on &lt;SPAN class="date_text"&gt;02-23-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;03:48 PM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Feb 2007 14:47:31 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482387#M231737</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-02-23T14:47:31Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482497#M231788</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Hi Shane,&lt;/P&gt;
&lt;P&gt;For naked cluster try wiring the cluster around to the for loop to the bundle so the same buffer can be re-used.&lt;/P&gt;
&lt;P&gt;I also think that if LV 8 sees a constant wired to the replaced, it may fold the code (see Christian observation) Replace the array elements with the index (just to defeat constant folding).&lt;/P&gt;
&lt;P&gt;I am not going to be able to turn my attention to this riddle for quit a while.&lt;/P&gt;
&lt;P&gt;My sister-in-law has gone on to meet the "Supreme Wire-Worker" yesterday so my attention will be demanded elsewhere.&lt;/P&gt;
&lt;P&gt;Please share what you find,&lt;/P&gt;
&lt;P&gt;Your brother in wire,&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;
&lt;P&gt;PS The answer is probably staring us in the face when we show buffer allocations.&lt;/P&gt;</description>
      <pubDate>Fri, 23 Feb 2007 17:14:54 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482497#M231788</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-23T17:14:54Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482529#M231804</link>
      <description>Sorry to hear about your sister-in-law Ben.&lt;BR /&gt;&lt;BR /&gt;I'll have another look, and I look forward to your input whenever you get around to it.&lt;BR /&gt;&lt;BR /&gt;Shane.&lt;BR /&gt;&lt;BR /&gt;PS I have much too little experience interpreting buffer allocations.......&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 23 Feb 2007 18:16:28 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482529#M231804</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-02-23T18:16:28Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482684#M231877</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Hi Shane,&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;NAMESPACE prefix="o" ns="urn:schemas-microsoft-com:office:office"&gt;&lt;P&gt;&lt;/P&gt;&lt;/NAMESPACE&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Attached is a revised version of your “Cluster pointers 8 6.1.vi” saved as 7.1.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;The changes I made were;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;1) The GUI updates could happen while other tests were running, move it to happen after all testing was done.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;2) Add a default case so case “0” does not get special treatment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;3) Remember result (data) from each method so that the output buffer work is the same for all. Note: I believe LV will skip transferring data to an output tunnel data buffer of indexing is not enabled until the last iteration.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;4) Used index value to as replace element to prevent constant folding clouding the measurements.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;5) Wired the cluster around on method 1 to tell LV it was OK to re-use the input buffer as our output.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;After a few runs I noticed my No-op was taking about as much time as my other best. This implied that the control logic ( selecting which method) and over-head (filling input and output buffers) was dominating the measurements. I tweaked the test parameters to invoke the control logic less often and beat the code we are trying to characterize harder. I saved my defaults (warning: Due to method 4 a test run takes forever).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;This is how I read it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/170/231877/2/Results_Phase1.JPG" /&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;All methods use an input Buffer “A” and an output buffer “B”. This includes the default&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;method. The default method required about 300 ms on my machine to fill the input buffer and transfer it to the output buffer.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;All methods that only required an input and output buffer ran about the same speed. I suspect under my default settings,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;the measurement time are indicative of the time required to fill input buffer and fill output buffer. To get a better measurement of&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;the time require to execute each method I will have to tweak my measurement parameters again. Since method 4 is so inefficient I will stop using it my tests. Before I forget abou this method I will venture some guesses about why this si so bad.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;The SR is realized by working in the input buffer. Each iteration copies the contents of all of the buffers in “A” to “C” and back to “A” again. No wonder this takes so long!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Now for a suprising issue.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Compare your method #2 and #5&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;And then #3 and #6&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;The differnces appear to be tht in the case of unbundled vs unbundled by name. In the case of the unbundled by name we pick-up an extra buffer copy to fill the buffer that is allocated for the SR.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Q : Why isn’t&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;buffer “A” used to support the SR for the “by name” version?&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Summary;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Building a cluster with large arrays (method 4) is costly.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Something weird is happening with unbundled/bundle by name.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Further study will be required to measure the performance of the buffeb A-B versions.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;I’ll post more when I know more.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Times New Roman" color="#000000" size="3"&gt;Ben&lt;/FONT&gt;&lt;/P&gt;
&lt;P class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size="3"&gt;&lt;FONT color="#000000"&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;P&gt;Message Edited by Ben on &lt;SPAN class="date_text"&gt;02-24-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;12:01 PM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 24 Feb 2007 18:01:07 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482684#M231877</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-24T18:01:07Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482687#M231879</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;And if you deletemethod 4 and wire the cluster through you eliminate the need for the output buffer!&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/170/231879/1/No%20more%20Output%20buffer.JPG" /&gt;&lt;/P&gt;
&lt;P&gt;And of course the performance jumps due to less buffer copying.&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;&lt;P&gt;Message Edited by Ben on &lt;SPAN class="date_text"&gt;02-24-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;12:14 PM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 24 Feb 2007 18:14:00 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482687#M231879</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-24T18:14:00Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482769#M231908</link>
      <description>Ben,&lt;BR /&gt;&lt;BR /&gt;Thanks for the analysis.&amp;nbsp; I don't have access to LV 8.2 (or any other version for that matter) until I'm back at work on Monday.&lt;BR /&gt;&lt;BR /&gt;I'll have a look at it then and see what I come up with.&lt;BR /&gt;&lt;BR /&gt;I have to say, the problem (or at least the benchmarking program) has changed dramatically since the beginning of this discussion.&amp;nbsp; As long as we get to a sensible answer at the end of it, it's all sweet.&lt;BR /&gt;&lt;BR /&gt;I hadn't thought of a single operation dominating the results due to the loop-case structure.&amp;nbsp; Good catch.&amp;nbsp; I guess this explains the difference in best-case values between 6.1 and 8.20?&lt;BR /&gt;&lt;BR /&gt;As I said, I'll have another look tomorrow.&lt;BR /&gt;&lt;BR /&gt;Thanks again,&lt;BR /&gt;&lt;BR /&gt;Shane.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Sun, 25 Feb 2007 14:42:34 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482769#M231908</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-02-25T14:42:34Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482772#M231910</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;HI Shane,&lt;/P&gt;
&lt;P&gt;I changed it even more to only allocate buffers before testing and then work from SR's.&lt;/P&gt;
&lt;P&gt;You mention of LV 8.2 remended me to try that as well.&lt;/P&gt;
&lt;P&gt;I think we have a bug&amp;nbsp;&amp;nbsp;&lt;img id="smileysurprised" class="emoticon emoticon-smileysurprised" src="https://ni.lithium.com/i/smilies/16x16_smiley-surprised.gif" alt="Smiley Surprised" title="Smiley Surprised" /&gt; in LV 8.2 (LV 8.2.1 Beta to be technically correct).&lt;/P&gt;
&lt;P&gt;IN LV 7.1 all of the versions opperate in-place and it is a toss-up which verson is better. This is consistent with the KB article you quoted earlier.&lt;/P&gt;
&lt;P&gt;Now in LV 8.2&amp;nbsp;method #2 (Cluster wired thru one bundle terminal wired) wants to create new buffers!&lt;/P&gt;
&lt;P&gt;This screen shot illustrates.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://forums.ni.com/attachments/ni/170/231910/2/Un-wired%20bundle%20is%20bad.JPG" /&gt;&lt;/P&gt;
&lt;P&gt;Method #2 and #3 are identical with the exception of an un-wired input to the bundle function. In previous of versions of LV they are wire equivalent code.&lt;/P&gt;
&lt;P&gt;Can I get some consensus on this being a bug ?&lt;/P&gt;
&lt;P&gt;If this is not a bug, please help me understand the diffrences. &lt;img id="smileytongue" class="emoticon emoticon-smileytongue" src="https://ni.lithium.com/i/smilies/16x16_smiley-tongue.gif" alt="Smiley Tongue" title="Smiley Tongue" /&gt;&lt;/P&gt;
&lt;P&gt;The LV 7.1 and LV 8.2 versions are attached.&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;&lt;P&gt;Message Edited by Ben on &lt;SPAN class="date_text"&gt;02-25-2007&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;10:18 AM&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 25 Feb 2007 16:15:02 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/482772#M231910</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-25T16:15:02Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483009#M231992</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Adding to the above...&lt;/P&gt;
&lt;P&gt;With the exception of the bug, the in-placness algorithm is rather impresive, is it not?&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Mon, 26 Feb 2007 12:43:58 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483009#M231992</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-26T12:43:58Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483025#M232000</link>
      <description>'tis indeed Ben.&lt;BR /&gt;&lt;BR /&gt;I see you've been quite busy with this trinket over the weekend.&amp;nbsp; I needed a bit of time today before I could catch up.&lt;BR /&gt;&lt;BR /&gt;So, am I right in summarizing:&lt;BR /&gt;&lt;BR /&gt;1) Working on clustered arrays must not neccessarily be slower than working on "naked" arrays.&amp;nbsp; The scope of this statement is the testing we've performed, and was limited up to now on uncomplicated clusters.&lt;BR /&gt;2) Working on arrays within a cluster is independent on the size of other data structures in the cluster (again only tested for small, uncomplicated clusters).&lt;BR /&gt;3) Some forms of clutered array manipulation seem to be buggy in the newest LV version. (Namely the "Cluster 2 no Passthrough" you have recently wisely removed from the test program).&lt;BR /&gt;4) The in-place algorithm rocks, when it's used.&lt;BR /&gt;5) I need to learn how to use the buffer allocation imformation in LV 8.20 &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;OK, 4 and 5 are perhaps less critical....&lt;BR /&gt;&lt;BR /&gt;I think I need to whip up an example with significantly more complex clusters, just in case.&lt;BR /&gt;&lt;BR /&gt;Shane.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 26 Feb 2007 13:10:24 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483025#M232000</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-02-26T13:10:24Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483335#M232135</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;
&lt;BLOCKQUOTE&gt;
&lt;HR /&gt;&lt;a href="https://ni.lithium.com/t5/user/viewprofilepage/user-id/9431"&gt;@shoneill&lt;/a&gt; wrote:&lt;BR /&gt;3) Some forms of clutered array manipulation seem to be buggy ...
&lt;HR /&gt;
&lt;/BLOCKQUOTE&gt;I'm sure you meant to say &lt;STRONG&gt;cluttered&lt;/STRONG&gt;. &lt;span class="lia-unicode-emoji" title=":grinning_face_with_smiling_eyes:"&gt;😄&lt;/span&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 26 Feb 2007 18:54:36 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483335#M232135</guid>
      <dc:creator>altenbach</dc:creator>
      <dc:date>2007-02-26T18:54:36Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483727#M232298</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;The bug invloving the Bundle function in LV 8.2 was reported to NI Support unde SR 934633.&lt;/P&gt;
&lt;P&gt;I will update this thread if I learn more.&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Tue, 27 Feb 2007 14:23:53 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/483727#M232298</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-27T14:23:53Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/484580#M232654</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;A CAR has been filed for this issue;&lt;/P&gt;
&lt;P&gt;"&lt;/P&gt;&lt;FONT size="2"&gt;
&lt;P&gt;the title is&lt;/P&gt;
&lt;P&gt;"Cluster Array Performance Penalty," and the ID is 46QG7LJG.&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;"&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Wed, 28 Feb 2007 18:06:32 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/484580#M232654</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-02-28T18:06:32Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/491132#M235341</link>
      <description>&lt;P class="MsoNormal"&gt;Hello,&lt;BR /&gt;
&lt;BR /&gt;
The screenshots on the font panel of your 8.2 attachment - were those taken
from 8.2?&amp;nbsp; &lt;BR /&gt;
&lt;BR /&gt;
To address these issues as I see them:&lt;BR /&gt;
A) No buffer allocation should occur at a tunnel (not auto indexed) going &lt;I&gt;into&lt;/I&gt;
any structure or coming &lt;I&gt;out&lt;/I&gt; of any loop (I could see a case for an
allocation for a tunnel coming out of a case structure since the compiler
doesn't know which case is going to be executed until the program runs).&amp;nbsp;
I think this is what you are pointing out in your picture labeled as "A"
and "B".&amp;nbsp; I don't see these allocations occurring with LabVIEW
8.20&lt;BR /&gt;
&lt;BR /&gt;
B) Why does the "wiring through" of the array in method 3 alter the
inplaceness of the operation?&amp;nbsp; I do think I can answer this question, and
it is not a bug (though it could probably be improved.&amp;nbsp; I believe that the
algorithm to detect if an operation can occur in place looks for a 'well known
pattern'.&amp;nbsp; A well known pattern is an unbundle, operation, rebundle with
the same wire (such as done in "method 3"), I believe that if you
don't connect all the terminals the pattern is not recognized as something that
can occur in place and therefore a buffer allocation is performed (as in method
2).&lt;BR /&gt;
&lt;BR /&gt;
Please let me know if you have any comments. Have a great
afternoon-&lt;/P&gt;

&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 13 Mar 2007 20:43:44 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/491132#M235341</guid>
      <dc:creator>Travis_M.</dc:creator>
      <dc:date>2007-03-13T20:43:44Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/491341#M235408</link>
      <description>Travis,&lt;BR /&gt;&lt;BR /&gt;Thanks for your input on this one.&amp;nbsp; It's nice to get an idea as to where these issues are coming from.&lt;BR /&gt;&lt;BR /&gt;Regarding the optimisations of the inplaceness detection, can this be taken seriously please?&amp;nbsp; Should I post a product suggection form (or whatever it's called).&amp;nbsp; It's pretty hard for a user to know when a cluster's going to be re-used and when not.&amp;nbsp; Since the variable length cluster elements are strored in separate memory areas, can't this simply be done for each variable length element individually.&amp;nbsp; This would pretty much simplify the "pattern" detection, no?&amp;nbsp; My guess would be that the algorithms for detecting inplaceness should ideally be quite similar (if not the same) to those used for the variable-length elements on their own (not clustered).&amp;nbsp; With NI advocating the use of state machines, wiring lots of parameters through multiple states is pretty much becoming a requirement.&amp;nbsp; If we can rest assured that the in-placeness is working properly, then it makes performance predictions a bit easier.&amp;nbsp; This was actually the origin of this thread: a discussion on the requirement for a new feature to make handling state machine data easier.&amp;nbsp; Perconally, I think clusters are the best, but they need some more tweaking I think.&lt;BR /&gt;&lt;BR /&gt;One of the most worrying aspects is the difference in performance between LV versions.&amp;nbsp; I no longer have the values fresh in memory, but I recall LV 6.1 having less problems with this inplaceness than LV 8.20.&lt;BR /&gt;&lt;BR /&gt;My 2c.&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;Shane.</description>
      <pubDate>Wed, 14 Mar 2007 08:38:57 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/491341#M235408</guid>
      <dc:creator>shoneill</dc:creator>
      <dc:date>2007-03-14T08:38:57Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/491428#M235445</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Hi Travis,&lt;/P&gt;
&lt;P&gt;Please look again.&lt;/P&gt;
&lt;P&gt;LV 7.1 handles the bundle efficiently.&lt;/P&gt;
&lt;P&gt;LV 8.2 (8.2.1 Beta) does not.&lt;/P&gt;
&lt;P&gt;Applications that use that construct and run fine in LV 7.1 will suffer badly if used in LV 8.2.&lt;/P&gt;
&lt;P&gt;So please run the benchmarks yourself in both version and please post back.&lt;/P&gt;
&lt;P&gt;Thank you,&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Wed, 14 Mar 2007 12:24:10 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/491428#M235445</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2007-03-14T12:24:10Z</dc:date>
    </item>
    <item>
      <title>Re: cluster array performance penalty</title>
      <link>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/492487#M235830</link>
      <description>Hello folks,&lt;BR /&gt;&lt;BR /&gt;First, I assure you that we do take the issues seriously and we will look into it.&amp;nbsp; I am submitting the following 2 files with the bug report which really highlight the issue at hand.&amp;nbsp; I tried them on both 7.1 and 8.2 (I don't know about 8.2.1, I don't think we made any announcements about anything called 8.2.1), and like we saw before 8.2 is much slower (and, yes, I do agree that this is a problem).&lt;BR /&gt;&lt;BR /&gt;Does anyone have any other comments related to this issue that I can add to the bug report?&lt;BR /&gt;&lt;BR /&gt;Thanks for everyone's contributions, have a good afternoon-&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 15 Mar 2007 17:11:31 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/cluster-array-performance-penalty/m-p/492487#M235830</guid>
      <dc:creator>Travis_M.</dc:creator>
      <dc:date>2007-03-15T17:11:31Z</dc:date>
    </item>
  </channel>
</rss>

