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