在范围上使用PLINQ AsParallel()

时间:2013-04-25 22:30:58

标签: f# task-parallel-library plinq

我想使用PLINQ方法AsParallel()重写这个Parallel.For循环。据我所知,AsParallel()需要将整个序列传递给它,例如创建数组A,然后调用A.AsParallel()。ForAll或A.AsParallel()。选择。有没有办法让AsParallel()在一个范围内工作 - 在这种情况下,从低到高?

for k = 2 to m+n do
    let low = max 1 (k-m)
    let high = min (k-1) n
    Parallel.For(low, high + 1, (fun j ->

2 个答案:

答案 0 :(得分:5)

执行此操作的一种方法是使用ParallelEnumerable.Range()

ParallelEnumerable.Range(low, high-low+1).Select(fun i -> let a = A.[i] in …)

答案 1 :(得分:1)

您可以使用ParallelEnumerable.Skip.Take跳过多个元素,然后取一定数量,这实际上可以让您查询范围。

这将是A.AsParallel().Skip(low).Take(high-low+1).Select(...