“昆仑2的总线,我们计划采用分层总线架构。核心总线,点对点连接主核心和协处理器,带宽足够。存储总线,分成四个独立通道,每个通道带宽5oo兆字节每秒,四个通道并行,总带宽2g字节每秒。向量单元访问存储时,自动分配到不同的通道,避免冲突。”
他顿了顿,又补了一句。
“仲裁器也要升级。昆仑1的总线仲裁器是集中式,一个仲裁器管所有。昆仑2要改用分布式仲裁,每个向量单元有自己的仲裁逻辑,总线请求在单元之间协商解决,避免单点瓶颈。”
陈光远想了想,点了点头,坐下。
台下又有人举手了。
是哈工大的包康建教授:“陈工,昆仑2的指令集,和昆仑1兼容吗?”
陈茂林摇了摇头。
“不完全兼容。昆仑1的指令集是为21个单元、64位向量长度设计的。昆仑2是64个单元、128位向量长度,指令格式必须变。但是,我们会保持‘源代码级兼容’。也就是说,昆仑1上写的汇编程序,重新编译一下,就能在昆仑2上跑。不需要重写。”
包教授追问:“翻译器的效率呢?重新编译后的代码,性能损失多少?”
陈茂林想了想:“目标是损失不过1o%。这个目标不低,需要微程序设计师和编译器的开者紧密配合。”
包教授点了点头,没再追问。
陈茂林回到座位上。
汪涵教授站起来,走到主席台前。
他鬓角的白又多了几根,眼睛下面的青黑已经扩展到整个眼眶,显然一直在熬夜。
“同志们,下面我汇报昆仑汇编语言的设计规则。”
他翻开笔记本,念了一段。
“昆仑1机的4863条微程序,是‘机器语言’。只有极少数人能写。要让昆仑系列被全国工程师使用,必须有一套统一的汇编语言。”
他放下笔记本,走到白板前,拿起记号笔。
“昆仑1是向量机,指令集与标量机完全不同。各单位自研的小型机指令集互不兼容,工程师写一套代码,只能在特定机器上跑,重复劳动。我们要做的是,一套汇编语言,能在昆仑1上跑,能在昆仑2上跑,能在以后所有的昆仑机上跑。”
他在白板上写了三个词:可读性、正交性、可扩展性。
“第一条,可读性。汇编指令不是给机器看的,是给人看的。每条指令要有直观的助记符。工程师看到moV就知道是数据传送,看到add就知道是加法,看到Jmp就知道是跳转。不需要查手册。”
“第二条,正交性。指令格式要统一,操作数的组合要规整。不能让工程师背几十种特殊规则。比如,所有算术指令的格式都是‘op目标,源’。moV是‘moV目标,源’,add也是‘add目标,源’。格式一致,学一条就会一百条。”
“第三条,可扩展性。昆仑2之后还有昆仑3、昆仑4。汇编语言要能向后兼容。昆仑2上写的程序,到了昆仑3不能重写。所以指令编码要留余量,操作码不能塞满,要给未来预留空间。”
他在白板上画了一个表格。
“指令类型,我们分了五大类。”
“第一,数据传输。负责寄存器和存储器之间的数据搬移。”
“第二,算数运算。数数和浮点的加减乘除。”
“第三,逻辑运算。位运算和移位。”
“第四,转移控制。条件跳转、无条件跳转、子程序调用。”
“第五,输入输出。从Io端口读数据、写数据。”
他放下记号笔:“一条汇编指令,通过翻译器,对应若干条微程序。工程师写moV,翻译器自动生成取数据、送数据、存数据、更新指针的微程序序列。工程师不需要知道微程序长什么样,他只需要知道moV是干什么的。”
四机部某院的一位专家举手,他骨瘦如柴,脸上老人斑密布,站起来颤巍巍的:“小汪,翻译器的规范,和汇编语言同步制定?”
“对。”汪涵教授点了点头,“翻译器是连接‘工程师语言’和‘机器语言’的桥梁。汇编语言定了,翻译器的规范也要同步定。没有翻译器,汇编语言就是纸上谈兵。”
老专家又问:“翻译器谁来写?”
汪涵教授想了想:“‘微程序生成’‘语法分析’和‘代码优化’都由微程序设计院来写。”
老专家点了点头。
汪涵教授继续说道:“197o年底,技术白皮书定稿。1971年,翻译器原型开。1972年,在昆仑1机上验证运行。1973年,向全国布。”
他合上笔记本,看着台下。
“汇编语言的事,我就汇报到这里。”
台下掌声响起来,汪涵教授回到座位上,端起搪瓷缸子喝了一口水。
茶已经凉了,但他喝得很踏实。