Linux R中的并行处理:未使用所有内核
我尝试运行一些“令人尴尬的并行”代码,所以我才开始研究并行处理。我试图在Linux机器上使用Linux R中的并行处理:未使用所有内核,linux,r,multithreading,parallel-processing,Linux,R,Multithreading,Parallel Processing,我尝试运行一些“令人尴尬的并行”代码,所以我才开始研究并行处理。我试图在Linux机器上使用parlappy(因为它在我的Windows机器下工作得非常好,而mclappy将代码限制在Linux上),但我遇到了一些问题 我的代码是这样的: cl <- makeCluster(detectCores(), type="FORK") # fork -> psock when I use Win clusterExport(cl, some.list.of.things) out
parlappy
(因为它在我的Windows机器下工作得非常好,而mclappy
将代码限制在Linux上),但我遇到了一些问题
我的代码是这样的:
cl <- makeCluster(detectCores(), type="FORK") # fork -> psock when I use Win
clusterExport(cl, some.list.of.things)
out <- parLapply(cl, some.fun)
stopCluster(cl)
我需要在这里提到的是,我对任何Linux基础知识都不熟悉。它是由其他人运行的我的大学服务器,除了将“1”改为“ff”(无论“ff”代表什么)之外,我不知道上面的代码的实际含义和作用。无论如何,在执行了上述代码之后,我可以看到我的子进程中有8个进程中有3个获得了几乎全部的CPU时间,这是一个很大的改进
话虽如此,共有8个核心(由detectCores()
确定)和8个子进程(如系统监视器中所示),但“只有”3个子进程在工作
考虑到我对并行处理一无所知,我想知道您是否可以给我一些指导,告诉我如何使用所有8个内核。我觉得自己就像一个盲人,不知道应该寻找什么来解决这种情况。任何关于我应该改变什么或可能出现什么问题的建议都将不胜感激 嗯,没人知道我可以从哪里开始找吗?
system(sprintf("taskset -p 0xffffffff %d", Sys.getpid()))