我有需要進入「並行化」階段的R代碼。如果我使用錯誤的條款,請原諒我。我有一個過程,只需逐個地逐個挑選個人,然後平均分配給個人。這個過程對每個人來說都是一樣的(它是一座布朗橋),我只需要爲> 300個人做這件事。所以,我希望這裏有人可能知道如何改變我的代碼,以便它可以被派生出來?或並行?或者無論這個詞是什麼,以確保我現在可以訪問的48個CPU可以幫助減少58天,這將用我的小筆記本電腦來計算。在我的腦海中,我只會發送一個人到一個處理器。讓它通過腳本運行,然後發送另一個....如果這是有道理的。如何重寫我的R代碼以進行多核處理?
以下是我的代碼。我試圖在其中發表評論,並指出我認爲代碼需要更改的地方。
for (n in 1:(length(IDNames))){ #THIS PROCESSES THROUGH EACH INDIVIDUAL
#THIS FIRST PART IS JUST EXTRACTING THE DATA FROM MY TWO INPUT FILES.
#I HAVE ONE FILE WITH ALL THE LOCATIONS AND THEN ANOTHER FILE WITH A DATE RANGE.
#EACH INDIVIDUAL HAS DIFFERENT DATE RANGES, THUS IT HAS TO PULL OUT EACH INDIVIDUALS
#DATA SET SEPARATELY AND THEN RUN THE FUNCTION ON IT.
IndivData = MovData[MovData$ID==IDNames[n],]
IndivData = IndivData[1:(nrow(IndivData)-1),]
if (UseTimeWindow==T){
IndivDates = dates[dates$ID==IDNames[n],]
IndivData = IndivData[IndivData$DateTime>IndivDates$Start[1]&IndivData$DateTime<IndivDates$End[1],]
}
IndivData$TimeDif[nrow(IndivData)]=NA
########################
#THIS IS THE PROCESS WHERE I THINK I NEED THAT HAS TO HAVE EACH INDIVIDUAL RUN THROUGH IT
BBMM <- brownian.bridge(x=IndivData$x, y=IndivData$y,
time.lag = IndivData$TimeDif[1:(nrow(IndivData)-1)], location.error=20,
area.grid = Grid, time.step = 0.1)
#############################
# BELOW IS JUST CODE TO BIND THE RESULTS INTO A GRID DATA FRAME I ALREADY CREATED.
#I DO NOT UNDERSTAND HOW THE MULTICORE PROCESSED CODE WOULD JOIN THE DATA BACK
#WHICH IS WHY IVE INCLUDED THIS PART OF THE CODE.
if(n==1){ #creating a data fram with the x, y, and probabilities for the first individual
BBMMProbGrid = as.data.frame(1:length(BBMM[[2]]))
BBMMProbGrid = cbind(BBMMProbGrid,BBMM[[2]],BBMM[[3]],BBMM[[4]])
colnames(BBMMProbGrid)=c("GrdId","X","Y",paste(IDNames[n],"_Prob", sep=""))
} else { #For every other individual just add the new information to the dataframe
BBMMProbGrid = cbind(BBMMProbGrid,BBMM[[4]])
colnames(BBMMProbGrid)[n*2+2]=paste(IDNames[n],"_Prob", sep ="")
}# end if
} #end loop through individuals
我不知道有人投了-1,但我懷疑是因爲你的代碼太複雜 - 它需要很長時間才能篩選出來。你能給我們一個只有10-20行長的簡化版本,還有完整的R語法,但是能給出你想要做什麼的想法?另外,你能否告訴我們更多關於你的計算機設置 - 多核,緊密耦合的機器,......?你有什麼想法(請參閱http://cran.r-project.org/web/views/HighPerformanceComputing.html上的高性能任務視圖) –
Seconding Brian。不要讓我們做你所有的工作。只需向我們展示您需要進行並行處理的步驟,我們就可以爲您提供幫助。 – Maiasaura
哎呀,我打算輸入Ben。抱歉! – Maiasaura