사무실에서 사용한 컴퓨터는 최근 쿼드 코어로 업그레이드되었습니다. 가끔은 R을 사용하여 명시 적 루프를 수행해야하므로 가끔 축복입니다. 결과는 하나의 논리적 인 규칙에 기반을두고 있는데, 나는 명시적인 루프가 아닌 다른 방법을 찾아 낼 방법이 없다.doSNOW를 사용하여 명시적인 루프 속도 향상 R
몇 가지 배경 정보를 보려면 때때로 약 10000-20000 행이 필요합니다.이 행은 2 열을보고 값과 일부 논리 규칙을 기반으로 새 열의 값을 생성해야합니다.
내가 더 잘 사용되지 않는 CPU 파워를 활용하기 위해doSNOW
패키지를 사용하는 것을 시도하고있다
, 나는 here에서의 예에 따라 아래와 같이 데모 스크립트를 작성했습니다 : 나는 원자와 넷북을 사용하고
library(doSNOW)
# rm(list=ls())
cl<-makeCluster(2) # I have two cores
registerDoSNOW(cl)
table <- data.frame(a=rnorm(1000),b=rnorm(1000))
process <- function(table)
{for (loop in (1:nrow(table)))
{table[loop,"c"] <- with(table[loop,], a*b)
assign("table",table,envir=.GlobalEnv)
}
}
system.time(process(table))
system.time(foreach(j=1:2) %dopar% process(table))
stopCluster(cl)
내부 CPU이 밖으로 시도하지만 결과는 이상한 : doSNOW 사용 후
system.time(process(table))
user system elapsed
2.336 0.028 2.308
system.time(foreach(j=1:2) %dopar% process(table))
user system elapsed
0.160 0.032 3.646
, 결과에 필요한 시간, 나는이 내 ATOM 넷북의 문제가 궁금하거나 한 더 오래 doSNOW를 사용하지 않고보다 나는 무엇이든 잘못 만든다. 코드?
감사합니다.
질문에 답변하지는 않지만 병렬 백엔드 (예 : MPI)를 사용하고 계신가요? – Shane
코드를 살펴 봤습니다. ** 많은 사람들을 정말로 불행하게하지 않으려면 ** 여기에있는 코드 샘플에'rm (list = ls())'를 넣지 마십시오. – Shane
이 기능이 최적화하려고하는 실제 기능입니까? 그렇다면 벡터화 된 방식으로 작성하는 것이 훨씬 낫습니다. 팁 : 나는 당신이 무언가를 잘못하고있는 가능성을 배정하는 데 사용하고 있습니다. – hadley