ปัญหาแบบใดที่ได้ประโยชน์จากการประมวลผลแบบขนาน

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

Colin Gillespie

Jumping Rivers & Newcastle University

การทำอาหาร

มือเพิ่มอีกคู่

พ่อครัวมากคนเกินไป

พ่อครัวมากคนเกินไปทำให้ซุปเสีย

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

การรันแบบขนาน

  • ไม่ใช่ทุกการวิเคราะห์ที่ใช้ประโยชน์จากหลายคอร์ได้
    • อัลกอริทึมทางสถิติหลายตัวใช้ได้เพียงคอร์เดียว

แล้วการประมวลผลแบบขนานช่วยได้ที่ไหนบ้าง?

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

Monte-Carlo simulations

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • เครื่องที่มี 8 คอร์
    • รันการจำลองหนึ่งครั้งต่อคอร์
    • รวมผลลัพธ์เมื่อเสร็จสิ้น
  • Embarrassingly parallel
การเขียน R Code อย่างมีประสิทธิภาพ

ไม่ใช่ทุกอย่างที่รันแบบขนานได้

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
x[8] = x[7] = ... x[2] = x[1] = 1
  • รันแบบขนานได้ไหม?
    • ไม่ได้
      • ลำดับการประมวลผลในโหมดขนาน ไม่สามารถ คาดเดาได้
      • จะได้คำตอบผิด เพราะ x[3] อาจถูกประมวลผลก่อน x[2]
การเขียน R Code อย่างมีประสิทธิภาพ

กฎเบื้องต้น

ลูปรันไปข้างหน้าและย้อนกลับได้หรือไม่?

for(i in 1:8)
    sim[i] <- monte_carlo_simulation()

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • ทั้งสองลูปให้ผลลัพธ์เหมือนกัน
  • จึงรันลูปแบบขนานได้
การเขียน R Code อย่างมีประสิทธิภาพ

กฎเบื้องต้น

ลูปรันไปข้างหน้าและย้อนกลับได้หรือไม่?

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
for(i in 8:2)
    x[i] <- x[i-1]
  • ทั้งสองลูปให้ผลลัพธ์ต่างกัน
    • ลูปแรก: x[8] = x[7] = ... = 1
    • ลูปที่สอง: x[8] = x[7] = 7
  • ใช้การประมวลผลแบบขนานไม่ได้

จำไว้ว่า: ถ้ารันลูปย้อนกลับแล้วได้ผลเหมือนเดิม ก็ น่าจะ ใช้การประมวลผลแบบขนานได้

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

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

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

Preparing Video For Download...