On 19/05/2011, at 8:27 PM, Christian Höner zu Siederdissen wrote: > I'd like to use repa in a rather perverted mode, I guess: > > for my programs I need to be able to update arrays in place and > repeatedly perform operations on them. > Right now, it basically works like this (in ST): > > - create unboxed space using "primitive" (same as unboxed vectors) > - unsafefreeze unboxed space > - perform calculations on frozen, immutable space > - write result into mutable space (which is shared with the unsafefrozen > space)
If you care deeply about inplace update, then you could use the parallel array filling functions directly. The ones in D.A.Repa.Internals.Eval*.hs. For 2D images, use the fillVectorBlockwiseP [1] or fillCursoredBlock2P. fillVectorBlockwiseP :: Elt a => IOVector a -- ^ vector to write elements into -> (Int -> a) -- ^ fn to evaluate an element at the given index -> Int -- ^ width of image. -> IO () -- | Fill a block in a 2D image, in parallel. -- Coordinates given are of the filled edges of the block. -- We divide the block into columns, and give one column to each thread. fillCursoredBlock2P :: Elt a => IOVector a -- ^ vector to write elements into -> (DIM2 -> cursor) -- ^ make a cursor to a particular element -> (DIM2 -> cursor -> cursor) -- ^ shift the cursor by an offset -> (cursor -> a) -- ^ fn to evaluate an element at the given index. -> Int -- ^ width of whole image -> Int -- ^ x0 lower left corner of block to fill -> Int -- ^ y0 (low x and y value) -> Int -- ^ x1 upper right corner of block to fill -> Int -- ^ y1 (high x and y value, index of last elem to fill) -> IO () Actually, it might be worthwhile exporting these in the API anyway. [1] http://code.ouroborus.net/repa/repa-head/repa/Data/Array/Repa/Internals/EvalBlockwise.hs [2] http://code.ouroborus.net/repa/repa-head/repa/Data/Array/Repa/Internals/EvalCursored.hs _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users