Ubuntu R ForEach/DoMC不使用多核

Ubuntu R ForEach/DoMC不使用多核,r,ubuntu,foreach,domc,R,Ubuntu,Foreach,Domc,我在R中构建了一个函数(运行在Ubuntu12.04 LTS 64位、4核i7服务器上,具有多线程和6gb ram),在那里我使用标准软件包安装了R: sudo apt-get install r-base r-recommended r-base-dev sudo apt-get install r-cran-multicore r-cran-iterators r-cran-foreach r-cran-domc 注意:我还在R中安装了foreach&doMC(这也没有帮助),就像我安装

我在R中构建了一个函数(运行在Ubuntu12.04 LTS 64位、4核i7服务器上,具有多线程和6gb ram),在那里我使用标准软件包安装了R:

sudo apt-get install r-base r-recommended r-base-dev
sudo apt-get install r-cran-multicore r-cran-iterators r-cran-foreach r-cran-domc 
注意:我还在R中安装了
foreach
&
doMC
(这也没有帮助),就像我安装了
deldir
包一样:

install.packages(c("deldir"), dependencies = TRUE)
我的函数运行得很好,但它不使用并行核(只在8个核中取1个最大值):

如果我看一下用法(使用
top
):

所以只要把一个核心最大化。有人知道是什么原因导致
foreach
/
doMC
不使用多核吗

> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] doMC_1.2.5      multicore_0.1-7 iterators_1.0.6 foreach_1.4.0
[5] deldir_0.0-19

loaded via a namespace (and not attached):
[1] codetools_0.2-8

要添加问题的可能答案,请执行以下操作: 由于foreach/mc在计算机本身上工作(在标准示例中),这是特定的代码本身,很可能voro=deldir部分占用时间,而不是后面的循环。但是,这意味着需要调整deldir包。查看DelDir源代码中的代码,我似乎需要调整代码中的这段代码:

# Call the master subroutine to do the work:
repeat {
    tmp <- .Fortran(
            'master',
            x=as.double(x),
            y=as.double(y),
            sort=as.logical(sort),
            rw=as.double(rw),
            npd=as.integer(npd),
            ntot=as.integer(ntot),
            nadj=integer(tadj),
            madj=as.integer(madj),
            ind=integer(npd),
            tx=double(npd),
            ty=double(npd),
            ilist=integer(npd),
            eps=as.double(eps),
            delsgs=double(tdel),
            ndel=as.integer(ndel),
            delsum=double(ntdel),
            dirsgs=double(tdir),
            ndir=as.integer(ndir),
            dirsum=double(ntdir),
            nerror=integer(1),
            PACKAGE='deldir'
        )
#调用主子程序来执行以下工作:
重复{

tmp您可以发布
sessionInfo()
的输出吗?添加了它!感谢您的兴趣!只是确认:foreach/mc在计算机本身上工作(使用标准示例)。因此,特定代码中的某些内容会停止多处理器部分。但考虑到这一点,可能deldir包在整个过程中占用了99%的时间。我也可以并行执行文件循环,但会占用大量内存。。。
top - 01:03:19 up 9 min,  3 users,  load average: 1.02, 0.86, 0.45
Tasks: 131 total,   2 running, 127 sleeping,   0 stopped,   2 zombie
Cpu(s): 12.5%us,  0.0%sy,  0.0%ni, 87.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   6104932k total,  1240512k used,  4864420k free,    16656k buffers
Swap:  6283260k total,        0k used,  6283260k free,   141996k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1553 zzzzzzzz  20   0  913m 850m 3716 R  100 14.3   8:22.03 R
> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] doMC_1.2.5      multicore_0.1-7 iterators_1.0.6 foreach_1.4.0
[5] deldir_0.0-19

loaded via a namespace (and not attached):
[1] codetools_0.2-8
# Call the master subroutine to do the work:
repeat {
    tmp <- .Fortran(
            'master',
            x=as.double(x),
            y=as.double(y),
            sort=as.logical(sort),
            rw=as.double(rw),
            npd=as.integer(npd),
            ntot=as.integer(ntot),
            nadj=integer(tadj),
            madj=as.integer(madj),
            ind=integer(npd),
            tx=double(npd),
            ty=double(npd),
            ilist=integer(npd),
            eps=as.double(eps),
            delsgs=double(tdel),
            ndel=as.integer(ndel),
            delsum=double(ntdel),
            dirsgs=double(tdir),
            ndir=as.integer(ndir),
            dirsum=double(ntdir),
            nerror=integer(1),
            PACKAGE='deldir'
        )