2

我正在 Windows 机器上运行带有雪后端的 foreach 循环。我有 8 个内核可以使用。rscript 是通过嵌入在 python 脚本中的系统调用执行的,因此也会有一个活动的 python 实例。

没有 #workers=#cores 而不是 #workers<#cores 有什么好处,所以系统进程或 python 实例总是有一个开放的空间吗?

它在 #workers=#cores 的情况下成功运行,但我是否会因为 r worker 实例使内核(最大可能线程)饱和而降低性能?

4

1 回答 1

1

这将取决于

  1. 您的处理器(特别是超线程)
  2. 有多少信息必须复制到/从不同的图像
  3. 如果您在多个盒子 (LAN) 上实现此功能

对于 1) 超线程有帮助。我知道我的机器可以做到这一点,所以我的核心工人数量通常是核心工人的两倍,与我将工人数量与核心数量相匹配时,我的代码在大约 85% 的时间内完成。它不会改善更多。

2)如果你没有分叉,例如使用套接字,你就像在分布式内存范例中一样工作,这意味着为每个工作人员在内存中创建一个副本。这可能是一段不平凡的时间。此外,同一台机器中的多个图像可能会占用大量空间,具体取决于您正在处理的内容。我经常将工人的数量与数量相匹配,因为加倍的工人会让我内存不足。

3) 多个工作站上的网络速度使情况更加复杂。在机器之间本地,我们的交换机将以大约 20 兆字节/秒的速度传输内容,这比我在家中的互联网下载速度快 10 倍,但与在同一个盒子中制作副本相比,这是一个蜗牛的速度。

您可能会考虑增加 R 的 nice 值,以便 python 在需要做某事时具有优先权。

于 2015-10-22T19:26:11.660 回答