gpt4 book ai didi

scala - 使用 Scalaz 任务时性能下降

转载 作者:行者123 更新时间:2023-12-01 13:50:14 25 4
gpt4 key购买 nike

我希望提高我正在开发的蒙特卡罗模拟的性能。

我首先做了一个实现,它按如下顺序模拟每条路径:

def simulate() = {
for (path <- 0 to 30000) {
(0 to 100).foreach(
x => // do some computation
)
}
}

这基本上是在模拟 30,000 条路径,每条路径都有 100 个离散的随机步骤。

对于我正在做的计算,上述函数在我的机器上运行得非常快(大约 1 秒)。

然后我考虑通过使代码以多线程方式运行来进一步加快速度。

我决定为此使用 Task 并编写了以下代码:

val simulation = (1 |-> 30000 ).map(n => Task {
(1 |-> 100).map(x => // do some computation)
})

然后我按如下方式使用它:

Task.gatherUnordered(simulation).run

当我开始这个时,我知道我的机器正在尽我所能做很多工作在事件监视器中看到,机器风扇也在弹道。在机器上进行大约两分钟的繁重事件后,工作似乎正在完成,但我没有得到任何返回值(我希望收集来自已处理的每个任务的 double )。

我的问题是:

  1. 为什么这比顺序示例花费的时间更长?我更而不是可能做错了什么,但我看不到。
  2. 为什么我没有从显然正在处理的任务中获得任何返回值集合?

最佳答案

我不确定为什么 Task.gatherUnordered 这么慢,但是如果您将 Task.gatherUnordered 更改为 Nondeterminism.gatherUnordered 一切都会没事的:

import scalaz.Nondeterminism

Nondeterminism[Task].gatherUnordered(simulation).run

我将在 Github 上创建一个关于 Task.gatherUnordered 的问题。这绝对应该修复。

关于scala - 使用 Scalaz 任务时性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32392147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com