doParallel:核心与套接字以及其他问题

时间:2018-12-17 17:16:33

标签: cluster-computing doparallel

我是doParallel处理的新手,有几个问题。我正在使用远程虚拟Windows 10桌面,因此我使用的是套接字而不是fork。远程桌面具有12个核心和64 GB的可用内存。

a。我的第一个问题与运行RegisterDoParallel(cores = 4)时创建的内容有关? “核心”参数表示实际上正在创建一组核心。但是我已经读到,可以规定比台式机/计算机集群中更多的内核。因此,我怀疑正在创建的实际上是4个新进程,每个进程都可以由系统调度程序分配以在单独的内核上执行,而不是直接使用四个内核。这有两个原因。如果在创建集群时实际上选择了核心,那么我将不愿意设置10个“核心”的集群,以免我在同一主机上的其他虚拟桌面上让其他用户选择使用它们簇。另一方面,如果我仅创建10个可由系统调度程序分配的进程,则“占用”内核没有任何问题。如果系统调度程序有10个可用的内核来分配我的进程以供执行,我将仅使用10个内核。同样,如果我实际上直接拥有10个内核,那么必须在函数返回后立即释放集群。但是,如果我要做的只是创建10个进程,并且在我的函数返回时,我只是简单地将进程保持打开状态,但没有任何工作要做,因此被系统调度程序忽略,这不会使其他进程变慢。总而言之,我是否正确地说RegisterDoParallel(cores = 4)只是为系统调度程序创建分配给核心的进程,而不是为实际的核心分配工作?

b。 stopImplicitCluster()停止隐式集群。但是文档没有解释什么是隐式集群。我是否正确,这是由RegisterDoParallel(cores = 4)创建的未命名集群,而不是由RegisterDoParallel(cl)创建的命名集群,其中cl <-makeCluster(4)?

c。当我使用任务管理器执行“ doeach”功能时,似乎当我使用RegisterDoParallel(cores = 4)创建集群时,一旦进程完成其工作,它将很快被系统破坏(或更可能本身退出了),因此似乎不需要运行stopImplicitCluster()。我对此是否正确?

d。如果我运行RegisterDoParallel(cores = 4),运行一个函数并运行stopImplicitCluster(),然后运行getDoParWorkers(),仍然会告诉我有4个“工人”可用。我知道我可以通过运行registerDoSEQ()将其重置为1。 getDoParWorkers()的代码只是在某处的选项列表中读取内容。不应该stopImplicitCluster()和stopCluster()将此选项重置为1吗?

在此先感谢任何能够权威回答以上问题的人。我喜欢理解我在编写代码时要求计算机执行的操作。 拉里·亨西克(Larry Hunsicker)

0 个答案:

没有答案