第567章 跨行出手

1. 浮点乘法 FMUL

1. 浮点除法 FDIV

1. 浮点开平方 FSQRT

1. 浮点比较 FCMP

……

翻到正文,是一段用类似汇编语言写的伪代码。

FADD:

// 输入: R1 = 浮点数A, R2 = 浮点数B

// 输出: R0 = A+B

// 破坏: R3,R4,R5,R6

下面是一行行的操作步骤,有的用中文,有的用数字,有的画了箭头指向旁边的注释。

吕辰看了两页,眉头渐渐舒展开。

“赵师兄,这个写得比我想象的好多了。”

赵泽勇拿出烟发了一圈,笑道:“那是你没看后面。矩阵乘法那一章,我们写了三十几页,运算量加起来,1万多条指令。我一个一个看,眼睛都快瞎了。”

吴国华凑过来,翻到矩阵乘法那一章,看了一眼,倒吸了一口凉气。

“三层循环,每次循环调用浮点乘法和加法。这个量……跑一次矩阵乘法,午马机要算多久?”

赵泽勇竖起三根手指。

“三分钟。”

“三分钟?”吴国华皱了一下眉头,“16位矩阵,三分钟?”

“16×16的矩阵。”赵泽勇说,“我算了算,比用手工算快了几百倍。但在实际应用中,我们的温度场网格是100×200的,算一次要几个小时。”

他顿了顿:“所以我才找你们来。不是看写得对不对,是看能不能优化。少几次循环,少几次函数调用,就能省出几十秒甚至几分钟。”

吕辰合上册子。

“赵师兄,这个活我们接了。但您得给我们时间。这两天昆仑1的板卡正在做最后调试,我抽不出整块的时间。”

“不着急。”赵泽勇站起来,拿出一张纸,“你们慢慢来。我今天来找你们,不光是看这个。”

他在纸上写了一个公式。

本小章还未完,请点击下一页继续阅读后面精彩内容!

那是移动平均滤波的表达式。

“我昨天想了一个事。”他用笔点着公式,“轧钢车间的温度传感器,受电磁干扰,信号里有尖峰噪声。我想写一个微程序,自动识别并剔除这些异常值。”

他用粉笔在公式旁边画了一个波形图,在几个尖峰处画了圈。

“这不是什么高深的东西,移动平均滤波。取样点前后各两个,跟自己平均。偏差超过三倍标准差的,判定为异常值,用平均值替代。”

他把粉笔放下,转过身。

“你们看这个思路行不行?”

吕辰盯着那个公式,脑子里忽然闪过一个念头。

一个和魏教授的问题毫无关系的念头。

“赵师兄,您刚才说‘偏差超过三倍标准差的,判定为异常值’?”

赵泽勇愣了一下。

“对。怎么了?”

吕辰没有回答,他转过头,看着吴国华,又看着万人敌。

“国华、万工,774厂的电阻,阻值分布是什么样的?”

吴国华和万人敌也愣了一下,然后反应过来。

万人敌道:“报告上写的是正态分布,但是中心偏离了标称值,方差也大。”

“对。”吴国华拿起另一支笔,“中心偏离,是系统性偏差;方差大,是随机性偏差。如果我们在软件里做一次初始校准……”

他画了一个坐标系,横轴是实测值,纵轴是标称值。

“每一颗电阻上机之前,测一次实际阻值,存进只读存储器里。使用时,查表校准。标称10k的电阻,实测是9.2k,软件里就按9.2k来算。”

他在坐标系里画了一条直线。

“这不就把系统性偏差消灭了吗?”

万人敌一拍桌子:“对!不光是电阻,电容也一样。漏电流、容量偏差,全部可以预校准。只要系统上电的时候跑一次自检,把每个元件的实际参数测出来,存进一个表格里。运行时查表,软件自动补偿。”

赵泽勇表情没什么变化,只是微微点了点头。

“这个思路,在统计学里叫系统误差补偿。我们做实验的时候常用,没想到你们也能用。”

吕辰看着他,忽然笑了。

“赵师兄,您知道上午我在愁什么吗?”

“什么?”

“774厂的电阻,温漂15%,批次不一致,我们愁得要死。想了很多办法,改工艺、换设备、加强抽检、降额使用……每一条路都走得通,但每一条路都要花几个月甚至更久。”

他比了个大拇指:“您这一个公式,移动平均滤波,让我忽然想明白了,有些问题,不一定非要改硬件。改软件,也行。”

赵泽勇沉默了几秒。

然后他说了一句让吕辰记了很久的话。

“小吕,你们工程师有一个毛病。”

“什么毛病?”

“遇到问题,第一反应是怎么把它修好。换一个角度想,怎么让它坏得可控。修好要花十分力气,让它坏得可控,也许只需要一分。”

他一脸自豪,露出搞理论的嘴脸:“元件不好,不是你们的错。但可以用算法来补,不是你们的专利。数学,从来就是干这个的。”

吕辰和吴国华对视一眼,做理论的就是这点不讨喜。

吴国华拿起笔:“赵师兄,您的这个移动平均滤波,我帮你写成微程序,但你得帮我写一个通用的信号清洗函数?”

“行,就这么定了。”赵泽勇说,“给我两天时间,我给你把函数写出来。”

皆大欢喜,三人对视一眼,都笑了起来。