Java教程

并行编程——Foster设计方法

本文主要是介绍并行编程——Foster设计方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Foster设计方法

  • 定义
  • Foster四步
    • 1. 划分
    • 2. 通信
    • 3. 聚集
    • 4.映射

定义

Foster设计方法由lan Foster提出,它是一个由四步构成的并行算法设计过程。Foster设计方法中的四步为划分、通信、聚集和映射。

Foster四步

1. 划分

为了发现并行算法的更多并行性,需要将计算和数据划分成许多小片。

域分解是一种并行程序设计方法,我们通常考虑程序中最大和最频繁访问的数据,先将数据分解成片,再考虑将计算和数据联系起来。

功能分解为域分解的补充策略。功能分解常常生成通过流水实现并发的任务的集合。

好的分解应当:

  • 原始任务数应当比处理器数高出一个数量级。
  • 冗余数据和冗余计算结构存储最小化。
  • 原始任务的大小大概相同。
  • 任务数是问题规模的一个增量函数。

2. 通信

并行算法的通信方式分为局部通信和全局通信两种。当一个任务为执行某个计算而需要来自少数其它任务的数据时使用局部通信,当一个任务为执行某个计算而需要来自大量其它任务的数据时使用全局通信。

好的通信应当:

  • 平衡任务间的操作数。
  • 每个任务仅仅与少数的邻居进行通信。
  • 任务能够并发地执行它们的通信。
  • 任务能够并发地执行它们的计算。

3. 聚集

考虑将原始任务合并成较大的任务,以减少并行开销的量。可以考虑将发送任务与接收任务合并以减少通信开销,可以考虑将发送任务组和接收任务组合并以减少任务间通信条数。发送相同数据量的少量长消息比多数短消息花费时间更短,因为每次消息发送都有一个消息启动的开销。
要维持程序并行的可拓展性,使得并行程序不需要为硬件的变化而重新设计。
减少软件开发的工程量,聚集使得可以利用更多原有的串行代码。

好的聚集应当:

  • 增加并行算法的局部性。
  • 复制的计算比它们所替代的通信花费时间要少。
  • 复制的数据总量足够小,使得算法具有可拓展性。
  • 聚集后的任务有相似的计算和通信开销。
  • 任务数是问题规模的一个增函数。
  • 任务数要尽可能少,但至少要和处理器的数目一样多。
  • 合理平衡聚集所带来的好处和修改现行串行代码所带来的好处。

4.映射

映射即将任务分配给处理器的过程。映射的目标是最大化处理器的利用率和最小化处理器之间的通信。

好的映射应当:

  • 考虑一个任务对应一个处理器和多个任务对应一个处理器的情况。
  • 已经评估了静态和动态地将任务分配给处理器。
  • 如果已经选择了将任务动态地分配给处理器,则分配者不是性能的瓶颈。
  • 如果已经选择了将任务静态地分配给处理器,则任务数与处理器数的比不低于10:1。
这篇关于并行编程——Foster设计方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!