相关疑难解决方法(0)

如何让R使用更多的CPU和内存?

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

PS:下面是CPU使用情况的屏幕截图. CPU使用情况的屏幕截图

r cpu-usage

12
推荐指数
2
解决办法
3万
查看次数

R system()进程总是使用相同的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执行时所有启动的内容都限于单个内核?

multithreading multicore r process

8
推荐指数
1
解决办法
4464
查看次数

在函数中使用sfApply时的范围问题(包降雪 - 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用于循环结构).

我已经尝试过简化代码以摆脱双循环,但由于问题的性质,这是不可能的.有任何想法吗?

r function scoping

5
推荐指数
1
解决办法
1714
查看次数

在R中使用Multicore用于Pentium 4 HT机器

我在办公室使用奔腾4 HT机器运行R,一些代码需要plyr包,我通常需要等待6-7分钟才能让脚本完成运行,而我看到我的处理器只用了一半.

我听说在R中使用多核软件包以更好地利用多核处理器,我的情况是否合适?

谢谢!

multicore r

4
推荐指数
1
解决办法
2290
查看次数

标签 统计

r ×4

multicore ×2

cpu-usage ×1

function ×1

multithreading ×1

process ×1

scoping ×1