在西宁,我碰见了季宇,他也是CCF优博。 他一见到我就提了很多问题:那么复杂的系统,怎么可能就用分形来刻画呢?你在寒武纪真的是这么做的? 时间有限,我和他解释说,分形是并行计算里非常基础的本质特征,而不是我们刻意制造的概念。 在当日的新人脱口秀环节中,我也重新为分形做了一个新定义:分形(并行计算)是问题的一种基本性质,指能够用一段有限的程序控制任意规模的并行计算机、在有限时间内计算任意大的问题。
不止是季博士,很多同行也都有类似的疑惑。不能服人,是因为我的工作仍然还在非常初级的阶段。我必须承认,现在对一线开发者而言,分形计算系统的概念实践意义有限。 但是,我有一言(确信):如果你的系统不是分形的,那你要小心了!
分形的基本要求是用同一套程序跑在任意大的机器上。不分形,对一个并行机各部分分别编程,会引来很奇怪的情况: 额外的程序会根本性地让计算过程变质。因为在计算理论中,它们可以作为建议串。理论计算机学家立刻就明白这是什么含义了,我将对工程师们再多解释一点。
以MPMD模型为例。
既然有
- 输入一个图灵机的描述串
( 比特长). - 搜集并广播
. . - 并行循环,对每一个
: - 在空纸带上模拟执行
,直到停机. - 使用原子操作递增
. - 如果
,终止整个并行循环.
- 在空纸带上模拟执行
- 返回结果取决于第
个循环的模拟是完成了还是被终止了.
这个算法在有限时间内判定停机问题。
如果你的系统不允许发生这种事情(判定非递归问题;你当然不应该允许发生这种事情),那么它就已经是分形的了,即使形式上可能和我在论文中描述的不一致。 根本问题在于,超额的程序是有害的——理论上它会导致能够计算不可计算问题,实践中导致的问题有多种形式:包括我们曾经在寒武纪遇到的每年一重构即是根源于此(Cambricon-F:一种具有分形冯·诺伊曼体系结构的机器学习计算机)。 分形计算系统是在反对这种错误实践。
希望这段论述能让分形的概念更清楚一些。