无论R计算多么密集,它都不会占用超过25%的CPU.我已经尝试设置rsession.exeto 的优先级,High甚至Realtime但用法保持不变.有没有办法增加R的CPU使用率以充分利用我的系统的潜力,或者我对这个问题的理解是否有任何误解?在此先感谢您的帮助.
PS:下面是CPU使用情况的屏幕截图.

在Linux 3.12.0上的R 3.0.2中,我使用system()函数来执行许多任务.如果我通过R system上的Rscript在命令行上执行它们,那么所需的效果就是运行这些任务.
但是,当通过system()在R中执行它们时,每个任务都与主R进程中的同一个CPU相关联.
换一种说法:
当通过RScript直接从Rash外部的bash shell启动时,每个任务都在自己的核心上运行(这是期望的)
当通过system()在R内部启动时,每个任务都在同一个核心上运行.没有多核共享.如果我有100个任务,那么它们都被困在一个核心上.
我无法弄清楚如何在R内部生成一个进程,以便每个进程都使用自己的核心.
我正在使用一个简单的测试来消耗CPU周期,所以我可以使用top/htop测量效果:
dd if=/dev/urandom bs=32k count=1000 | bzip2 -9 >> /dev/null
Run Code Online (Sandbox Code Playgroud)
当这个简单的测试在R之外多次启动时,每次迭代都有自己的核心.但是当我在R里面启动时:
system("dd if=/dev/urandom bs=32k count=2000 | bzip2 -9 >> /dev/null", ignore.stdout=TRUE,ignore.stderr=TRUE,wait=FALSE)
Run Code Online (Sandbox Code Playgroud)
他们都被困在一个核心上.
这是在运行4个系统(/)的同时/并发迭代后的可视化

请帮助我,我需要告诉R启动新任务,每个任务都在自己的核心运行.
2013年12月4日更新:
我用Python尝试了Python测试:
import thread
thread.start_new_thread(os.system,("/bin/dd if=/dev/urandom of=/dev/null bs=32k count=2000",))
Run Code Online (Sandbox Code Playgroud)
我重复了几次新线程,并且按预期一切正常(使用了多个内核,每个线程一个).
所以我认为在R中安装rPython包,并在R中尝试相同的方法:
python.exec("import thread")
python.exec("thread.start_new_thread(os.system,('/bin/dd if=/dev/urandom of=/dev/null bs=32k count=2000',))")
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使经过多次调用,它也被限制在一个核心.为什么从R执行时所有启动的内容都限于单个内核?
让我在R中添加另一个范围问题,这次是降雪包.如果我在我的全局环境中定义一个函数,并且我稍后在另一个函数中的sfApply()中尝试使用该函数,则不再找到我的第一个函数:
#Runnable code. Don't forget to stop the cluster with sfStop()
require(snowfall)
sfInit(parallel=TRUE,cpus=3)
func1 <- function(x){
y <- x+1
y
}
func2 <- function(x){
y <- sfApply(x,2,function(i) func1(i) )
y
}
y <- matrix(1:10,ncol=2)
func2(y)
sfStop()
Run Code Online (Sandbox Code Playgroud)
这给出了:
> func2(y)
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "func1"
Run Code Online (Sandbox Code Playgroud)
如果我将我的函数嵌套在另一个函数中,它可以工作.当我在全局环境中使用sfApply()时,它也可以工作.事实是,我不想在函数2中嵌入我的函数func1,因为这会导致func1被定义多次(func2用于循环结构).
我已经尝试过简化代码以摆脱双循环,但由于问题的性质,这是不可能的.有任何想法吗?
我在办公室使用奔腾4 HT机器运行R,一些代码需要plyr包,我通常需要等待6-7分钟才能让脚本完成运行,而我看到我的处理器只用了一半.
我听说在R中使用多核软件包以更好地利用多核处理器,我的情况是否合适?
谢谢!