王先生举手了。
“小吕,我问一个具体问题。双核心,怎么工作?”
吕辰走到黑板前,画了两个并排的方块,之间用双箭头连接。
“核心a,核心b。内部结构一样,都是宋教授设计的‘控+算’五十六单元架构。但运行时,它们的角色不同。”
他用教鞭指着核心a。
“核心a,是主计算核心。运行主程序,承担百分之九十的浮点运算量。它的指令流由自己的控制芯片解读,五十六个运算单元满负荷运转。”
他把教鞭移到核心b。
本小章还未完,请点击下一页继续阅读后面精彩内容!
“核心b,是协同监控核心。它的工作分三班倒。”
“第一班,当核心a在计算时,核心b在预取数据。磁盘阵列下一批数据往哪里送,核心b提前调度好。等核心a算完当前这批,数据已经在缓存里等着了。”
“第二班,当核心a完成一批计算,核心b在实时校验。用预设的简单模型,快验算核心a的结果是否在合理范围,防止‘差之毫厘谬以千里’。”
“第三班,当核心a闲置,比如等待io的时候,核心b可以独立处理一些小任务。比如实时显示示波器上的残差曲线,或者更新电视屏幕上的状态信息。”
他放下教鞭,看着王先生。
“王先生,这就是双核心的工作模式。”
王先生点点头,又问:“时钟同步怎么解决?两个核心,一个算得快一个算得慢,怎么协调?”
吕辰在黑板上画了一个新的图。
两个核心,之间连着一个方框,标着“共享状态寄存器”。
“王先生问到了关键。时钟同步,我们采用‘主从同步+异步握手’的混合方案。”
他用教鞭指着那个方框。
“两个核心之间,不追求纳秒级的绝对同步。那太难了,成本太高。我们让它们各跑各的时钟,但通过一个共享的状态寄存器组来交换信号。”
他在那个方框旁边写上几个字:“我算完了”、“数据给你”、“可以取了”。
“核心a算完一批数据,往这个寄存器里写一个‘我算完了’。核心b看到这个信号,就知道可以来取数据了。反过来,核心b要送数据给核心a,也是先写一个‘数据给你’,核心a看到之后,来取。”
他指着两个核心之间的双箭头。
“真正的数据交换,不通过这个状态寄存器。太慢。我们专门设计一个双端口的高缓存,两个核心都能访问。谁往里面写,谁从里面读,通过刚才那个状态寄存器里的‘交通信号’来协调。”
他看着秦世襄:“秦教授,这个双端口缓存的访问仲裁逻辑,需要您帮我们设计。”
秦世襄点点头:“行。这个我们熟。”
王先生听完,沉默了十几秒。
然后他抬起头,看着吕辰。
“小吕,你这个方案,想得很细。我问完了。”
长看着吕辰,忽然笑了。
“小伙子,你今年多大?”
“二十六。”吕辰说。
长点点头:“二十六,想得比有些人六十二还清楚。”
他转过身,看向夏先生。
“夏先生,你算过没有,这个双核心,要多少钱?”
夏先生站起来,走到台上。
他拿起粉笔,在黑板上列了一个算式。
“单核心,oo万。双核心,不是简单的乘以二。有些东西可以共用,比如机柜、电源、机房。但核心芯片要两套,缓存要加倍,控制逻辑要加一个核间通信模块。”
他写下最后一行数字。
“大概,再加ooo万。总共oo万。”
他放下粉笔,看着长。
会场安静下来。
oo万。
这个数字,在年,意味着什么?
意味着可以建三座中型工厂,可以买几十台进口机床,可以给几万名工人一年工资。
周委员看着那个数字,脸色有些复杂。