<?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: How to handle massive array operations in LabVIEW</title>
    <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/325789#M167828</link>
    <description>When you build an application, the FPs for some of the VIs get removed (you can see this in the VI Settings tab of the builder). I'm guessing that if you're using a property node the panel doesn't get removed because it knows it needs the FP. And yes, as far as I know, using a property node will always go through the UI thread and may even cause a copy for the indicator, even if you don't open it.</description>
    <pubDate>Thu, 16 Feb 2006 10:10:22 GMT</pubDate>
    <dc:creator>tst</dc:creator>
    <dc:date>2006-02-16T10:10:22Z</dc:date>
    <item>
      <title>How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317507#M164056</link>
      <description>&lt;DIV&gt;Hi!,&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;We are working with large arrays of the order of 5000 x 100000 (rows x col).&lt;BR /&gt;We&amp;nbsp;wish to&amp;nbsp;perform typical array operations like replace subset, indexing, rotating and addition.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Our questions:&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;1) How do we work with this array within the same VI without creating indicators or controls. Wiring, we understand, is an option but then the wires will clutter our screen.&lt;/DIV&gt;
&lt;DIV&gt;2) How do we pass/retrieve this array data to/from sub-VIs without creating indicators or controls.&lt;/DIV&gt;
&lt;DIV&gt;3) What the fastest recommended methods of handling such large arrays.&lt;/DIV&gt;
&lt;DIV&gt;4) Our array will be either Boolean or U8. Will both data types give similar speed results?&lt;/DIV&gt;
&lt;DIV&gt;5) When using the replace subset function, can the subset be same dimension as original array?&lt;/DIV&gt;
&lt;DIV&gt;6) Can we rotate a particular row within a 2D array? As of now, we extract the row as 1D, rotate and then replace the original row with rotated row.&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;Any ideas/suggestions (specific to array handling) to help speed our VI will be highly appreciated.&lt;/DIV&gt;
&lt;DIV&gt;We are using LV 7.1 on Win2000&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Thanks,&lt;BR /&gt;Gurdas&lt;BR /&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 30 Jan 2006 17:05:18 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317507#M164056</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-01-30T17:05:18Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317548#M164073</link>
      <description>&lt;DIV&gt;If the control and the indicator is in a subVI, the performance of LabView will not be degrated by the speed of screen refresh.&lt;/DIV&gt;
&lt;DIV&gt;Boolean operation is faster, but keep in mind that one bit take 8 bits in memory.&lt;/DIV&gt;
&lt;DIV&gt;When you use the replace array subset, the array as the same size. Try with a smaller VI to test the functionality of your app.&lt;/DIV&gt;
&lt;DIV&gt;For your question 6, you got it....&lt;BR /&gt;&lt;/DIV&gt;
&lt;DIV&gt;Benoit&lt;/DIV&gt;</description>
      <pubDate>Mon, 30 Jan 2006 18:04:58 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317548#M164073</guid>
      <dc:creator>Benoit</dc:creator>
      <dc:date>2006-01-30T18:04:58Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317557#M164079</link>
      <description>&lt;DIV&gt;Thanks Benoit.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;I am not clear about "When you use the replace array subset, the array as the same size."&lt;/DIV&gt;
&lt;DIV&gt;Do you mean to say that if my original array is 2D, I can have a subset array which is also 2D and replace it in a single shot? I have my doubts on this? How will I tell the replace function where my subset whould go?&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;For example, say my original array is 25 x 40 (rows x cols). I have another array of size 6 x 8 which I would like to replace into my original such that it overwrites rows 12 to 17 (6 rows) and columns 21 to 28 (8 cols).&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Rgds,&lt;BR /&gt;Gurdas&lt;/DIV&gt;</description>
      <pubDate>Mon, 30 Jan 2006 18:13:45 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317557#M164079</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-01-30T18:13:45Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317565#M164084</link>
      <description>&lt;DIV&gt;If you want to replace with a 2D array, you will need to make it with a for loop.&lt;/DIV&gt;
