algorithm - 将 4 步 PCAM(福斯特方法)应用于并行算法设计的示例?

标签 algorithm optimization design-patterns parallel-processing openmp

Foster 的方法论有 4 个步骤来设计并行算法

  • 分区
  • 通讯
  • 集聚
  • 测绘

  • 我遇到的许多例子都采用了非常数学的方法。虽然我可以理解数学是必不可少的,但我想知道是否有一种更简单的方法可以向非计算机科学的人解释 PCAM 方法?

    最佳答案

    假设您要去超市买些杂货,并且您有一个合作伙伴,在这种情况下,您的计算机有两个处理器或两个线程(您和您的合作伙伴)。

    首先,我们将问题划分为任务:

  • 创建购物 list
  • 开车去超市
  • 获取列表中的所有项目
  • 为元素付款
  • 开车回家
  • 存放所有元素
  • 把车停好(假设车库离房子很远)

  • 然后你定义通信
  • 为了创建购物 list ,每个处理者都会检查房子是否缺少什么,并且会不时聚集在一起以合并 list
  • 在超市中,每个加工者都会去拿一些商品,然后聚集在购物车上从列表中选择另一个商品,这样没有加工者会同时去寻找相同的商品
  • 当一个处理器存储元素时,另一个去 parking ,当处理器回来时,它可能有助于存储仍然剩下的元素

  • 任务的聚集(不幸的是,我已经将它们描述为聚集)

    映射
  • 你检查一些项目,你的伙伴检查其他的
  • 任何处理器都开到超市(但另一个一起去)
  • 你去拿一些元素,而你的伴侣得到一个不同的元素,直到列表完成
  • 任何处理商为 cargo 付款(希望是您的合作伙伴)
  • 任何处理器都开车回来,将处理器留在家里存储元素
  • 驱动处理器去 parking
  • 非驱动处理器开始入库
  • 驱动处理器返回并检查还剩下哪些 cargo 并帮助存储 cargo

  • 这完全是非数学的,是我能想到的最好的例子,任何愿意理解该方法的非计算机科学人士都可以掌握这个想法(我希望)。

    干杯!

    关于algorithm - 将 4 步 PCAM(福斯特方法)应用于并行算法设计的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840569/

    相关文章:

    r - 为什么 r 中关于生成 Gamma 随机变量的代码没有返回预期的输出?

    JavaScript - 这个硬币找零算法有什么问题

    数学编程优化

    c# - 如何代码重用apsx?

    php - 处理复杂的数据结构值

    mysql - 如何找到经常一起玩的玩家组

    c# - 我能以某种方式整理这个(过度使用吗?)泛型?

    jquery - 前端代码的 BDD?

    python - 如何使用 Python 提高我在填补时间序列和数据列表空白方面的表现

    JavaScript 处理