为什么kmeans在高规格的Ubuntu机器上这么慢,而不是Windows?

a d*_*ben 5 linux ubuntu performance r cpu-speed

我的Ubuntu机器的性能对于R kmeans{stats}来说很糟糕,而Windows 7没有显示任何问题.

X是一个5000 x 5矩阵(数值变量).
k= 6

我的台式机是Intel Xeon CPU W3530 @ 2.80GHz x 8(即8核)Dell Precision T3500,带有24 GB RAM的Ubuntu 12.04.4 LTS(GNU/Linux 3.2.0-58-generic x86_64).

R版本3.0.2(2013-09-25) - "飞盘航行"版权所有(C)2013 R统计计算平台基础:x86_64-pc-linux-gnu(64位)

> system.time(X.km <- kmeans(X, centers=k, nstart=25))
   user  system elapsed
 49.763  52.347 103.426
Run Code Online (Sandbox Code Playgroud)

与配备Intel Core i5-2430M @ 2.40GHz,2核,8 GB RAM,R 3.0.1和相同数据的Windows 7 64位笔记本电脑相比:

> system.time(X.km <- kmeans(X, centers=k, nstart=25))

   user  system elapsed
   0.36    0.00    0.37
Run Code Online (Sandbox Code Playgroud)

更快,更快.因为nstart=1问题仍然存在,我只是想放大执行时间.

有什么明显的东西我不见了吗?

亲自尝试一下,看看你取得的成就:

set.seed(101)
k <- 6
n <- as.integer(10)
el.time <- vector(length=n)
X <- matrix(rnorm(25000, mean=0.5, sd=1), ncol=5)
for (i in 1:n) {  # sorry, not clever enough to vectorise
    el.time[i] <- system.time(kmeans(X, centers=k, nstart=i))[[3]]
}
print(el.time)
plot(el.time, type="b")
Run Code Online (Sandbox Code Playgroud)

我的结果(ubuntu机器):

> print(el.time)  
  [1] 0.056 0.243 0.288 0.489 0.510 0.572 0.623 0.707 0.830 0.846
Run Code Online (Sandbox Code Playgroud)

Windows机器:

> print(el.time)
 [1] 0.01 0.12 0.14 0.19 0.20 0.21 0.22 0.25 0.28 0.30
Run Code Online (Sandbox Code Playgroud)

小智 0

您是否在虚拟机中运行 Ubuntu?如果是这种情况,我可以看到结果要慢得多 - 取决于为虚拟机分配了多少内存、处理器、磁盘空间。如果它没有在虚拟机中运行,那么结果会令人费解。当您运行此程序时,我想查看两个系统上每次运行的性能计数器(CPU 使用率、内存使用率等)?否则,我唯一可以链接的是代码“适合”Windows 系统的 L1 缓存,但不适合 Linux 系统。Xeon 有 8GB(L3?)缓存,而 Core i5 只有 3MB - 但我假设那是 L3。我不知道L1和L2缓存结构是什么样的。