&lt;DIV&gt;Benoit&lt;/DIV&gt;</description>
      <pubDate>Mon, 30 Jan 2006 18:23:49 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317565#M164084</guid>
      <dc:creator>Benoit</dc:creator>
      <dc:date>2006-01-30T18:23:49Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317599#M164105</link>
      <description>Gurdas,&lt;BR /&gt;
&lt;BR /&gt;
Check out&lt;BR /&gt;
&lt;A href="http://zone.ni.com/devzone%5Cconceptd.nsf/webmain/6A56C174EABA7BBD86256E58005D9712?opendocument" target="_blank"&gt;Managing Large Data Sets in LabVIEW&lt;/A&gt; and the links it contains.&lt;BR /&gt;
&lt;BR /&gt;
In particular, it will help with your item #2, and&lt;BR /&gt;
give you a better overview of the subject.&lt;BR /&gt;
&lt;BR /&gt;
Joe Z.</description>
      <pubDate>Mon, 30 Jan 2006 19:20:02 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317599#M164105</guid>
      <dc:creator>Underflow</dc:creator>
      <dc:date>2006-01-30T19:20:02Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317600#M164106</link>
      <description>Actually, that's not true. If you want to replace a 2D array subset of a 2D array the Replace Array Subset will allow you to wire in a 2D array. You just need to specify the row and col indices where you want the replacement to occur. See attached VI as an example.&lt;BR /&gt;&lt;BR /&gt;As for your other questions:&lt;BR /&gt;&lt;BR /&gt;(1) Not sure what you mean by this. If you need to work with that data in the same VI you use wires - that's the most efficient way of doing it. Are you thinking about local variables or something?&lt;BR /&gt;(2) Controls/indicators are the best way to pass data in/out of VIs. LabVIEW only makes a copy of the data if the subVI front panel is open in order to display it on the front panel.&lt;BR /&gt;(3) Let LabVIEW handle the memory management as this is done automatically.&lt;BR /&gt;(4) LabVIEW stores Booleans as 8-bit data. You should choose the one that makes more sense for your application.&lt;BR /&gt;(5) Yes, see previous response.&lt;BR /&gt;(6) You will need to be a little more specifc about this one, though I suspect the Transpose 2D Array function coupled with the Replace Array Subset is what you're looking for.&lt;BR /&gt;&lt;BR /&gt;-Saverio&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 30 Jan 2006 19:20:08 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317600#M164106</guid>
      <dc:creator>smercurio_fc</dc:creator>
      <dc:date>2006-01-30T19:20:08Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317606#M164109</link>
      <description>&lt;SPAN class="noindex"&gt;&lt;I&gt;How will I tell the replace function where my subset whould go?&lt;/I&gt;&lt;BR /&gt;&lt;BR /&gt;When you plug your array into the input of the Replace Subset, it should automatically resize to give two index inputs.&amp;nbsp; One is for the start row, the other is the start column.&amp;nbsp; Wire both of these to control where the 2D subarray is inserted.&lt;BR /&gt;&lt;BR /&gt;You can also resize the Replace Subset to perform two separate actions on two separate parts of the array.&amp;nbsp; (see attached)&amp;nbsp; I cannot say offhand if this will help with your memory management.&amp;nbsp; You will have to do a bit of profiling to find the most efficient way to handle this.&lt;BR /&gt;&lt;BR /&gt;I work with aproximately a tenth the data you are looking at and constantly run into out of memory issues.&amp;nbsp; The link Underflow mentioned is extremely valuable.&lt;BR /&gt;&lt;/SPAN&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 30 Jan 2006 19:26:27 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317606#M164109</guid>
      <dc:creator>jasonhill</dc:creator>
      <dc:date>2006-01-30T19:26:27Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317786#M164206</link>
      <description>&lt;DIV&gt;Saverio, Joe, Jason and Benoit - Thanks!&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Reply to Saverio's inputs:&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;&lt;EM&gt;(1) Not sure what you mean by this. If you need to work with that data in the same VI you use wires - that's the most efficient way of doing it. Are you thinking about local variables or something?&lt;BR /&gt;&lt;/EM&gt;No, we avoid locals like birdflu! What I meant was how do I carry data from one part of my block diagram (BD) to another without using wires (because wires clutter the block diagram)? Is there no variable/container which will hold data without it being a control/indicator? Some of my front panels will be displayed. In such VIs, the moment I use a control/indicator in the BD to "hold" my data, my speeds drop.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;(2) OK&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;(3) OK&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;(4) LabVIEW stores Booleans as 8-bit data. You should choose the one that makes more sense for your application.&lt;BR /&gt;&lt;/EM&gt;U16 makes most sense. &lt;BR /&gt;U8 also does the task, only catch is at the end I need to convert the array into U16 for the last operation to happen (all elements in a col are added; thus final array is 1D row&amp;nbsp;array).&lt;BR /&gt;I would use Boolean ONLY if it gives significant speed gains over U8 (I will need to convert Boolean to U16 at the end).&lt;BR /&gt;Any inputs/ideas?&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;(5) OK&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;EM&gt;(6) You will need to be a little more specifc about this one, though I suspect the Transpose 2D Array function coupled with the Replace Array Subset is what you're looking for.&lt;BR /&gt;&lt;/EM&gt;Lets say the first row of my 2D array has 5 elements, which are 3 6 12 8 1. I want this to become 12 8 1 3 6. In effect I left rotated my first row my two positions.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Rgds,&lt;/DIV&gt;
