Рассмотрим следующий блок кода:
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%.
ЗдесьИнформация о моей сессии:
> 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