library parallel ка использовать?

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
_taras_
Активный участник
Сообщения: 186
Зарегистрирован: 28 июл 2018, 08:40
Репутация: 12
Откуда: Киев

library parallel ка использовать?

Сообщение _taras_ » 07 апр 2023, 14:34

Приветствую всех!
В пакете vegan есть расчет ANOSIM. По умолчанию он запускается в однопоточном режиме и посему очень долго считает... В докак указано, что он поддерживает parallel...
Подскажите как включить многопоточность?
Пока имеется вывод из parallel

Код: Выделить всё

library(parallel)
cl <- parallel::makeCluster(detectCores())
cl
кластер-приемник с 8 узлами на хосте ‘localhost’
В ANOSIM использование выглядит так

Код: Выделить всё

ano = anosim(m_com, tab$sites, distance = "euclidean",parallel = getOption(mc.cores=8), permutations = 9999)

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: library parallel ка использовать?

Сообщение gamm » 07 апр 2023, 15:16

RTFM
указываем число реальных ядер, будет запущено столько же копий R (у меня Ryzen 7 5800x, 8 ядер). Там накладные расходы на запуск высокие, имеет смысл только при большом числе permutations, см. примеры ниже с 100 и 500 permutations

Код: Выделить всё

> library(vegan)
> N=1000
> x=matrix(rnorm(N*5),ncol=5)
> g=sample(1:10,N,replace=TRUE)
> F <- vegdist(decostand(x, "norm"), "euclidean", upper = T)
> start_time <- Sys.time()
> res <- anosim(F, g, permutations = 100)
> end_time <- Sys.time()
> end_time - start_time
Time difference of 8.793276 secs
> 
> start_time <- Sys.time()
> res <- anosim(F, g, permutations = 100, parallel=8)
> end_time <- Sys.time()
> end_time - start_time
Time difference of 10.42982 secs

#=======================================================================
> N=1000
> x=matrix(rnorm(N*5),ncol=5)
> g=sample(1:10,N,replace=TRUE)
> F <- vegdist(decostand(x, "norm"), "euclidean", upper = T)
> start_time <- Sys.time()
> res <- anosim(F, g, permutations = 500)
> end_time <- Sys.time()
> end_time - start_time
Time difference of 43.34616 secs
> 
> start_time <- Sys.time()
> res <- anosim(F, g, permutations = 500, parallel=8)
> end_time <- Sys.time()
> end_time - start_time
Time difference of 17.84001 secs

_taras_
Активный участник
Сообщения: 186
Зарегистрирован: 28 июл 2018, 08:40
Репутация: 12
Откуда: Киев

Re: library parallel ка использовать?

Сообщение _taras_ » 11 апр 2023, 11:30

Огромное спасибо, gamm !
Получилось. Выигрыш на моих данных около 2-х минут.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: library parallel ка использовать?

Сообщение gamm » 11 апр 2023, 12:30

обращайтесь ... я все эти anosim когда-то сам писал :mrgreen:

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей