【问题标题】:How to cache parallelly computed results with memoise::memoise?如何使用 memoise::memoise 缓存并行计算的结果?
【发布时间】:2018-06-06 23:38:29
【问题描述】:

我正在使用 memoise 包的 memoise 函数预先计算结果并缓存它们。不幸的是,如果我尝试通过与parallel::mclapply 并行运行计算来加快计算速度,则不会发生记忆。

> f <- memoise::memoise(function (a, b) a)
> memoise::has_cache(f)("foo", "bar")
[1] FALSE

> parallel::mclapply(c("bar", "baz"), f, a = "foo")
[[1]]
[1] "foo"

[[2]]
[1] "foo"

> memoise::has_cache(f)("foo", "bar")
[1] FALSE

> sapply(c("bar", "baz"), f, a = "foo")
  bar   baz 
"foo" "foo" 
> memoise::has_cache(f)("foo", "bar")
[1] TRUE

我想在每个 fork 中都复制了 memoised 函数然后丢弃......有没有使用其他函数或包的简单替代方法?

【问题讨论】:

  • R.cache 包(我是作者)memoizes 到文件,这意味着缓存跨 R 会话和并行 R 进程工作。显然,与缓存到内存相比,缓存到文件会增加一些开销。
  • 确实,R.cache::addMemoization() 完全符合我的需求,非常感谢。您能否将您的评论更改为答案,以便我将其标记为已接受?

标签: r memoise


【解决方案1】:

把我的评论变成答案:

R.cache 包(我是作者)memoizes 到文件,这意味着缓存在 R 会话和并行 R 进程中工作。显然,与缓存到内存相比,缓存到文件会增加一些开销。

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2019-04-21
    • 1970-01-01
    • 2012-02-20
    • 2017-12-14
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多