เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การจับเวลา parSapply()

การรันเกมลูกเต๋าเป็นตัวอย่างของงานแบบ embarrassingly parallel การจำลองประเภทนี้มักจะให้ความเร็วที่เพิ่มขึ้นอย่างเห็นได้ชัด (แม้ไม่ใช่ทุกกรณี) เช่นเดิม สามารถใช้ microbenchmark() หรือ system.time() ได้ เพื่อความเรียบง่าย แบบฝึกหัดนี้จะใช้ system.time()

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การเขียน R Code อย่างมีประสิทธิภาพ

ดูคอร์ส

คำแนะนำการฝึกหัด

ฟังก์ชัน play() ถูกกำหนดไว้ใน workspace แล้ว สมมติว่าต้องการเล่นเกมหนึ่งแสนครั้ง

  • กำหนดให้ no_of_games มีค่าเป็น 1e5
  • ใช้ system.time() เพื่อจับเวลาการเรียก play() แบบ serial
    • เรียก sapply() โดยส่ง 1:no_of_games และฟังก์ชัน wrapper play() เป็นอาร์กิวเมนต์
    • เก็บผลลัพธ์ไว้ในตัวแปร serial
    • ครอบการเรียกนี้ด้วย system.time() เพื่อจับเวลา
  • สร้าง cluster object แบบ 4 core และ export ฟังก์ชัน play() ไปยัง cluster
  • ใช้ system.time() เพื่อจับเวลาการเรียก play() แบบ parallel
    • ปรับโค้ดที่ใช้สร้าง serial ให้ทำงานแบบ parallel แทน

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# 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)
แก้ไขและรันโค้ด