3.205. 名称内涵的发展
本文为一位伙伴理清名称的内涵是被什么东西驱动的。他在看这个文本的时候:
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/5739051ieeexplore.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在这上下文中是更好的表达。