Timings parSapply()
주사위 게임 실행은 매우 병렬화가 쉬운(embarrassingly parallel) 작업입니다. 이런 종류의 시뮬레이션은 보통(항상은 아니지만) 좋은 속도 향상을 제공합니다. 이전과 마찬가지로 microbenchmark() 또는 system.time()을 사용할 수 있어요. 이번 연습에서는 단순화를 위해 system.time()을 사용하겠습니다.
이 연습은 강의의 일부입니다
효율적인 R 코드 작성
연습 안내
play() 함수가 작업 공간에 정의되어 있습니다. 백만이 아니라 십만 번의 게임을 실행한다고 가정하겠습니다.
no_of_games를1e5로 설정하세요.- 직렬로
play()를 반복 호출하는 데 걸리는 시간을 측정하려면system.time()을 사용하세요.1:no_of_games와play()래퍼 함수를 사용해sapply()를 호출하세요.- 결과를
serial에 할당하세요. - 이 호출을
system.time()으로 감싸 시간을 측정하세요.
- 4코어 클러스터 객체를 만들고
play()함수를 해당 클러스터에 내보내세요. - 병렬로
play()를 반복 호출하는 데 걸리는 시간을system.time()으로 측정하세요.serial을 만들 때 사용한 코드를 병렬에 맞게 수정해 보세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Set the number of games to play
no_of_games <- ___
# Time serial version
system.time(serial <- sapply(1:___, function(i) play()))
# Set up cluster
cl <- makeCluster(___)
clusterExport(cl, "play")
# Time parallel version
system.time(par <- ___)
# Stop cluster
stopCluster(cl)