第三十七章 里程碑
    五月二十号,距离第一个里程碑验收还有五天。

    陈浩的信号接收与解调模块已经在嵌入式平台上跑通了,但方泽在做系统级联调的时候发现了一个问题——解调模块和左城的信道估计模块同时运行时,CPU占用率会飙到百分之九十二,留给波束管理接口和系统进程的算力几乎为零。

    ”不是代码写得不好,是两个模块抢资源。”方泽凌晨两点在工作群里发了一条长消息,附了一张CPU占用率的实时曲线图,”解调模块的FFT运算和信道估计模块的矩阵运算都是计算密集型任务,它们的峰值负载恰好在同一个时间窗口内叠加。单独跑都没问题,一联调就炸。”

    左城看到消息的时候是凌晨两点十分。他刚从办公室回到宿舍,准备洗漱睡觉。

    看完方泽的分析,他的困意瞬间消失了。

    这个问题在PC端不存在——PC端的CPU性能有足够的馀量同时承载两个模块的峰值。但嵌入式平台的ARM处理器性能有限,算力是硬约束,不可能靠升级硬件解决。

    ”明天早上八点碰头。”左城在群里回了一句,”陈浩、方泽,你们俩今晚先各自想想方案,明天一起讨论。”

    陈浩秒回了一个”好”。方泽回了句”我已经在想了”。

    第二天早上,三个人在办公室白板前站了两个小时。

    陈浩的方案是降低解调模块的FFT精度——用更短的FFT长度来减少计算量。但这样做会牺牲解调性能,蓝湾通信的验收指标里对误码率有明确要求,降精度可能过不了。

    方泽的方案是做任务调度——让两个模块的峰值负载错开,用一个时分复用的调度器交替分配CPU资源。思路可行,但调度器本身的开销和时延引入需要精确控制,实现难度不小。

    左城站在白板前,盯着方泽画的调度示意图,脑子里那枚融合叶片的”手感”又开始发热了。

    ”方泽的思路对,但不需要通用调度器。”他拿起笔,在白板上画了一条时间轴,”解调模块的FFT运算有固定的周期性——每个符号周期执行一次,执行时间可预测。信道估计模块的矩阵运算也是周期性的,但周期更长。

    他在时间轴上标出了那个空隙。

    ”把信道估计的矩阵运算拆成小块,每块的计算量控制在零点三毫秒以内,塞进FFT的间隙里执行。不需要调度器,靠的是两个模块自身的时序配合——解调模块执行完一个FFT就发一个信号量,信道估计模块收到信号量就开始执行一个小块,执行完就释放CPU。”

    方泽盯着白板看了十秒钟。

    ”流水线插空。”他说出了这个设计的本质,”把两个模块的计算流水线咬合在一起,像齿轮一样交替转动。”

    ”对。”左城点头,”这样做CPU的峰值占用率不会超过百分之七十五,而且不需要额外引入调度器的开销和时延。”

    ”但矩阵运算拆块有讲究。”陈浩皱着眉想了想,”拆得太细会增加之下文切换的次数,拆得太粗会超出零点三毫秒的窗口。你怎么确定最优的块大小?”

    ”不需要手动确定。”左城写下一个公式,”信道估计矩阵的维度是已知的,FFT的符号周期也是已知的,最优块大小可以直接算出来——是矩阵维度和符号周期的函数。我昨晚推过了,公式在这。”

    他把公式写完,退后一步。

    陈浩和方泽对视了一眼。

    ”城哥,你昨晚几点睡的?”陈浩问。

    ”三点半。”

    ”难怪。”方泽推了推眼镜,”行,这个方案我来实现。给我两天。”

    方泽用了一天半。

    五月二十二号下午,联调测试重新跑了一遍。CPU峰值占用率:百分之七十一。解调性能和信道估计精度都没有损失。两个模块的计算流水线象两组咬合的齿轮,精确地交替转动,没有任何冲突。

    方泽看着监控屏幕上平稳的CPU曲线,难得地笑了一下。

    ”漂亮。”

    五月二十四号,第一个里程碑的全部交付物准备完毕——可运行的软件版本、测试报告、技术文档,打包成一个加密压缩包,上载到蓝湾通信的项目管理平台。

    韩露同步提交了里程碑验收申请和映射的商务文档。

    ”验收流程一般需要三到五个工作日。”她在群里说,”预计五月底之前会有结果。”

    左城回了一个”收到”,然后关掉了工作群。

    手机震了一下。张磊发来的消息,不是工作群,是402四个室友的私人群。

    ”你们听说了吗?马昊走了。”

    左城点开消息。

    ”什么意思?”陈浩问。

    ”今天去实验室碰到林老师的另一个研究生,他说马昊上个月就办了离校手续,提前毕业了。”

    ”去哪了?”