Ubuntu R ForEach/DoMC不使用多核
我在R中构建了一个函数(运行在Ubuntu12.04 LTS 64位、4核i7服务器上,具有多线程和6gb ram),在那里我使用标准软件包安装了R: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(这也没有帮助),就像我安装
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'
)