R性能差异(Solaris vs Windows)

问题描述:

我注意到一个有趣的问题。如果我运行下面的代码在2.12.0(32位)的Windows 3.00 GHz的Core 2 Duo CPU与2GB的RAM,它运行在不到一秒钟。如果我使用sparc-sun-solaris2.10(也是32位,但unix盒可以运行64位)在unix-box上运行它,则需要84秒。 unix盒的处理速度是2.5 gHz。如果我在代码运行的时候运行top,我注意到我的R进程只占用了大约3.2%的可用CPU状态,即使有更多可用的状态。这可能是问题的一部分吗?我阅读了安装手册,但是没有任何东西可以作为我的问题的明显解决方案跳出来。 unix操作系统在某种程度上限制了可用资源,而Windows不是?或者,有没有一些更好的方法来从源代码编译R没有完成?如果我没有提供足够的信息来回答问题,我很抱歉,这不是我的专业领域。R性能差异(Solaris vs Windows)

t0 <- proc.time()[[3]] 
x <- rnorm(10000) 
for(i in 1:10000){ 
    sd(x) 
} 
print(proc.time()[[3]]-t0) 
+1

编写一个CPU密集型C程序,编译它,运行它,看看是否也得到3.2%的CPU。如果是这样,它不是R的错,我们可以在其他地方看看......另外,请检查proc.time的CPU时间使用情况以及经过的时间... – Spacedman

+0

计算密集型C程序的上限为3.2%。另外,我只是在MATLAB中进行了相同的测试,循环在Windows上运行约1秒,而在UNIX上运行约3秒。这转向了相当难题。 – rlh2

+0

你确定系统上没有别的东西在运行? – Spacedman

处理器,如T1或T2具有数量的核,并且每个核心具有许多线股(硬件级上下文切换)的。如果您可以运行多线程应用程序,您将获得大吞吐量。典型的预期用例是基于Java的web服务器,例如处理20-40个连接在同一时间。

这种类型的处理器的缺点是这些SPARC芯片的单线程性能非常低。它看起来像这个问题的Oracle is aware;目前T4上的发展重点是提高单线程速度。

T1 processor向操作系统公开32个逻辑CPU。如果这是你的情况,显示的值是总计算能力的百分比,1/32〜= 3.125%,这与你所看到的接近。

要挤出T1处理器的所有性能,您需要使R使用多个CPU,例如通过multicore package