【问题标题】:Does F# internally make the code run in parallel by default?F# 是否在内部使代码默认并行运行?
【发布时间】:2014-11-07 13:33:46
【问题描述】:

我有一个关于 F# 中的并行处理的简单问题。 下面是我的代码来计算 1^2+2^2+...+100^2 的总和(这是一个非常简单的问题,真的)。据我了解,该程序创建了第二个列表(将第一个列表中的每个项目平方,并将它们放入第二个列表),然后它获取第二个列表中所有项目的总和。程序是否在内部并行地对原始列表中的每个项目进行平方?或者这个过程只是顺序的?如果是后者,如何让代码并行运行?

let mySum = 
[1..100]
|>Seq.map (fun n -> n*n)
|>Seq.sum

【问题讨论】:

    标签: .net parallel-processing f# task-parallel-library


    【解决方案1】:

    默认情况下,没有 F# 不会使代码并行运行。 此外,根据定义,列表是一种可以顺序访问其成员的数据结构。 您可以使用例如 F# Array.Parallel 模块并行运行代码:

    let myParSum = 
        [|1..1000|]
        |> Array.Parallel.map (fun n -> n * n)
        |> Array.sum
    

    或使用标准 .NET Task Parallel Library

    【讨论】:

    • 有点偏离原始问题:您建议如何在这两种方法中计算 Sum 时测量 CPU 时间。在 VB.NET 或 C# 等其他 .NET 语言中,我经常使用“秒表”。 F# 是否有自己的内置工具/功能来做同样的事情?
    • 您可以在 F# 交互窗口中使用#time 指令。在此处查看参考:msdn.microsoft.com/en-us/library/dd233175.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2020-07-15
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多