Использование parLapply с rbindlist в data.table приводит к тому, что загрузка процессора превышает 100% - PullRequest
0 голосов
/ 02 марта 2019

Рассмотрим следующий блок кода:

library(data.table)
library(parallel)

random_function<-function(i){
  n<-1000000
  big_list<-list("vector")
  for (k in 1:100){
    big_list[[k]]<-data.table(rnorm(n),rnorm(n))
  }
  rbindlist(big_list,use.names = TRUE,fill=TRUE)
}


cl<-makeCluster(8)
clusterExport(cl,"random_function")
clusterCall(cl,function()library(data.table))
parLapply(cl,1:1000,random_function)
stopCluster(cl)

Когда я запускаю его на моей машине, на которой 36 потоков, внезапно активируются все потоки (т. Е. Превышают 8, которые я указал при создании кластера)100% нагрузка).

Это происходит только с data.table 1.12.0.Все отлично работает с data.table_1.11.8.Это ошибка или я просто что-то делаю неправильно?Кажется, что проблема в rbindlist, то есть, если я не помещаю в функцию rbindlist, нагрузка на мои 8 потоков не превышает 100%. enter image description here

ЗдесьИнформация о моей сессии:

> sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.2 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.12.0

loaded via a namespace (and not attached):
[1] compiler_3.5.2 tools_3.5.2   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...