Bắt đầu ngayBắt đầu miễn phí

Đo thời gian với parSapply()

Chạy trò chơi tung xúc xắc là dạng embarrassingly parallel. Những mô phỏng kiểu này thường (nhưng không phải luôn luôn) cho tốc độ tăng đáng kể. Như trước, bạn có thể dùng microbenchmark() hoặc system.time(). Để đơn giản, trong bài này ta sẽ dùng system.time().

Bài tập này là một phần của khóa học

Viết mã R hiệu quả

Xem khóa học

Hướng dẫn bài tập

Hàm play() đã được định nghĩa sẵn trong workspace của bạn. Giả sử bạn muốn chơi một trăm nghìn lượt.

  • Gán no_of_games bằng 1e5.
  • Dùng system.time() để đo thời gian gọi lặp play() theo kiểu tuần tự.
    • Gọi sapply() với 1:no_of_games và hàm bao play().
    • Gán kết quả vào serial.
    • Bao lời gọi này trong system.time() để đo thời gian.
  • Tạo một đối tượng cluster 4 lõi và export hàm play() sang đó.
  • Dùng system.time() để đo thời gian gọi lặp play() theo kiểu song song.
    • Biến đổi đoạn mã bạn đã dùng để tạo serial sao cho chạy song song.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# 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)
Chỉnh sửa và Chạy Mã