&lt;DIV&gt;Gurdas&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 05:25:20 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/317786#M164206</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-01-31T05:25:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318008#M164307</link>
      <description>Gurdas,&lt;BR /&gt;&lt;BR /&gt;With respect to your responses:&lt;BR /&gt;&lt;BR /&gt;(1) If you don't want to use wires then local variables, global variables, or shared variables (LabVIEW &lt;span class="lia-unicode-emoji" title=":smiling_face_with_sunglasses:"&gt;😎&lt;/span&gt; are your only other options. Any of these (especially the global variables) are going to give you a big impact on speed. Stick with wires to pass data around on the block diagram.&lt;BR /&gt;&lt;BR /&gt;(4) Stick with U16 then. At the point where you intend to do the conversion to U16 LabVIEW is going to need to allocate a new memory buffer to do the conversion, and if your array is large this is going to translate into a big performance hit. With very large arrays you want to minimize or eliminate data type conversions.&lt;BR /&gt;&lt;BR /&gt;(6) What you would need is to peel off those elements using an Index Array function and then use the Rotate 1D array function. See attached updated example.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 15:08:54 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318008#M164307</guid>
      <dc:creator>smercurio_fc</dc:creator>
      <dc:date>2006-01-31T15:08:54Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318022#M164314</link>
      <description>To rotate a single row without excessive data duplication, you can delete the row in question, rotate it, and reinsert it (see attached).&amp;nbsp; I am not certain if Labview attempts to resize the array with each delete and insertion.&amp;nbsp; Array resizing may have a performance hit, but I do not think it would be as large as carrying around an extra copy of the entire array.&amp;nbsp; Again, I reccomend profiling a couple different methods and using the one that works best.&lt;BR /&gt;&lt;BR /&gt;With regard to "wire clutter"... IMHO astetics and other programming practices will ocassionally have to take a back seat to performance.&amp;nbsp; Good documentation can mitigate a lot of the confusion associated with railyard-like block diagrams.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 15:33:21 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318022#M164314</guid>
      <dc:creator>jasonhill</dc:creator>
      <dc:date>2006-01-31T15:33:21Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318072#M164342</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Jason,&lt;/P&gt;
