You can certainly create an array with these values, but in the provided code it looks like each successive array element has a serial dependency on the previous two elements. How were you expecting it to parallelise?
Repa arrays don't support visible destructive update. For many algorithms you should't need it, and it causes problems for parallelisation.
I'm actively writing more Repa examples now. Can you sent me some links explaining the algorithm that you're using, and some example data + output?
Thanks,
Ben.
On 04/05/2010, at 9:21 AM, Christian Höner zu Siederdissen wrote:
> a = array (1,10) [ (i,f i) | i <-[1..10]] where
> f 1 = 1
> f 2 = 1
> f i = a!(i-1) + a!(i-2)
>> (aah, school ;)
>> Right now, I am abusing vector in ST by doing this:
>> a <- new
> a' <- freeze a
> forM_ [3..10] $ \i -> do
> write a (a'!(i-1) + a!(i-2))
>> Let's say I wanted to do something like this in dph (or repa), does that
> work? We are actually using this for RNA folding algorithms that are at
> least O(n^3) time. For some of the more advanced stuff, it would be
> really nice if we could "just" parallelize.
>> To summarise: I need arrays that allow in-place updates.
>> Otherwise, most libraries that do heavy stuff (O(n^3) or worse) are
> using vector right now. On a single core, it performs really great --
> even compared to C-code that has been optimized a lot.
>> Thanks and "Viele Gruesse",
> Christian