如何让R使用计算机的所有核心?

14

我看到过 R 只使用单个 CPU 的信息。如何让 R 使用所有可用的核心来运行统计算法?

2个回答

23

首先,您可以查看CRAN上的高性能计算任务视图。此视图列出了可用于支持单台计算机上并行计算的软件包的详细信息。

R版本2.14.0及以上版本提供了内置的并行计算支持,使用parallel软件包,其中包含现有snowmulticore软件包的略微修改版本。 parallel软件包有一个vignette文档,您应该阅读。您可以使用以下命令查看:

vignette(package="parallel", topic = "parallel")

除了使用多线程的BLAS进行线性代数计算外,还有其他利用多个内核的方法。

无论这些“统计计算”是否能加速取决于它们是什么。创建多个线程或工作进程会带来额外的开销,包括设置它们、管理它们和收集结果。有些操作因使用多个内核/线程而受益(有些大,有些小),而其他操作由于额外的开销而变慢。

简而言之,不要期望通过使用n个内核而不是1个内核,将计算时间降低n倍。


请注意,要查看vignette,您可能需要执行vignette(package =“parallel”,topic =“parallel”)。对我来说,如果我不添加topic =,它只会列出vignette。 - Xu Wang
放心吧。从你提供的那么多详细答案来看,你绝对不是懒惰的人! - Xu Wang
@Abe 你为什么这么说?我展示的 vignnette 代码行在我这里是可以工作的,至少在 R v 3.0.3 下是可以的。 - Gavin Simpson
因为当我输入这行代码时,会出现“警告信息:未找到vignette parallel”的提示。 - Abe
@Abe 嗯,这对我来说是有效的。你是否使用推荐的软件包编译了 R?你可能需要检查一下你的安装情况,因为 parallel 是随 R 一起提供的推荐软件包,所以我们应该期望它是可用的,而且 vignette 确实 是该软件包的一部分。 - Gavin Simpson
显示剩余2条评论

9
如果你需要对相同的事情(或使用相同代码的不同参数)进行少量迭代,最简单的方法是运行多个R副本--操作系统会在不同内核上分配工作。
相反,如果需要进行更多迭代,需要学习如何使用真正的并行扩展。
为了回答这个问题,“少量”意味着小于等于内核数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接