并行计算 - 并行原语
一、总论
在并行编程中,除了 “互斥” 这个原语外(一般是采用 “锁” 来实现),也就是不同的任务不能同时做一件事情。还存在 “依赖(dependency)” 这个原语,这个原语描述的是有些任务必须在另外的一些任务后面开始,也就是虽然任务基本上都可以并行异步的执行,但是有些时候存在一些依赖使得任务需要按照一定的次序来执行。
依赖可以被抽象成一种图结构,其中节点是任务,而边是任务之间的依赖关系。但是图结构其实并不好在编程中使用,所以我们又用 event ,信号量等抽象简化了这种图结构。我理解其实是用生产者消费者模型来改写了图结构,构成了一种 “以依赖关系为中心” 的编程模型。
Barrier 或说者同步,我觉得其实也是一种依赖关系,它指的是同一个 batch 中的任务,必须依赖于其他 batch 任务的结束才能结束。
当涉及互斥时,涉及到的术语是 lock, unlock, mutex ,而涉及到依赖是术语是 event, wait, signal, notify, barrier 等。之前我只重视了互斥的学习,而对于同步语义,则非常忽视。
