Почему время установки иглы увеличивается с количеством используемых нитей? - PullRequest
0 голосов
/ 23 января 2019

Здравый смысл означает, что любые вычисления должны быть быстрее, чем больше ядер или потоков мы используем. Если масштабирование плохое, время вычислений не будет увеличиваться с увеличением количества потоков. Таким образом, почему увеличение потоков значительно сокращает время вычислений при установке игры с R-пакетом MGCV, как показано в этом примере? :

library(boot) # loads data "amis"

t1<-Sys.time()

mod <- gam(speed ~ s(period, warning, pair, k = 12), data = amis, family=tw (link = log),method="REML",control=list(nthreads=1))  # 

t2<-Sys.time()

print("Model fitted in:")
print(t2-t1)

Если вы увеличите число потоков в этом примере до 2, 4 и т. Д., Процедура подгонки займет больше и больше времени, а не будет быстрее, чем мы ожидали. В моем конкретном случае:

1 поток: 32,85333 с

2 потока: 50,63166 с

3 темы: 1,2635 минут

Почему это? Если я делаю что-то не так, что я могу сделать, чтобы получить желаемое поведение (т. Е. Повысить производительность с увеличением количества потоков)?

Некоторые заметки:

1) Показанная здесь модель, семейство и метод решения не имеют особого смысла. Это только пример. Однако я столкнулся с этой проблемой с реальными данными и разумной моделью (но для простоты я использую этот небольшой код, чтобы проиллюстрировать проблему). Данные, функциональная форма модели, семейство, метод решения кажутся несущественными: после многих тестов у меня всегда одинаковое поведение, то есть увеличение количества используемых потоков, снижение производительности (то есть увеличение времени вычислений).

2) Операционная система: Linux Ubuntu 18.04;

3) Архитектура: DELL Power Edge с двумя физическими процессорами Intel Xeon X5660, каждый из которых имеет 6 ядер, 2800 МГц, и каждое ядро ​​способно обрабатывать 2 потока (т. Е. Всего 24 потока). 80 ГБ ОЗУ.

4) Библиотеки OpenMP (которые необходимы для многозадачности функции gam) были установлены с

sudo apt-get install libomp-dev

5) Мне известна страница справки по многоядерному использованию gam (https://stat.ethz.ch/R-manual/R-devel/library/mgcv/html/mgcv-parallel.html).). Единственное, что там написано, указывающее на снижение производительности при увеличении количества потоков, это «Потому что вычислительная нагрузка в mgcv все в линейной алгебре, тогда параллельные вычисления могут дать уменьшенное (...) преимущество с настроенным BLAS ".

...