&lt;P&gt;Why delete, rotate and&amp;nbsp;then reinsert?&lt;/P&gt;
&lt;P&gt;Why not just extract the row, rotate and replace? I thought this might be faster.&lt;/P&gt;
&lt;P&gt;- Gurdas&lt;/P&gt;</description>
      <pubDate>Tue, 31 Jan 2006 16:35:38 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318072#M164342</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-01-31T16:35:38Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318092#M164351</link>
      <description>&lt;DIV&gt;Saverio,&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;That clarifies.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;All,&lt;/DIV&gt;
&lt;DIV&gt;We are currently taking upward of 60 secs to process our array. The target is less than 1 sec!&lt;/DIV&gt;
&lt;DIV&gt;We have hit upon a few ideas which involve 'tricks' specific to our application. Shall post results/insights as they become available.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;I still need inputs on what is faster: replace row in an array OR insert row into array? Further, if the insertion is always at end of array, is it not same as building an array (which I know to be bad at speed because of periodic reallocation)?&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Thanks,&lt;/DIV&gt;
&lt;DIV&gt;Gurdas&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 16:48:48 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318092#M164351</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-01-31T16:48:48Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318100#M164355</link>
      <description>&lt;P&gt;Hi Gurdas,&lt;/P&gt;
&lt;P&gt;In general, replacing array elements will always be more memory efficient than inserting array elements.&amp;nbsp; This is because replacing array elements does not involve a memory reallocation, while increasing the size of an array does.&lt;/P&gt;
&lt;P&gt;Of course, this rule goes out the window if your array elements are not flat datatypes.&amp;nbsp; All the memory reallocation advice everybody is giving assumes your arrays are numerics or booleans.&lt;/P&gt;
&lt;P&gt;-D&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 16:55:42 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318100#M164355</guid>
      <dc:creator>Darren</dc:creator>
      <dc:date>2006-01-31T16:55:42Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318119#M164361</link>
      <description>60 seconds down to 1 second. Well, that can be a bit of a challenge. &lt;BR /&gt;&lt;BR /&gt;If you post what you're doing with the array perhaps someone can offer suggestions to improve the speed...&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 17:05:16 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318119#M164361</guid>
      <dc:creator>smercurio_fc</dc:creator>
      <dc:date>2006-01-31T17:05:16Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318141#M164370</link>
      <description>&lt;P&gt;"If you post what you're doing with the array perhaps someone can offer suggestions to improve the speed..."&lt;/P&gt;
&lt;P&gt;Yes, please do!&lt;/P&gt;
&lt;P&gt;Curious,&lt;/P&gt;
&lt;P&gt;Ben&lt;/P&gt;</description>
      <pubDate>Tue, 31 Jan 2006 17:25:59 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318141#M164370</guid>
      <dc:creator>Ben</dc:creator>
      <dc:date>2006-01-31T17:25:59Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318200#M164397</link>
      <description>&lt;DIV&gt;Sorry folks, cannot post the code (or even sections).&lt;/DIV&gt;
&lt;DIV&gt;If the questions start becoming tricky and it will be help to have code accompany them, I shall build dummy VIs for the forums. But, lets hope I don't need to do that because I am really short of time right now!&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;- Gurdas&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 18:54:20 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318200#M164397</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-01-31T18:54:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318257#M164425</link>
      <description>&lt;BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;
&lt;/P&gt;&lt;HR /&gt;&lt;a href="https://ni.lithium.com/t5/user/viewprofilepage/user-id/18022"&gt;@Gurdas&lt;/a&gt; wrote:&lt;P&gt;&lt;/P&gt;
&lt;P&gt;2) How do we pass/retrieve this array data to/from sub-VIs without creating indicators or controls.
&lt;/P&gt;&lt;HR /&gt;
&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I haven't read the posts in this thread, but you might want to have a look at JPD's attachment &lt;A href="http://forums.ni.com/ni/board/message?board.id=170&amp;amp;message.id=85528#M85528" target="_blank"&gt;here&lt;/A&gt; for an example of a global array which keeps the memory consumption down.&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 31 Jan 2006 20:30:11 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/318257#M164425</guid>
      <dc:creator>tst</dc:creator>
      <dc:date>2006-01-31T20:30:11Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/324532#M167318</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;P&gt;All,&lt;/P&gt;
