Barbara C.

Barbara C. Specjalista ds.
Kontroli Rachunkowej
Ksiąg

Temat: Obliczenia równoległe w R

Witam,
mam do zrobienia projekt w R, który dotyczy obliczeń równoległych.
Zainstalowałam kilka pakietów: snow, snowfall, doSMP, doSNOW etc.

require(doSMP)
workers <- startWorkers(2) #Mój procesor ma 2 rdzenie
registerDoSMP(workers)
old<-getTime()
wynik=numeric(10000)
a<-foreach(icount(10000), .combine="c") %dopar% {
shapiro.test((rnorm(10))^2)$p.value
}
table(a < 0.05)
timeReport(old)


więc przyznam się, że nie rozumiem dlaczego czas obliczeniowy przy %dopar% jest taki sam jak przy %do%, skoro jedno determinuje obliczenia równoległe, a drugie sekwencyjne. Czy może to co powyżej napisałam jest w ogóle źle, a mnie tylko się wydaje, że liczę równolegle.
Muszę jeszcze stworzyć sieć tzn. połączyć 2 komputery o podobnych parametrach (rownież dwurdzeniowe procesory) kablem sieciowym i napisać program, który w R (R Studio) rozdzieli zadanie na 4ry rdzenie 2ch procesorów. Nie mam zielonego pojęcia jak to zrobić. Czy ktoś ma jakieś doświadczenie w programowaniu rownoległym w R pod Windowsem?Barbara Ciepiela edytował(a) ten post dnia 29.05.12 o godzinie 18:33
Tomasz Stokowy

Tomasz Stokowy Doktorant,
Politechnika Śląska

Temat: Obliczenia równoległe w R

Do obliczeń równoległych w R dobrze sprawdza się funkcja lapply. To pętla odpowiadająca poleceniu for które stosujesz.
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Obliczenia równoległe w R

Barbara Ciepiela:
Witam,
mam do zrobienia projekt w R, który dotyczy obliczeń równoległych.
Zainstalowałam kilka pakietów: snow, snowfall, doSMP, doSNOW etc.

require(doSMP)
workers <- startWorkers(2) #Mój procesor ma 2 rdzenie[/quote]> registerDoSMP(workers)[quote] old<-getTime()[/quote]> wynik=numeric(10000)[quote]a<-foreach(icount(10000), .combine="c") %dopar% {[/quote]> shapiro.test((rnorm(10))^2)$p.value[quote] }
table(a < 0.05)[/quote]> timeReport(old)[quote]


więc przyznam się, że nie rozumiem dlaczego czas obliczeniowy przy %dopar% jest taki sam jak przy %do%, skoro jedno determinuje obliczenia równoległe, a drugie sekwencyjne. Czy może to co powyżej napisałam jest w ogóle źle, a mnie tylko się wydaje, że liczę równolegle.
Muszę jeszcze stworzyć sieć tzn. połączyć 2 komputery o podobnych parametrach (rownież dwurdzeniowe procesory) kablem sieciowym i napisać program, który w R (R Studio) rozdzieli zadanie na 4ry rdzenie 2ch procesorów. Nie mam zielonego pojęcia jak to zrobić. Czy ktoś ma jakieś doświadczenie w programowaniu rownoległym w R pod Windowsem?

Nie umiem odpowiedzieć bezpośrednio na Twoje pytanie, ale
jeżeli używasz Linuxa najprościej będzie wykorzystać funkcję mclapply(multicore) - z pakietu multicore. Jest to zrównolegniona wersja lapply.
Na forum goldenline R była już kiedyś ciekawa i treściwa dyskusja na temat obliczeń równoległych (tytuł tamtego wątku jest trochę mylący):

http://www.goldenline.pl/forum/1991076/przyspieszenie-...

tutaj znajdziesz masę chyba wszystkie sposoby przyśpieszania R :

http://dirk.eddelbuettel.com/papers/bocDec2008introHPC...

PozdrawiamKamil Bęczyński edytował(a) ten post dnia 29.07.12 o godzinie 01:24

Następna dyskusja:

Obliczenia wykonywane w wyk...




Wyślij zaproszenie do