시작하기무료로 시작하기

Timings parSapply()

주사위 게임 실행은 매우 병렬화가 쉬운(embarrassingly parallel) 작업입니다. 이런 종류의 시뮬레이션은 보통(항상은 아니지만) 좋은 속도 향상을 제공합니다. 이전과 마찬가지로 microbenchmark() 또는 system.time()을 사용할 수 있어요. 이번 연습에서는 단순화를 위해 system.time()을 사용하겠습니다.

이 연습은 강의의 일부입니다

효율적인 R 코드 작성

강의 보기

연습 안내

play() 함수가 작업 공간에 정의되어 있습니다. 백만이 아니라 십만 번의 게임을 실행한다고 가정하겠습니다.

  • no_of_games1e5로 설정하세요.
  • 직렬로 play()를 반복 호출하는 데 걸리는 시간을 측정하려면 system.time()을 사용하세요.
    • 1:no_of_gamesplay() 래퍼 함수를 사용해 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)
코드 편집 및 실행