吕辰心里一动,陈教授连“强一致性”这种词都整出来了,这可是后世的规则。
陈教授继续说:“这个问题,年后我让研究生专门查资料。你们做工程的有个说法,磨刀不误砍柴工。数据结构没想好,后头全是坑。”
吕辰又说:“还有一个问题。工程师坐在终端前面,敲一个命令,等半天才有反应,这也不行。”
“什么命令要等半天?”
“比如查一个单元的参数。标准单元库有四百多个单元,每个单元有几十个参数。如果存得不好,查一个参数要扫描整个库,那就慢了。工程师翻手册只需要几秒钟,计算机不能比手册还慢吧?”
陈教授若有所思:“你是说响应速度?”
“对。”吕辰说,“用户等不起。翻手册是几秒钟,计算机如果做不到几秒钟,人家还不如翻手册。所以数据组织方式必须考虑‘怎么查得快’,不能每次都从头扫到尾,得有索引,得能直接定位。”
陈教授笑了,在纸上画了一个树状图,又画了一个格子图。
“你这个问题,就是索引和检索。树结构、哈希表,都是为了让计算机不用扫遍所有数据就能找到目标。你把图书馆的卡片目录搬过来就行,按型号建一个索引,按功能建一个索引,按参数建一个索引。想查什么,先查索引,再取数据,不用扫遍整个库。”
他在哈希表旁边写了两个字:O(1)。
“这就是数学上的常数时间,不管库有多大,查一次的时间是一样的。你要的低延迟,就是这个。”
吕辰接着追问:“还有一个问题,算得慢。”
“算什么?”
“仿真。一个与非门单元,跑一遍仿真,可能要几分钟。四百多个单元,每个跑一遍,就是几十个小时。这还只是一个版本。工程师改一版,又要重新跑。”
陈教授放下铅笔,靠在椅背上:“你是说吞吐率?高吞吐?”
“对。”吕辰说,“不能让大家排队等着。得让机器同时跑多个仿真,A工程师的与非门在跑,B工程师的或非门也在跑,互不干扰。这就是您刚才说的并发,但不是‘数据并发’,是‘计算并发’,多个人同时用,机器不能闲下来。”
陈教授想了想:“这个问题,比前两个复杂。前两个是‘怎么存’‘怎么查’,这个是‘怎么调度’。多个任务同时提交,谁先算、谁后算、怎么分配算力。如果机器够多,还可以并行算,一个任务拆成几块,几台机器同时算,算完了再拼起来。”
他在纸上画了一个任务队列的图。
“这个在数学上叫调度算法。我们要的是单位时间内处理的任务尽可能多。但不是越多越好,还要考虑每个任务的等待时间。这就是权衡。”
吕辰最后说:“还有一个问题,也是最头疼的。”
陈教授看着他。
吕辰说:“集成电路设计,不是一个人干的活。有人画版图,有人跑仿真,有人做测试。版图画好了,仿真模型要跟着改;仿真模型改了,测试向量也要跟着改。这些数据是连着的,这边改了,那边不知道,就乱了。”
陈教授坐直了身子:“你是说——模型耦合?”
“对。”吕辰说,“版图、仿真模型、测试向量,是同一个单元的不同侧面。它们应该是一体的,改版图的时候,系统应该提醒仿真模型可能也要改;跑仿真的时候,系统应该自动用最新的版图数据。不能这边改完了,那边还在用旧的。”
陈教授沉默了一会儿,站起来走到书架前,抽出一本书翻了翻,又放回去。
他转过身,看着吕辰:“你这个问题,比前面几个都深。前面是‘怎么存’‘怎么查’‘怎么算得快’,这个是‘怎么让不同的数据保持同步’。”
他走回来坐下,拿起铅笔,在纸上画了一个有向图,几个圆圈,箭头从一个指向另一个。
“这涉及到数据之间的依赖关系。A改了,B要跟着改,C也要跟着改。这种依赖关系,可以用有向图来表示。节点是数据,边是依赖关系。A指向B,表示A改了B要跟着改。”
吕辰二人凑过去看那个图,诸葛彪道:“那计算机能不能自动知道这种依赖关系?工程师改了一个单元的版图,系统自动找出所有依赖它的仿真模型和测试向量,提示这些也要更新?”
陈教授点点头:“理论上可以。但依赖关系要定义清楚,数据要能追踪来源和去向。这又回到数据结构的问题,数据不能孤立地存,要存它们之间的关系。这就是刚才说的模型耦合,不同模型之间怎么对齐、怎么同步、怎么保证一致性。”
陈教授放下铅笔,靠在椅背上,看着茶几上那张画满图的纸,沉默了好一会儿。
“诸葛、小吕,你们今天问的这几个问题,多个人同时用、查得快、算得快、数据对得上,其实是一个问题。”
吕辰二人听着。
陈教授说:“就是怎么把标准单元库的数据组织好,让计算机既能存、又能查、还能管住它们之间的关系。这不只是一个‘库’,这是一个‘知识系统’。就像图书馆不只是放书的地方,还是一个能查、能借、能管住书不丢、能知道谁借了哪本书的系统。”
本小章还未完,请点击下一页继续阅读后面精彩内容!
喜欢四合院:我是雨水表哥请大家收藏:(m.xtyxsw.org)四合院:我是雨水表哥天悦小说网更新速度全网最快。