为什么gam的拟合时间会随着使用的线程数而增加?

时间:2019-01-23 10:49:06

标签: r multithreading performance gam mgcv

常识表明,我们使用的内核或线程越多,任何计算的速度都应该更快。如果缩放比例不好,则随着线程数量的增加,计算时间将不会缩短。因此,如本示例所示,当增加带有R包MGCV的gam时,增加线程为何会大大减少计算时间? :

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)体系结构:具有两个物理CPU的DELL Power Edge英特尔至强X5660每个都具有6个内核@ 2800 Mhz,每个内核能够处理2个线程(即,总共24个线程)。 80Gb RAM。

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中的计算负担全部在线性代数中,所以并行计算可能会带来 reduced (...)的好处。调整后的BLAS”。

0 个答案:

没有答案