哪些问题适合并行计算

高效 R 代码写作

Colin Gillespie

Jumping Rivers & Newcastle University

做饭类比

多一双手

厨师太多

太多厨师把汤搞砸

高效 R 代码写作

并行运行

  • 并非所有分析都能用多核
    • 许多统计算法只能用单核

那么并行计算能帮到哪里?

高效 R 代码写作

蒙特卡罗模拟

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • 8 核机器
    • 每核一条模拟
    • 末尾合并结果
  • "尴尬并行"(易并行)
高效 R 代码写作

并非一切可并行

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 代码写作

经验法则

循环能否正着和倒着都运行?

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

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • 两个循环得到相同结果
  • 因此可并行运行循环
高效 R 代码写作

经验法则

循环能否正着和倒着都运行?

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 代码写作

Vamos praticar!

高效 R 代码写作

Preparing Video For Download...