Почему kmeans работает так медленно на высокопроизводительной машине с Ubuntu, но не на Windows?

Производительность моей машины с Ubuntu ужасна для R kmeans {stats}, тогда как Windows 7 не показывает никаких проблем.

X — это матрица 5000 x 5 (числовые переменные).
k = 6

Мой настольный компьютер представляет собой процессор Intel Xeon W3530 @ 2,80 ГГц x 8 (т. е. 8 ядер) Dell Precision T3500 с Ubuntu 12.04.4 LTS (GNU/Linux 3.2.0-58-универсальный x86_64) с 24 ГБ ОЗУ.

Версия R 3.0.2 (25 сентября 2013 г.) -- "Frisbee Sailing" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: 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

По сравнению с 64-битным ноутбуком с Windows 7, процессором Intel Core i5-2430M @ 2,40 ГГц, 2 ядрами, 8 ГБ ОЗУ, R 3.0.1 и теми же данными:

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

   user  system elapsed
   0.36    0.00    0.37

Гораздо, намного быстрее. Для 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")

Мои результаты (машина 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

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

person a different ben    schedule 17.01.2014    source источник
comment
Согласно вашему комментарию #sorry: sapply(1:n, function(i) system.time(kmeans(X, center=k, nstart=i))[[3]]) вместо цикла for. Обратите внимание, что повышения производительности не будет, так как это по сути то же самое.   -  person tonytonov    schedule 17.01.2014
comment
Кроме того, каковы ваши результаты для Windows-машины? Мои тайминги Windows близки к вашим на Ubuntu.   -  person tonytonov    schedule 17.01.2014
comment
Спасибо @tonytonov. Я обновлю тайминги Windows в понедельник, когда вернусь к своему рабочему столу.   -  person a different ben    schedule 18.01.2014
comment
@a Differentben тайминги на моей виртуальной машине Ubuntu 12.04 имеют тот же порядок величины, что и вы. Я подозреваю, что на вашем компьютере с Ubuntu заканчивается память, и он начинает подкачку. Это определенно объяснило бы разницу.   -  person Paul Hiemstra    schedule 18.01.2014
comment
@PaulHiemstra, такие вещи меня смущают ... почему на 24-гигабайтной машине заканчивается память, а на 8-гигабайтной - нет?   -  person a different ben    schedule 20.01.2014
comment
@a Differentben Я просто предположил, что замена может объяснить огромную разницу в производительности.   -  person Paul Hiemstra    schedule 20.01.2014
comment
Я заметил, что ваша Ubuntu R — 3.0.2, а Windows — 3.0.1. Функция kmeans была обновлена ​​для версии 3.0.2, а в мои тесты были примерно на 20% медленнее, чем предыдущая версия. Этого недостаточно, чтобы объяснить разницу, которую вы видите, но я подумал, что об этом стоит упомянуть.   -  person ping    schedule 17.03.2014
comment
@ping, теперь я обновился до 3.1.0 на Ubuntu, и время немного быстрее, но только незначительно.   -  person a different ben    schedule 01.04.2014
comment
@a-other-ben Да, я бы предположил (но не проверял), что kmeans в 3.1.0 такой же, как 3.0.2, чтобы попробовать более быструю версию, вы бы понизили ее до 3.0.1. Тем не менее, не ожидал, что этого будет достаточно, чтобы решить вашу проблему...   -  person ping    schedule 01.04.2014


Ответы (2)


Вы используете Ubuntu на виртуальной машине? Если бы это было так, я бы увидел, что результаты намного медленнее - в зависимости от того, сколько памяти, процессоров и дискового пространства было выделено для виртуальной машины. Если он не работает на виртуальной машине, результаты вызывают недоумение. Я хотел бы видеть счетчик производительности для каждого из запусков (каково использование процессора, использование памяти и т. д.) в обеих системах, когда вы запускаете это? В противном случае единственное, на что я мог бы сослаться, это то, что код «подходит» к кешу L1 вашей системы Windows, но не в системе Linux. У Xeon есть 8 ГБ (L3?) Кэш, тогда как у Core i5 всего 3 МБ, но я предполагаю, что это L3. Я не знаю, как выглядят структуры кеша L1 и L2.

person ChileAddict - Intel    schedule 28.03.2014
comment
Нет, это установка с диска. Я также понятия не имею о кешах или даже о том, что они значат для этой проблемы! Я думаю, что у @ping есть лучшая подсказка на данный момент. Недавно я обновил свои установки, но еще не возвращался, чтобы проверить этот код. Скоро обновлю, когда вернусь на работу. - person a different ben; 30.03.2014

Я предполагаю, что это проблема BLAS. R может использовать внутренний BLAS, если он скомпилирован таким образом. В дополнение к этому разные версии BLAS могут демонстрировать значительные различия в производительности (openBLAS ‹› MKL).

person Andre Wildberg    schedule 26.12.2020