MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to return a mixture of vectors and matrices from compiled functions

Don't know the answer, but noticed the following:

(1) Your sample above has a 0 instead of 0. in the second row, last
entry of the matrix. So not all the entries are Real.

(2) I corrected (1) and you still get the same error. I suspect your
hunch about packed arrays is correct. Developer`ToPackedArray never
returns an error. The only way I know to see if it really did pack the
array is to do Developer`PackedArrayQ[Developer`ToPackedArray[...]].
When I try that on {vector,vector,matrix}, I get False.

As it does not look like your return structure can be packed, can you
break up your function into 3 functions? If that is sub-optimal, you
could have a "wrapper" function which takes your input, uses Compiled
functions internally where possible and stores required intermediate
results, and then returns a list where the elements have been packed.
(i.e. {packedvector, packedvector, packedmatrix}.) So some of your
function will end up running in uncompiled mode, but hopefully the
numerically intensive bits can still run in compiled mode.

I also noticed there is an undocumented option to Compile (at least in
version 6): CompileOptimizations -> Automatic. Perhaps there is a way
you can ask for unpacked return values. You can then pack the
individual bits yourself if required (or live without the packing).
Perhaps someone at Wolfram can tell us about the option.



  • Prev by Date: Re: Unbearably slow plotting (v6)
  • Next by Date: Re: Unbearably slow plotting (v6)David Bailey,
  • Previous by thread: Re: Unbearably slow plotting (v6)
  • Next by thread: Re: Unbearably slow plotting (v6)David Bailey,