Well I was too lazy to do the test you performed, and I didn't find anything on NI's web site. But I'm nearly certain that the LV developers have said that transpose is an inplace function at several of the NIWeek session's I've attended. Maybe that's no longer true or maybe my memory has turned to mush (fairly probable given my advancing years).
It's certainly possible to transpose an array while reusing the same buffer, you just have to make sure to move the elements in the right order, and you need a tiny scratch buffer. But I believe your test results. Maybe someone with inside knowledge will chime in here... Jason Dunham SF Industrial Software, Inc. -----Original Message----- From: Simon Whitaker [mailto:[EMAIL PROTECTED] Sent: Tuesday, January 20, 2004 2:03 AM To: Info-LabVIEW List Subject: Re: Array Wish list On Mon, 19 Jan 2004 22:42:22 -0800 Jason Dunham wrote: > As far as I've ever heard, the transpose arrays don't use any extra > memory. The transpose function is done "in place". I'm sure a few extra > bytes are needed for temporary storage, but supposedly the same array > buffer is reused. I would guess that the graph transpose option is also > not a memory hog. Although a transposed array will consume the same amount of memory as the original array, the transpose function involves creating a new array, populating it using data from the original array, then deleting the original. This can have a significant effect on memory usage with a large array. LabVIEW stores multi-dimensional arrays as a list of data items plus 4 bytes per dimension to store the size of that dimension. You can therefore work out how much memory an array will use: size of array item in bytes x no. items + 4 x no. dimensions The "no. dimensions" element becomes insignificant for large arrays. So, an array of a million 16-bit integers will consume around an extra 2 million bytes (about 1.9MB) during transposition. You can confirm this by profiling some sample VIs, one with transposition and one without. I created two VIs: the first creates a 2D array containing 10,000,000 32-bit integers (10 x 1,000,000) and writes it to an indicator. The second is a copy of the first, with a transpose array node just before the indicator. The first VI consumes almost exactly 40,000K less than the second (84,000.94K vs 124,000.98K). According to the above formula the array will consume c. 10,000,000 x 4, = c. 39,000K. You may not need to worry about this memory hit if you're transposing small arrays, but if you're transposing arrays with many millions of elements your memory usage will increase significantly during transposition - especially if you're using a large data type like an extended precision float. All the best, Simon Simon Whitaker <[EMAIL PROTECTED]> Software developer, Tiab Ltd tel: +44 (0)1295 714046 fax: +44 (0)1295 712334 web: http://www.tiab.co.uk/