&lt;P&gt;We managed to beat the problem and our own expectations by a huge margin. And it feels great&amp;nbsp;&amp;nbsp; &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;While there was some scope for improvement in our&amp;nbsp;use of LV syntax, we soon realised that it might return a maximum&amp;nbsp;benefit of only&amp;nbsp;a few seconds&amp;nbsp;(say 5 secs; while the target was from 60s to 1s!). So, our problem forced us to think out-of-the-box and we relooked at the application from scratch. Some 3 days of brainstorming later, we now have the array worked, reshaped and cooked in less than 5ms!! This is such an important milestone that we stand in awe at the sheer power of an idea. More so because the array operation (which was taking 60s) has to be done atleast a few thousand times to get a final optimised array. With speeds of 5ms, we can now confidently run the optimiser for long enough to guarantee a global optima.&lt;/P&gt;
&lt;P&gt;We learnt a few lessons, which I would like to share with the LV community:&lt;/P&gt;
&lt;P&gt;1) For most of the time (shall I say 95%), if you strictly adhere to the basic thumbrules of good programming, you should be fine. The esoteric features of any language should be left for esoteric functions. Our LV team might get just 4/10 on LV skills but we still manage to write some very good and robust software. I feel greedy to write down my list of top10 rules to follow but I'll leave that for another day and thread.&lt;/P&gt;
&lt;P&gt;2) More than programming skills, focus on domain knowledge and a true understanding of the problem. The advantages&amp;nbsp;from good coding are just a fraction of the advantages that come from good algorithms.&lt;/P&gt;
&lt;P&gt;3) Use "engineering" tools (like VI profiler) to trap the larger pitfalls in your code. You can achieve 80% improvement in application speed and robustness by just focussing on the largest 20% pitfalls.&lt;/P&gt;
&lt;P&gt;4) When the going gets tough, send a post to discussion forums, sip a cup of piping hot coffee and sleep over the problem for a night &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;To know a little more about the application (SilentRoll), you could visit &lt;A href="http://www.qagetech.com/SilentRoll.html" target="_blank"&gt;http://www.qagetech.com/SilentRoll.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Rgds,&lt;/P&gt;
&lt;P&gt;Gurdas&lt;/P&gt;</description>
      <pubDate>Tue, 14 Feb 2006 12:39:04 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/324532#M167318</guid>
      <dc:creator>Gurdas</dc:creator>
      <dc:date>2006-02-14T12:39:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/324572#M167329</link>
      <description>&lt;P&gt;What did you actually do to speed up the operation?&lt;/P&gt;
&lt;P&gt;Was it anything clever that we would like to know about or was it just cleaning the program to improve the algorithm and avoid things like multiple copies?&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 14 Feb 2006 13:58:22 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/324572#M167329</guid>
      <dc:creator>tst</dc:creator>
      <dc:date>2006-02-14T13:58:22Z</dc:date>
    </item>
    <item>
      <title>Re: How to handle massive array operations</title>
      <link>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/324578#M167333</link>
      <description>I've been reading this thread and would love to know the tricks you did to pull it off. i think it would be beneficial to the LV community to know the way you really solved the problem.
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 14 Feb 2006 14:11:37 GMT</pubDate>
      <guid>https://ni.lithium.com/t5/LabVIEW/How-to-handle-massive-array-operations/m-p/324578#M167333</guid>
      <dc:creator>Joe_H</dc:creator>
      <dc:date>2006-02-14T14:11:37Z</dc:date>
    </item>
  </channel>
</rss>

