ColMeans (), colSums () ... в R также распараллелены? - PullRequest
0 голосов
/ 10 октября 2018

Мы знаем, что использование таких функций, как colMeans(), colSums() намного быстрее, чем их эквивалент при использовании apply(), поскольку они предварительно скомпилированы (в C, C++ ...?)

Эти функции также автоматически распараллеливаются на этих языках?

Может быть, на самом деле не имеет смысла накладные расходы на распараллеливание, поскольку это только очень простая функция, верно?Но все же, для очень больших матриц это может иметь смысл?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Даже без распараллеливания реализация Rfast лучше.

x = matrix(rnorm(1000*100),ncol=100)

microbenchmark::microbenchmark(.colSums(x,1000,100), colSums(x),Rfast::colsums(x,parallel=0),times=1000)
Unit: microseconds
                          expr     min      lq     mean  median      uq     max    neval
         .colSums(x, 1000, 100) 124.870 125.725 127.28580 125.726 126.153 301.911  1000
                     colSums(x) 132.567 133.423 136.30507 134.705 135.134 282.668  1000
Rfast::colsums(x, parallel = 0)  79.541  80.824  84.00742  81.252  82.107 307.470  1000

Большие матрицы делают распараллеливание актуальным (тесты для двухъядерного ноутбука)

x = matrix(rnorm(1000*1000),ncol=1000)

microbenchmark::microbenchmark(.colSums(x,1000,1000), colSums(x),Rfast::colsums(x,parallel=0),
    Rfast::colsums(x,parallel=1),times=1000)
Unit: microseconds
                           expr      min       lq      mean    median        uq      max  neval
        .colSums(x, 1000, 1000) 1313.268 1336.3600 1366.5152 1344.486 1355.1760 2468.310  1000
                     colSums(x) 1350.473 1366.2950 1401.0574 1374.420 1386.8210 2826.241  1000
Rfast::colsums(x, parallel = 0)  755.205  769.7440  801.5617  779.152  796.6850 1796.068  1000
Rfast::colsums(x, parallel = 1)  604.249  637.8185  680.3327  651.289  674.1675 1808.042  1000

x = matrix(rnorm(100000*100),ncol=100)

microbenchmark::microbenchmark(.colSums(x,100000,100), colSums(x),Rfast::colsums(x,parallel=0),
    Rfast::colsums(x,parallel=1),times=1000)

 Unit: milliseconds
                            expr       min        lq      mean    median        uq     max    neval
         .colSums(x, 1e+05, 100) 12.910733 12.971671 13.124897 13.011441 13.087346 26.914502  1000
                      colSums(x) 12.944944 13.012511 13.142074 13.058268 13.128400 14.879138  1000
 Rfast::colsums(x, parallel = 0)  6.988414  7.009796  7.165310  7.068810  7.154765 16.826589  1000
 Rfast::colsums(x, parallel = 1)  4.061679  4.251977  4.373995  4.296451  4.385827  7.610196  1000
0 голосов
/ 10 октября 2018

Ничто не распараллеливается автоматически в R, однако эти точные функции существуют в пакете Rfast с параллельным аргументом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...