Những bài toán nào hưởng lợi từ tính toán song song

Viết mã R hiệu quả

Colin Gillespie

Jumping Rivers & Newcastle University

Nấu ăn

Có thêm một tay phụ

Quá nhiều đầu bếp

Quá nhiều đầu bếp làm hỏng nồi súp

Viết mã R hiệu quả

Chạy song song

  • Không phải phân tích nào cũng tận dụng được nhiều lõi
    • Nhiều thuật toán thống kê chỉ dùng một lõi

Vậy tính toán song song có thể giúp ở đâu?

Viết mã R hiệu quả

Mô phỏng Monte-Carlo

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • Máy 8 lõi
    • Mỗi lõi chạy một mô phỏng
    • Gộp kết quả ở cuối
  • Song song hoàn hảo
Viết mã R hiệu quả

Không phải thứ gì cũng chạy song song

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
x[8] = x[7] = ... x[2] = x[1] = 1
  • Chúng ta có thể chạy cái này song song không?
    • KHÔNG
      • Nhưng thứ tự đánh giá trong tính toán song song không thể dự đoán
      • Bạn sẽ nhận sai kết quả, vì x[3] có thể được tính trước x[2]
Viết mã R hiệu quả

Nguyên tắc kinh nghiệm

Vòng lặp có thể chạy xuôi và ngược không?

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

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • Cả hai vòng lặp cho cùng kết quả
  • Vậy có thể chạy song song
Viết mã R hiệu quả

Nguyên tắc kinh nghiệm

Vòng lặp có thể chạy xuôi và ngược không?

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
for(i in 8:2)
    x[i] <- x[i-1]
  • Hai vòng lặp cho kết quả khác nhau
    • Vòng đầu: x[8] = x[7] = ... = 1
    • Vòng sau: x[8] = x[7] = 7
  • Không thể dùng tính toán song song

Ghi nhớ: Nếu bạn có thể chạy vòng lặp đảo ngược, có lẽ bạn dùng được tính toán song song.

Viết mã R hiệu quả

Cùng luyện tập nào!

Viết mã R hiệu quả

Preparing Video For Download...