我们该并行化吗?

R 并行编程

Nabeel Imam

Data Scientist

我们来建一栋楼

   

在上一层之上建新楼层:串行

 

在完工结构上装窗户:并行

一栋楼在施工。楼层只能按顺序建,而窗户可并行安装。

R 并行编程

串行—并行刻度

常见计算任务按"串行—并行"刻度排列。创建新变量更靠近并行端,累积和更靠近串行端。

R 并行编程

经典数值运算

计算一百万个数的平方根

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
R 并行编程

如何并行计算平方根?

并行计算平方根的流程图。将 1 到 1,000,000 的整数分为五组,每组 200,000。

R 并行编程

如何并行计算平方根?

拆分后的数据被发送到由多个内核组成的集群。每组数字被分配给一个内核计算平方根。若所有内核都在忙,新组将等待空闲内核。

R 并行编程

如何并行计算平方根?

从各内核收集平方根并合并,得到一百万个平方根。

R 并行编程

并行化的数值运算

并行计算一百万个数的平方根

library(parallel)


my_cluster <- makeCluster(3)
start <- Sys.time() sq_roots <- parLapply(my_cluster, numbers, sqrt) end <- Sys.time()
stopCluster(my_cluster)
end - start
Time difference of 0.8416824 secs
R 并行编程

没我们想的那么快

并行计算一到一百万的平方根的流程图。

R 并行编程

没我们想的那么快

并行执行包含额外步骤。首先是拆分数据。

R 并行编程

没我们想的那么快

拆分后,需要将每个子集复制到集群内核。

R 并行编程

没我们想的那么快

计算后,需要从各内核收集输出以得到最终结果。

R 并行编程

没我们想的那么快

还需花费计算资源来协调整个流程。

R 并行编程

那么,我们该并行化吗?

对于足够复杂的任务,考虑:

优点

  • 比串行更快
  • 长期更具性价比

 

缺点

  • 需要专项编程技能(但你已具备!)
  • 内存占用高
R 并行编程

Passons à la pratique !

R 并行编程

Preparing Video For Download...