计算分解
数据分解
搜索分解
递归分解
混合分解方法
针对要处理的问题灵活运动数据分解、搜索分解和递归分解
任务映射与负载均衡
在将计算分解为多个可以并行处理的子任务后,下一步是将子任务分配给可用的处理器来处理。给出一个子任务集合可用处理器集,那么怎么来判断如何分配,即建立映射的方式是最好的呢?
- 分配给每个处理器的计算任务应该均衡,这样才能减少处理器等待其他处理器处理而造成的空闲
- 不同处理器直接的交互减少
对很多的问题来说,在处理器中均匀分配计算任务并不一定能保证所有处理器都被有效的使用。对具有依赖关系的任务来说,尤其如此。比如采用递归分解的快速排序算法,递归树中每一层的计算量都是O(n),但如果我们将每一层的任务分配给一个不同的处理器,这样看起来每个处理器具有相同的计算量,但由于下层的任务需要在上层的任务结束后完成,所以,实际上这种分配导致了全局的串行计算。因此,任务之间的依赖关系是任务分配的主要约束关系,在调度的时候必须考虑这一点。
负载平衡技术
- 静态负载平衡
- 动态负载平衡
简单的选择负载平衡的原则就是:如果能提前预知任务分布规模和情况的则用静态分配,这样实现过程简单,而对于只能在任务启动后分配的任务或者是在任务执行过程中又不断产生任务的,则采用动态分配。
静态分解
数组分步策略--块分布
当数组的每个元素相关的计算是均衡的时候,我们可以采用简单的块分布策略:为每个处理器分配相同数量的数组元素。
例子:矩阵乘法
数组分步策略--块轮转分布