2009-09-08 18 views
30

Mam czterordzeniowy laptop z systemem Windows XP, ale patrząc na Menedżera zadań R wydaje się, że tylko jeden procesor na raz. Jak mogę sprawić, żeby R używał wszystkich czterech procesorów i przyspieszał moje programy R?Jak sprawić, by R używało wszystkich procesorów?

+7

podstawie poniższych uwag i poszukiwania linkedin swojej nazwy ... Jestem pewien, że jest bezwstydna reklama (https: // www .linkedin.com/in/dmsmith). Odpowiedziałeś na własne pytanie z płatnym produktem, w którym jesteś zaangażowany w rozwój ... no dalej ... –

Odpowiedz

7

Słyszę informację, że REvolution R obsługuje lepszą wielowątkowość, a typowa wersja CR z R i REvolution obsługuje również 64-bitowe R w oknach. Rozważałem zakup kopii, ale uznałem, że ich ceny są nieprzejrzyste. Na ich stronie nie ma cennika. Bardzo dziwne.

+9

Jeśli musisz zapytać o cenę, nie możesz sobie na to pozwolić. – Buhb

+3

Ceny akademickie są wymienione tutaj: http://www.revolution-computing.com/industry/academic.php. –

+2

Został kupiony przez Microsoft i nie ma już żadnej bezpłatnej wersji akademickiej. Ale możesz bezpłatnie zainstalować http://www.revolutionanalytics.com/revolution-r-open, a także korzystać z bibliotek intel MKL. W systemie Windows, jeśli weźmiesz pliki libiomp5md.dll, Rblas.dll i Rlapack.dll z tej instalacji i zastąpisz te w jakiejkolwiek instalacji R chcesz użyć będziesz miał operacje macierzy wielowątkowej (zwykle 10-20 x przyspieszenie). Lub Atlas Rblas.dll z https://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/binary/windows/x64/ als działa i jest prawie tak szybki. –

2

Na Windowsie wierzę, że najlepszym sposobem na zrobienie tego będzie prawdopodobnie foreach i śnieg, jak powiedział David Smith.

Jednak systemy oparte na systemach Unix/Linux mogą obliczać wiele procesów za pomocą pakietu "wielordzeniowego". Zapewnia funkcję wysokiego poziomu, "mclapply", która wykonuje zrozumienie listy dla wielu rdzeni. Zaletą pakietu "wielordzeniowego" jest to, że każdy procesor otrzymuje prywatną kopię Globalnego Środowiska, którą może zmodyfikować. Początkowo ta kopia jest jedynie wskaźnikiem do globalnego środowiska, co sprawia, że ​​dzielenie zmiennej jest niezwykle szybkie, jeśli globalne środowisko jest traktowane jako tylko do odczytu.

Rmpi ​​wymaga, aby dane były jawnie przesyłane pomiędzy procesami R zamiast pracy z podejściem "wielordzeniowym".

- Dan

6

wierzę pakiet multicore działa na XP. Daje pewne podstawowe możliwości przetwarzania wielu procesów, w szczególności poprzez oferowanie zastępczego zamiennika dla lapply() i prostego sposobu oceny wyrażenia w nowym wątku (mcparallel()).

+1

Kropla zamiennika dla 'lapply()' jest nazywana 'mclapply()'. To naprawdę takie proste: N procesorów jest N razy szybszy (tak długo, jak całe podnoszenie ciężarów jest wewnątrz funkcji, która jest stosowana). –

+2

pakiet wielordzeniowy wymaga zgodnego z POSIX OS, więc nie działa w Win. Możesz przeczytać wymagania tutaj: http://cran.r-project.org/web/packages/multicore/index.html –

+1

'doSMP' zapewnia podobną funkcjonalność do' multicore' na Windows i jest [dostępne na CRAN] (http://cran.r-project.org/web/packages/doSMP/index.html) –

15

Począwszy od wersji 2.15, R ma teraz wbudowaną obsługę obliczeń wielordzeniowych. Wystarczy załadować pakiet równoległego

library("parallel") 

i sprawdzeniu powiązanych winiety

vignette("parallel") 
+0

Bootstrapping za pośrednictwem bootowania mojego pakietu również jest interesujący i jest objaśniony w tym pliku. – MistereeDevlord

+0

@MistereeDevlord Ah thanks. Nie wiem, jak to przegapiłem. – csgillespie

41

Mam system podstawowy używam gdzie parallelize moje programy na pętli „for”. Ta metoda jest prosta, gdy zrozumiesz, co należy zrobić. Działa to tylko w przypadku komputerów lokalnych, ale wydaje się, że właśnie tego szukasz.

Musisz tych bibliotek zainstalowanych:

library("parallel") 
library("foreach") 
library("doParallel") 

Najpierw trzeba utworzyć klastra obliczeniowego. Zwykle robię inne rzeczy podczas uruchamiania równoległych programów, więc lubię zostawić je otwarte. Funkcja "detectCores" zwróci liczbę rdzeni w twoim komputerze.

cl <- makeCluster(detectCores() - 1) 
registerDoParallel(cl, cores = detectCores() - 1) 

Następnie wywołaj pętlę for za pomocą komendy "foreach" wraz z operatorem% dopar%. Zawsze używam opakowania "try", aby upewnić się, że wszelkie iteracje, w których operacja się nie powiedzie, są odrzucane i nie zakłócają w inny sposób dobrych danych. Będziesz musiał podać parametr ".combine" i przekazać niezbędne pakiety do pętli. Zauważ, że "i" jest definiowane za pomocą znaku równości, a nie operatora "w"!

data = foreach(i = 1:length(filenames), .packages = c("ncdf","chron","stats"), 
       .combine = rbind) %dopar% { 
    try({ 
     # your operations; line 1... 
     # your operations; line 2... 
     # your output 
    }) 
} 

Kiedy skończysz, oczyścić z:

stopCluster(cl) 
0

Jeśli zrobić wiele operacji macierzowych i używasz systemu Windows można zainstalować revolutionanalytics.com/revolution-r-open za darmo, a to przychodzi z biblioteki intel MKL, które umożliwiają wykonywanie wielowątkowych operacji macierzowych. W systemie Windows, jeśli weźmiesz pliki libiomp5md.dll, Rblas.dll i Rlapack.dll z tej instalacji i zastąpisz te w dowolnej wersji R, której chcesz użyć, będziesz miał operacje macierzy wielowątkowej (zazwyczaj masz 10-20-krotne przyspieszenie do operacji macierzowych). Lub możesz użyć Atlasa Rblas.dll z prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/binary/windows/x64, który również działa na 64-bitowym R i jest prawie tak szybki jak te MKL. Zauważyłem, że to najłatwiejsza rzecz, aby radykalnie zwiększyć wydajność R w systemach Windows. Nie wiem, dlaczego nie są tak standardowe w instalacjach R Windows.

W Windows wielowątkowość niestety nie jest dobrze obsługiwany w R (chyba, że ​​używasz OpenMP via Rcpp) i dostępny SOCKET-based parallelization on Windows systems, e.g. via package parallel, is very inefficient. On POSIX systems things are better as you can use forking there. (pakiet multicore Jest wierzę najskuteczniejszego jeden). Możesz również spróbować użyć pakietu Rdsm do wielowątkowości w modelu z pamięcią dzieloną - Mam wersję na moim githubie, która ma nieoznaczoną flagę -unix i powinna działać również w systemie Windows (wcześniej Windows nie był obsługiwany jako zależność bigmemory podobno nie „t działać w systemie Windows, ale teraz wydaje się to robi):

library(devtools) 
devtools::install_github('tomwenseleers/Rdsm') 
library(Rdsm) 
Powiązane problemy