陈教授继续说:“这个问题,年后我让研究生专门查资料。你们做工程的有个说法,磨刀不误砍柴工。数据结构没想好,后头全是坑。”
吕辰又说:“还有一个问题。工程师坐在终端前面,敲一个命令,等半天才有反应,这也不行。”
“什么命令要等半天?”
“比如查一个单元的参数。标准单元库有四百多个单元,每个单元有几十个参数。如果存得不好,查一个参数要扫描整个库,那就慢了。工程师翻手册只需要几秒钟,计算机不能比手册还慢吧?”
陈教授若有所思:“你是说响应度?”
“对。”
吕辰说,“用户等不起。翻手册是几秒钟,计算机如果做不到几秒钟,人家还不如翻手册。所以数据组织方式必须考虑‘怎么查得快’,不能每次都从头扫到尾,得有索引,得能直接定位。”
陈教授笑了,在纸上画了一个树状图,又画了一个格子图。
“你这个问题,就是索引和检索。树结构、哈希表,都是为了让计算机不用扫遍所有数据就能找到目标。你把图书馆的卡片目录搬过来就行,按型号建一个索引,按功能建一个索引,按参数建一个索引。想查什么,先查索引,再取数据,不用扫遍整个库。”
他在哈希表旁边写了两个字:o(1)。
“这就是数学上的常数时间,不管库有多大,查一次的时间是一样的。你要的低延迟,就是这个。”
吕辰接着追问:“还有一个问题,算得慢。”
“算什么?”
“仿真。一个与非门单元,跑一遍仿真,可能要几分钟。四百多个单元,每个跑一遍,就是几十个小时。这还只是一个版本。工程师改一版,又要重新跑。”
陈教授放下铅笔,靠在椅背上:“你是说吞吐率?高吞吐?”
“对。”
吕辰说,“不能让大家排队等着。得让机器同时跑多个仿真,a工程师的与非门在跑,b工程师的或非门也在跑,互不干扰。这就是您刚才说的并,但不是‘数据并’,是‘计算并’,多个人同时用,机器不能闲下来。”
陈教授想了想:“这个问题,比前两个复杂。前两个是‘怎么存’‘怎么查’,这个是‘怎么调度’。多个任务同时提交,谁先算、谁后算、怎么分配算力。如果机器够多,还可以并行算,一个任务拆成几块,几台机器同时算,算完了再拼起来。”
他在纸上画了一个任务队列的图。
“这个在数学上叫调度算法。我们要的是单位时间内处理的任务尽可能多。但不是越多越好,还要考虑每个任务的等待时间。这就是权衡。”
吕辰最后说:“还有一个问题,也是最头疼的。”
陈教授看着他。
吕辰说:“集成电路设计,不是一个人干的活。有人画版图,有人跑仿真,有人做测试。版图画好了,仿真模型要跟着改;仿真模型改了,测试向量也要跟着改。这些数据是连着的,这边改了,那边不知道,就乱了。”
陈教授坐直了身子:“你是说——模型耦合?”
“对。”
吕辰说,“版图、仿真模型、测试向量,是同一个单元的不同侧面。它们应该是一体的,改版图的时候,系统应该提醒仿真模型可能也要改;跑仿真的时候,系统应该自动用最新的版图数据。不能这边改完了,那边还在用旧的。”
陈教授沉默了一会儿,站起来走到书架前,抽出一本书翻了翻,又放回去。
他转过身,看着吕辰:“你这个问题,比前面几个都深。前面是‘怎么存’‘怎么查’‘怎么算得快’,这个是‘怎么让不同的数据保持同步’。”