El rendimiento de mi máquina Ubuntu es terrible para R kmeans {stats}, mientras que Windows 7 no muestra problemas.
X es una matriz de 5000 x 5 (variables numéricas).
k = 6
Mi máquina de escritorio es una CPU Intel Xeon W3530 a 2,80 GHz x 8 (es decir, 8 núcleos) Dell Precision T3500, con Ubuntu 12.04.4 LTS (GNU/Linux 3.2.0-58-genérico x86_64) con 24 GB de RAM.
R versión 3.0.2 (2013-09-25) -- "Frisbee Sailing" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64 bits)
> system.time(X.km <- kmeans(X, centers=k, nstart=25)) user system elapsed 49.763 52.347 103.426En comparación con una computadora portátil con Windows 7 de 64 bits con Intel Core i5-2430M a 2,40 GHz, 2 núcleos, 8 GB de RAM, R 3.0.1 y los mismos datos:
> system.time(X.km <- kmeans(X, centers=k, nstart=25)) user system elapsed 0.36 0.00 0.37 Mucho, mucho más rápido. Para nstart=1 , el problema aún existe, solo quería amplificar el tiempo de ejecución.
¿Hay algo obvio que me estoy perdiendo?
Pruébenlo ustedes mismos, vean qué tiempos logran:
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")Mis resultados (máquina ubuntu):
> print(el.time) [1] 0.056 0.243 0.288 0.489 0.510 0.572 0.623 0.707 0.830 0.846máquina de 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¿Está ejecutando Ubuntu en una máquina virtual? Si ese fuera el caso, podría ver que los resultados son mucho más lentos: según la cantidad de memoria, procesadores y espacio en disco asignados para la máquina virtual. Si no se está ejecutando en una máquina virtual, los resultados son desconcertantes. Me gustaría ver el contador de rendimiento para cada una de las ejecuciones (cuál es el uso de la CPU, el uso de la memoria, etc.) en ambos sistemas cuando ejecuta esto. De lo contrario, lo único que podría vincular es que el código "encaja" en el caché L1 de su sistema Windows pero no en el sistema Linux. El Xeon tiene 8 GB (¿L3?) de caché mientras que el Core i5 solo tiene 3 MB, pero supongo que es L3. No sé cómo son las estructuras de caché L1 y L2.
Supongo que es un problema de BLAS. R podría usar el BLAS interno si se compila así. Además de esto, diferentes versiones de BLAS pueden mostrar diferencias de rendimiento significativas ( openBLAS <> MKL ).