我注意到一个有趣的问题.如果我在具有2GB RAM的
Windows 3.00 gHz Core 2 Duo cpu上的R 2.12.0(32位)中运行以下代码,它将在不到一秒的时间内运行.如果我在带有sparc-sun-solaris2.10的unix-Box上运行它(也是32位,虽然unix盒可以运行64位),它需要84秒. unix盒的处理速度为2.5 gHz.如果我在代码运行时运行top,我注意到我的R进程只占用了大约3.2%的可用cpu状态,即使有更多可用的状态.这可能是问题的一部分吗?我阅读了安装手册,但没有任何内容成为我问题的明显解决方案. unix操作系统是否以某种方式限制了可用资源,而windows则不然?或者,是否有一些更好的方法从未完成的源编译R?如果我没有提供足够的信息来回答这个问题,我很抱歉,这不是我的专业领域.
t0 <- proc.time()[[3]] x <- rnorm(10000) for(i in 1:10000){ sd(x) } print(proc.time()[[3]]-t0)
解决方法
诸如T1或T2的处理器具有多个核,并且每个核具有多个链(硬件级上下文切换).如果您可以运行多线程应用程序,您将获得大量吞吐量.典型的预期用例是基于Java的web服务器,例如处理同时20-40个连接.
这类处理器的缺点是这些SPARC芯片的单线程性能非常低.看起来像Oracle is aware的问题;目前T4的开发重点是提高单线程速度.
T1 processor将32个逻辑cpu暴露给操作系统.如果这是你的情况,显示的值是总计算能力的百分比,1 / 32~ = 3.125%,这接近你所看到的.
要从T1处理器中挤出所有性能,您需要使R使用多个cpu,例如通过multicore package.