2013-06-11 11 views
7

Jest ku skrajności w funkcji R, myślę, ale tu idzie ...Parallel Processing i wielożyłowe w R

robię jakiś ciężki przetwarzanie w R, w którym pisałem funkcję, która robi wszystko noga działa z jednego połączenia. Jednak chciałbym wątkować lub wykorzystać więcej niż jeden rdzeń.

Przyjrzałem się pakietowi Parallel, który pojawia się jako przestarzały. Idealnie chciałbym nazwać funkcję jako nowy wątek.

Rozumiem złożoność obliczeń równoległych i nie jest to najłatwiejsza rzecz na świecie, ale byłbym wdzięczny, gdyby ktokolwiek wiedział o niektórych pakietach, które byłyby przydatne lub czegokolwiek, co przeoczyłem.

Cheers

Odpowiedz

18

Pakiet multicore jest przestarzałe: nie parallel. Zapoznaj się z dokumentacją funkcji mclapply: jest to najprostszy sposób wykonywania funkcji równolegle w pakiecie parallel. Jest bardzo podobny do lapply ale z kilku nowych, opcjonalnych argumentów:

library(parallel) 
myfun <- function(i) { Sys.sleep(1); i } 
mclapply(1:8, myfun, mc.cores=4) 

Zauważ, że mclapply wykorzystuje procesy, a nie tematy, a nie umożliwia wykonanie równoległego w systemie Windows. W przypadku systemu Windows powinieneś rzucić okiem na parLapply, który również znajduje się w parallel. Jest również podobny do lapply, ale jako pierwszy argument wymaga obiektu klastra. Oto ten sam przykład, ale to działa na zasadzie dowolny Platforma:

library(parallel) 
cl <- makePSOCKcluster(4) 
myfun <- function(i) { Sys.sleep(1); i } 
parLapply(cl, 1:8, myfun) 
stopCluster(cl) 
+0

ale funkcje, takie jak 'parLapply' w opakowaniu równoległym działa równolegle na okna, to po prostu zajmuje trochę więcej ustawień w obsłudze niż' mclapply' . –

+0

@GregSnow W końcu zrozumiałem twój komentarz i mam nadzieję, że poprawiłem swoją odpowiedź. Dzięki. –