【问题标题】:Using PLINQ AsParallel() on a range在范围上使用 PLINQ AsParallel()
【发布时间】:2013-04-25 22:30:58
【问题描述】:

我想使用 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 ->

【问题讨论】:

    标签: f# task-parallel-library plinq


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多