The parallel package - parApply

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

Colin Gillespie

Jumping Rivers & Newcastle University

แพ็กเกจ parallel

  • เป็นส่วนหนึ่งของ R ตั้งแต่ปี 2011
    library("parallel")
    
    • รองรับทุกแพลตฟอร์ม: ใช้งานได้บน Windows, Linux, Mac
    • มีฟังก์ชันมาตรฐานเวอร์ชันขนาน
การเขียน R Code อย่างมีประสิทธิภาพ

ฟังก์ชัน apply()

  • apply() ทำงานคล้าย for loop

    • ใช้ ฟังก์ชันกับแต่ละแถว/คอลัมน์ของเมทริกซ์
  • เมทริกซ์ 10 คอลัมน์ 10,000 แถว:

m <- matrix(rnorm(100000), ncol = 10)
  • apply เป็นระเบียบกว่า for loop
res <- apply(m, 1, median)
การเขียน R Code อย่างมีประสิทธิภาพ

แปลงโค้ดเป็นแบบขนาน

  • โหลดแพ็กเกจ
    • ระบุจำนวนคอร์
    • สร้าง cluster object
    • เปลี่ยนไปใช้ parApply()
    • หยุด!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
การเขียน R Code อย่างมีประสิทธิภาพ

ข้อควรระวัง

Lewis Carroll เคยกล่าวไว้ว่า

ยิ่งรีบ ยิ่งช้า

  • บางครั้งการประมวลผลแบบขนานกลับช้ากว่า เพราะมีต้นทุนการสื่อสารระหว่างเธรด
# Serial version
apply(m, 1, median)
# Parallel version
parApply(cl, m, 1, median)
  • ควร benchmark ทั้งสองวิธีเปรียบเทียบกัน
การเขียน R Code อย่างมีประสิทธิภาพ

มาฝึกกันเถอะ!

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

Preparing Video For Download...