Microbenchmark รายได้
สมมติว่าคุณทำงานเป็น Data Analyst ให้กับร้านค้าออนไลน์แห่งหนึ่ง และได้ดึงข้อมูลยอดขายของสินค้าหลายรายการในช่วงหนึ่งเดือน ข้อมูลนี้ถูกเก็บไว้ใน workspace ในรูปแบบ list ชื่อ ls_sales โดยแต่ละ element คือ vector ของรายได้ของสินค้าแต่ละชนิด
คุณต้องการดูว่ารายได้เพิ่มขึ้นสะสมอย่างไรในแต่ละวัน ซึ่งต้องคำนวณผลรวมสะสม (cumulative sum) Base R มีฟังก์ชัน cumsum() สำหรับงานนี้อยู่แล้ว แต่คุณอยากทดสอบว่าการประมวลผลแบบขนานจะช่วยได้หรือไม่ โดยจะลองรัน cumsum() กับทุก element ใน ls_sales ทั้งแบบลำดับและแบบขนาน แล้วเปรียบเทียบผลลัพธ์ที่ได้ package parallel และ microbenchmark ถูกโหลดไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนโปรแกรมแบบขนานใน R
คำแนะนำการฝึกหัด
- ส่งเวอร์ชันแบบลำดับและแบบขนานเป็น argument ให้กับ
microbenchmark() - สร้าง cluster โดยใช้จำนวน core ทั้งหมดที่มีลบออก 2
- ใช้ cluster นั้นรัน
cumsum()กับls_salesแบบขนานด้วยparLapply() - หยุดการทำงานของ cluster เมื่อคำนวณเสร็จแล้ว
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Pass the code to microbenchmark
___
"lapply" = lapply(ls_sales, cumsum),
"parLapply" = {
# Make a cluster of all cores minus two
cluster <- ___
# Use cluster to apply in parallel
parLapply(cluster, ___, ___)
# Stop cluster
___
},
times = 3
___