Node Network
在CPU网格中编写微型汇编代码,让节点向邻居传递数值,将输入流转换为目标值,同时避免死锁。
玩法说明
你需要编程控制一个由微型计算机组成的网格。每个节点运行自己的简短指令列表,且只能与紧邻的邻居通信,通过端口传递数值——因此,一个需要穿越网格的数字必须逐节点手动中继。
- 每个节点都有一个累加器和少量指令:移动数值、加法、减法、跳转。
- 节点可以从上方、下方、左方或右方的邻居读取或写入数据,也可以与输入和输出流交互。
- 端口会阻塞。当节点向右写入时,它会等待右侧节点从其左侧读取。
- 这意味着两个节点必须在时间上达成一致,而不仅仅是数值上。
- 如果整个周期内没有任何进展,而仍有节点在等待,网格就会陷入死锁。
- 当输出流匹配关卡要求的目标时,谜题即告解决。
操作方式
- 桌面端:在每个节点的文本框中输入代码,从下拉菜单中选择关卡,然后按运行
- 手机和平板:可以运行,但强烈建议使用外接键盘来编写代码
游戏模式
- 每日挑战:基于当天日期生成的共享谜题
- 练习模式:使用“新”按钮循环生成随机输入
技巧与策略
- 先设计路由,再处理算术。大多数失败是因为数值无法到达目的地,而不是计算结果错误。
- 两个节点互相等待是典型的死锁。如果两者在读取之前都向对方写入,那么谁也无法移动。
- 尽可能保持单向流量。具有一致方向的网格比数值交叉的网格更容易推理。
- 需要时,将节点用作纯中继。仅仅传递数值是一项合法且往往必要的工作。
- 关注被阻塞的节点,而不是错误的答案。当输出停滞时,关键信息是哪个节点在等待,以及它在等谁。
你将学到什么
节点网络是一款关于消息传递和在处理器网格中避免死锁的并行编程谜题。
- 技能:并行与并发编程、消息传递、死锁避免
- 适合人群:大约9-12年级(14岁及以上)
- 致家长和老师:动手实践并发与死锁。
起源
一张由非常小的计算机组成的网格,每台计算机都运行着自己的简短指令列表,并且只能与紧挨着它的邻居通信,这就是TIS-100——Zachtronics 于2015年7月推出——它把谜题设定在一台虚构的、已经损坏的20世纪70年代机器上。
这里所教授的约束是真实的,也是并行计算的核心:在没有共享内存的情况下,一个需要穿越网格的数值,必须通过消息传递由人工一个节点一个节点地接力传送。
而正是在人工接力的过程中,你会遇到死锁——两个节点各自等待对方,双双永远停住。这是一种在白板上无法真正讲清楚的缺陷,因为全部的难点就在于,每个节点单独来看都在正确地运行。
关于节点网络
节点网络是一款关于消息传递和在处理器网格中避免死锁的并行编程谜题。它是PlayPendium内部开发的原创免费浏览器游戏。
免费的原创浏览器游戏 — 无需下载。查看全部游戏 →