So I'm trying to iterate over the list of partitions of something, say 
`1:n` for some `n` between 13 and 21. The code that I ideally want to run 
looks something like this:

    valid_num = @parallel (+) for p in partitions(1:n)
      int(is_valid(p))
    end
    
    println(valid_num)

This would use the `@parallel for` to map-reduce my problem. For example, 
compare this to the example in the Julia documentation:

    nheads = @parallel (+) for i=1:200000000
      Int(rand(Bool))
    end

However, if I try my adaptation of the loop, I get the following error:

    ERROR: `getindex` has no method matching 
getindex(::SetPartitions{UnitRange{Int64}}, ::Int64)
     in anonymous at no file:1433
     in anonymous at multi.jl:1279
     in run_work_thunk at multi.jl:621
     in run_work_thunk at multi.jl:630
     in anonymous at task.jl:6

which I think is because you cannot call `p[3]` if `p=partitions(1:n)`, 
which explains the getindex error.

I've tried using `pmap` to solve my problem, but because the number of 
partitions can get really big, really quickly (there are more than 2.5 
million partitions of `1:13`, and when I get to `1:21` things will be 
huge), constructing such a large array becomes an issue. I left it running 
over night and it still didn't finish.

Does anyone have any advice for how I can efficiently iterate over 
partitions in parallel? I have access to a ~30 core computer and my task 
seems easily parallelizable, so I would be really grateful if anyone knows 
a good way to do this in Julia. 

Thank you so much!

Reply via email to