4

我想使用 PLINQ 方法 AsParallel() 重写这个 Parallel.For 循环。据我所见, AsParallel() 需要将整个序列传递给它,例如创建数组 A,然后调用 A.AsParallel().ForAll 或 A.AsParallel().Select 。有没有办法让 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 ->
4

2 回答 2

5

一种方法是使用ParallelEnumerable.Range()

ParallelEnumerable.Range(low, high-low+1).Select(fun i -> let a = A.[i] in …)
于 2013-04-25T23:22:01.260 回答
1

您可以使用ParallelEnumerable.Skip.Take跳过一些元素,然后取一个特定的数字,这实际上允许您查询一个范围。

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

于 2013-04-25T22:32:37.867 回答