If possible I'd like to memory manage on the Haskell side. All of the calls to BLAS and LAPACK that I'm aware of assume that all arrays are allocated outside of the C or Fortran that implement the matrix algorithms. They never return buffers to newly allocated arrays. So what I'd like to do is something like allocate an array in Haskell, freeze it and extract a pointer, send it to the C code, and then unfreeze it. That way I benefit from Haskell's garbage collector. Explicitly managing memory is a huge bug generator in C and C++. In fact I'd say it's number one on the list.

So can I modify Foreign Array to achieve this, or do I just end up with essentially a Storable Array? Maybe it would be just easier to use 6.5, though heaven knows what sorts of bugs may be lurking there. I downloaded it already per your link.


Bulat Ziganshin wrote:
Hello Matthew,

Monday, May 29, 2006, 8:04:56 PM, you wrote:

What is the difference between the ForeignArray defined in this source
and the StorableArray?  The source code of both modules are very similar.

the devil in details :) - StorableArray in 6.4 is slow because it uses
ForeignPtr. there are two possible solutions - either speed up
ForeignPtr (done in 6.5) or use Ptr instead of ForeignPtr (used in my
module). of course in this case you lose all the benefits of
ForeignPtr's and in particular you will need to make explicit 'free'
if you create such array via 'newArray' or it's derivatives. if you
create such array via 'unsafePtrToForeignArray', then you don't need
to make any additional steps to free it's memory besides of that
required for StorableArray (i.e. in most cases it's the problem of FFI
library you are used)

simply speaking, if you don't create ForeignArray on the Haskell side,
it's as simple in use as StorableArray and as fast as IOUArray


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to