Đ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ả
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_gamesbằng1e5. - Dùng
system.time()để đo thời gian gọi lặpplay()theo kiểu tuần tự.- Gọi
sapply()với1:no_of_gamesvà hàm baoplay(). - Gán kết quả vào
serial. - Bao lời gọi này trong
system.time()để đo thời gian.
- Gọi
- 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ặpplay()theo kiểu song song.- Biến đổi đoạn mã bạn đã dùng để tạo
serialsao cho chạy song song.
- Biến đổi đoạn mã bạn đã dùng để tạo
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)