如何使用 memoise::memoise 缓存并行计算的结果?
How to cache parallelly computed results with memoise::memoise?
我正在预先计算结果并使用 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 中被丢弃...是否有使用其他函数或包的简单替代方法?
将我的评论变成答案:
R.cache 包(我是作者)记忆到文件,这意味着缓存跨 R 会话和并行 R 进程工作。显然,与缓存到内存相比,缓存到文件会增加一些开销。
我正在预先计算结果并使用 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 中被丢弃...是否有使用其他函数或包的简单替代方法?
将我的评论变成答案:
R.cache 包(我是作者)记忆到文件,这意味着缓存跨 R 会话和并行 R 进程工作。显然,与缓存到内存相比,缓存到文件会增加一些开销。