我在一台windows机器上运行一个foreach循环,后台是snow。我有8个内核可以使用。rscript通过嵌入在python脚本中的系统调用来执行,因此也会有一个活动的python实例。
不使用#workers=#cores而使用#workers<#cores是否有任何好处,以便总是为系统进程或python实例开放?
它成功运行具有#workers=#核心,但我采取的性能打击饱和的核心(最大可能的线程)与r工人实例?
这取决于
- 你的处理器(特别是超线程)
- 有多少信息必须复制到/从不同的图像
- 如果你在多个盒子(局域网)上实现这个
对于1)超线程有帮助。我知道我的机器是这样做的,所以我通常有两倍的工人和核心,我的代码在85%的时间内完成,相比之下,如果我匹配工人和核心的数量。它不会有更多的改善。
2)如果你没有分叉,例如使用套接字,你就像在分布式内存范例中一样工作,这意味着在内存中为每个worker创建一个副本。这可能是一段不平凡的时间。此外,同一台机器中的多个映像可能会占用大量空间,这取决于您正在处理的内容。我经常将worker的数量与number匹配,因为加倍worker会使我的内存耗尽。
这与多个工作站的网络速度有关。在本地机器之间,我们的交换机将以每秒20兆的速度传输内容,这比我在家里的互联网下载速度快10倍,但与在同一个盒子里复制相比,这是一个蜗牛的速度。
你可以考虑增加R的nice值,以便python在需要做某事时具有优先级。