仓库源文

.. Kenneth Lee 版权所有 2020

:Authors: Kenneth Lee :Version: 1.0

名称内涵的发展


本文为一位伙伴理清名称的内涵是被什么东西驱动的。他在看这个文本的时候:

    source/认识鲲鹏920:一个服务器SoC/总线.rst · Kenneth-Lee-2012/从鲲鹏920了解现代服务器实现和应用_公开 - 码云 Gitee.com

对这里提到的NoC到底应该是Network of Chip还是On Chip Bus有疑问。对于这个问题,我 们首先会问到这么一个问题:谁是定义这些名字的权威?

这个问题没法回答。

计算机几乎是最缺乏名称权威的一个地方了,因为计算机的工作本身,就是“重新发明名称 ”。对于这个NoC还是OCB的问题,我们理一下这个大致的发展过程:

一开始,我们把CPU做成一个集成电路(IC),叫他一片Chip(借用了它原始的,“小片片” 的含义:a small usually thin and flat piece (as of wood or stone) cut, struck, or flacked off。

然后我们把这个Chip装到电路板上,和内存,设备连在一起,这些连接的电路,我们叫它 Bus,这里也用了它最初的含义:公共的,按一定的路线和节奏把人运来运去的那个装置: a large motor vehicle designed to carry passengers usually along a fixed routed according to a schedule。

原始定义基本上都是“类比”出来的。

好了,我们现在技术要发展,把Chip和外设分开做,Bus走线长,不稳定,性能不高,人们 开始寻求不同的解决方案,比如有人做了这样的一个设计: https://ieeexplore.ieee.org/document/5739051​ieeexplore.ieee.org

这是把原来作为外部连线的Bus,做到了Chip的里面,这里这个名字就转义了,我们原来表 达了两个概念:

Bus是Chip间运送数据的连线Bus是CPU和外设间运送数据的连线

但现在Bus的概念要走两个分叉了:你要不认为你是Chip间的连线,要不认为是CPU和外设 间的连线。原来这两个概念重叠,但现在现实就是这两者被新的设计(现实)分开了。

你当然可以换一个名字,废弃掉原来Bus的概念,比如这个IEEE的论文里面,作者就用了新 的名字,他不说这是Bus,他说这是Network,像渔网一样关联的东西:A fabric or structure of cords of wires that cross at regular intervals and are knotted or secured at the crossing。

但你如何处理你原来在CPU里面那些细节的概念呢?CPU原来有个设计,比如io指令把数据 送到Bus上去。你是不是需要把里面这个概念全部改掉,全部叫Network呢?

如果这样,如果我再把这个Network用光纤拉远呢?

所以,现实就是,这个地方名字就是会分裂,对于CPU来说,这个东西还是叫Bus,你外面 ,喜欢叫Network on Chip,还是System Bus,你爱咋地咋地,你给我保持原来的概念不变 就可以了。这就叫“抽象”和“封装”。

但这不是全部的故事,你以为你的CPU可以躲在自己的概念空间里,抽象和封装的背后不出 来吗?是,你可以不出来,但世界会抛弃你。比如说,我现在是一条CC的总线,我可以给 你抽象,让你感觉不到总线上有Cache,问题是,你不知道你的访问是有Cache的,你的软 件就不会按局部性原理来组织逻辑,你这种CPU就会被其他感知CC的CPU所淘汰。你的概念 空间就不存在了,而感知CC的CPU的概念空间才活下来,这个概念空间中还是有原来CPU的 概念(比如香农结构带来的代码顺序性),但很多概念已经转换了。这就叫“自今及古,其 名不去,以阅众甫”。

所以,想固定概念是不可能的,除非事物不发展,特别是对于计算机来说。那么驱动这些 名字的变化是什么呢?是概念空间的依赖强度。在上面这个例子中,CPU中大量使用Bus这 个概念,要放弃或者更改这个概念,就要废弃整个CPU的概念空间,这时,我们就面对这两 个选择:

重新发明CPU的概念空间抽象Bus的概念空间

这两个取舍,就决定了我们走哪条路,这也是架构设计一开始进行概念空间建模首先需要 解决的问题。一个系统,要人力可控,就必然需要概念空间自洽,否则运作下去,必然和 你预期不一致。

重复一遍:世界的运作不需要符合概念空间(道法自然),但要改造(控制)世界,你的 概念空间必须和世界一致。

而且为了这个一致,你的概念空间不能精确,必须粗糙,否则你就贴合不了这个世界(自 然),你也从而失去了对世界的控制。

这就是为什么善为士者,豫兮若冬涉川,犹兮若畏四邻,俨兮其若客,涣兮若冰之将释, 孰兮其若朴,旷兮其若谷,浑兮其若浊……你不能离得太近,也不能离得太远。你必须一直 看着“自然”的反馈,动态调整你的方向。没有可以直接预判的模型,所以前识者,道之华 而愚之始也。是以大丈夫处其厚不居其薄,处其实不居其华,多迈两步自以为明白一切的 ,都会遭雷劈。

回到最初的问题,NoC是“SoC设计的基础”,还是Bus On Chip是“SoC设计的基础”,这个问 题在一个通用的概念空间上是重叠的,因为在这个空间上我们需要足够粗糙。但在鲲鹏920 上,NoC是比Bus On Chip更准确的表述。因为从基本概念上来说,鲲鹏的总线是可以跨 Chip的,不仅仅在Chip内部,这种情况不但出现在鲲鹏上,也出现在我们认识的几乎所有 的现代服务器芯片上,所以,NoC在这上下文中是更好的表达。