algorithm - 将 4 步 PCAM(福斯特方法)应用于并行算法设计的示例?
问题描述
Foster 的方法论有 4 个步骤来设计并行算法
分区
沟通
集聚
映射
我遇到的许多例子都采用了非常数学的方法。虽然我可以理解数学是必不可少的,但我想知道是否有一种更简单的方法可以向非计算机科学的人解释 PCAM 方法?
解决方案
假设您要去超市买些杂货,并且您有一个合作伙伴,在这种情况下,您的计算机有两个处理器或两个线程(您和您的合作伙伴)。
首先,我们将问题划分为任务:
- 创建购物清单
- 开车去超市
- 获取列表中的所有项目
- 支付物品
- 开车回家
- 存放所有物品
- 停车(假设车库离房子很远)
然后你定义通信
- 为了创建购物清单,每个处理器将检查房子是否缺少什么,并会不时聚集在一起以合并清单
- 在超市里,每个加工者都会去拿一些商品,然后聚集在购物车上,从列表中选择另一件商品,这样没有加工者会同时去寻找相同的商品
- 当一个处理器存储物品时,另一个去停车,当处理器回来时,它可能有助于存储仍然剩下的物品
任务的聚集(不幸的是,我已经将它们描述为聚集)
映射
- 你检查一些项目,你的伙伴检查其他
- 任何处理器都开车去超市(但另一个一起去)
- 你去拿一些物品,你的伴侣得到一个不同的物品,直到清单完成
- 任何处理器都为货物付款(希望是您的合作伙伴)
- 任何处理器驱动器返回以将处理器留在家中存储物品
- 驾驶员处理器去停车
- 非司机处理器开始入库
- 驱动处理器返回并检查还剩下哪些货物并帮助存储货物
这完全是非数学的,是我能想到的最好的例子,任何愿意理解该方法的非计算机科学人士都可能掌握这个想法(我希望)。
干杯!
推荐阅读
- python - 小于 x 的 n 的最大倍数
- python - Scrapy splash spider 不跟随链接来获取新页面
- linux - 为 linux i686-elf 交叉编译 GCC
- ruby - Ruby 返回声明
- sql-server - 仅当所有其他行都满足条件时才更新行值
- selenium-webdriver - 使用不同的用户运行 Chrome -Katalon 和 groovy
- java - 我可以用 Selenium 获得这个输入元素吗?
- amazon-ec2 - 在负载均衡器日志中禁用 aws ec2 Ip 捕获
- spring - 如何为自定义 JPQL 查询使用规范
- python - 如何接收使用 CANard 库的 python 发送的 CAN 帧?