请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
验证中心在芯谷的地下二层。
不是刻意要把晶片验证藏在地下,而是这片区域的地质结构最適合建超低振动实验室。地面上三层是晶片设计中心和软体开发区,地下一层是高性能计算集群,地下二层才是真正的验证核心——四间恆温恆湿的洁净室,中间围著一个两百平方米的系统集成验证大厅。大厅的天花板上铺满了减震模块,走在上面几乎感觉不到任何振动,连脚步声都被吸音材料吞掉了大半。
章宸站在大厅中央的调度台前,面前是六块八十寸的显示墙,每块墙上都滚动著天权4號片上系统集成验证的实时数据流。六组验证工程师分布在四间洁净室里,每组负责一个子系统——cpu复合体、gpu集群、npu引擎、內存控制器、io子系统、电源管理单元。六条数据流在显示墙上匯聚成一张巨大的“验证覆盖图”,绿色代表通过、黄色代表边界、红色代表失败。
现在是天权4號集成验证的第七十三天。
按照原计划,集成验证应该在本周內完成全部测试项,然后进入最终签核、送交流片。但章宸在三天前的晨会上做了一个让所有人意外的决定——暂停验证,回退两个版本,重新跑一组跨子系统的协同用例。
做出这个决定的原因是:验证团队发现了一个极其隱蔽的问题。在单独测试cpu复合体和npu引擎时,两个子系统都表现完美,性能达到设计指標的百分之一百零二。但当pu同时高负载运行时,系统总线的延迟会出现间歇性的抖动,抖动幅度虽然只有不到百分之一,但频率分布不均匀——在某些特定的访问模式下,延迟会在几个微秒內突然跳变,然后又恢復。
这不是一个“功能错误”,因为系统规范允许的延迟抖动范围比这个大得多。但章宸在看到那组数据后,说了一句话:“这不是功能问题,是性格问题。天权4號如果在用户手里跑某些特定应用时出现这种不可预测的延迟抖动,用户不会知道是总线的锅,他们只会觉得『天权晶片有时候会卡一下』。我们不能让『有时候会卡一下』这种印象和天权晶片绑定在一起。”
於是回退。
於是重跑。
今天是重跑的第三天。
调度台的屏幕右上角有一个倒计时,显示距离原定流片窗口还有十九天。十九天后,晶圆厂的產能窗口就会关闭,下一轮窗口要再等六周。六周意味著天衡5的量產可能会延迟,意味著天权5的叠代节奏会被打乱,意味著对面全面制裁落地时天权晶片的库存可能不够。
但章宸没有压缩验证时间的打算。他在回退那天对团队说了一句话:“流片晚了六周,我们可以用库存和排產来补。晶片出了问题,没有任何东西能补。”
此刻,显示墙上的验证覆盖图正在缓慢地由黄转绿。经过两天的调试,总线延迟抖动的问题已经被定位到pu共享的最后一级缓存仲裁逻辑上——仲裁器在某种极端访问模式下会出现“飢饿”现象,某个数据流会因为优先级设置不当而被连续推迟服务。修复方案是在仲裁器中增加一个“老化计数器”,確保任何数据流等待超过一定时间后优先级自动提升。
这个修復已经在仿真环境中验证通过,今天上午被集成到完整的验证用例中重新跑。
章宸没有盯著显示墙看,而是坐在调度台旁边的椅子上,面前是一台只显示原始数据日誌的终端。他的眼睛在那些十六进位的地址和数据之间来回扫,速度比旁边专门负责日誌分析的工程师还快。这不是天赋,是过去二十年里看了几百万行日誌练出来的本能。
赵静从电梯里走出来,手里端著一杯已经凉透的咖啡。她是被章宸叫来的——总线延迟抖动问题的根因虽然找到了,但修复方案涉及npu引擎的数据预取策略调整,需要小芯团队確认这个调整会不会影响ai模型的推理精度。
“跑了三组基准模型,”赵静把一份对比报告放在章宸面前,“精度差异在万分之二以內,统计上不显著。小芯的判断是——可以接受。”
章宸没有看报告,而是问了赵静一个问题:“万分之二的精度差异,在百万级用户规模下,会有多少人感觉到『好像不如以前准了』”
赵静愣了一下。她没想到章宸会问这个问题,因为这已经超出了技术范畴,进入了用户感知的模糊地带。但她只用了不到一秒就给出了答案:“不会有人感觉到。万分之二的差异,连专业评测机构的標准化测试都测不出来,更別说普通用户了。”
章宸点了点头,把报告收下,放在调度台的文件夹里。
“还有一个问题,”赵静说,“小芯在天权4號的npu引擎上跑一组新模型的適配测试时,发现了一个奇怪的现象——某些卷积层的计算效率比预期低了大概百分之七。不是所有层,只是某些特定的kernelsize和stride组合。小芯的分析结论是,npu引擎的硬体调度器在这些特定参数下没有完全流水线化,有气泡。”
章宸的表情变了。不是紧张,而是专注——那种发现了猎物痕跡时的专注。
“哪些kernelsize”
赵静把一组参数写在便签上,递给章宸。3x3stride2、5x5stride2、7x7stride3,以及一组扩张卷积的参数。
章宸看完,在便签背面画了一个简单的示意图。npu引擎的硬体调度器在处理卷积运算时,会將输入特徵图和权重加载到片上缓存,然后由计算阵列执行乘加运算。在某些kernelsize和stride组合下,计算阵列的利用率会下降,因为数据加载的速度跟不上计算的速度,或者计算结果写回的带宽成为瓶颈。
“这个问题能修吗”赵静问。
“能修,但要看代价。”章宸站起来,走到显示墙前,调出npu引擎的微架构图。“调度器的流水线控制逻辑是硬连线,不是微码。如果要改,需要修改rtl,重新跑综合、时序、物理设计。代价是流片至少推迟四周。”
赵静沉默了。四周,加上已经回退的两天,天权4號的流片窗口可能会彻底错过,下一轮窗口要等六周后,总计延迟可能达到十周。
“但如果不修,”章宸说,“这个百分之七的效率损失就会永远留在天权4號的npu引擎里。天权4號的生命周期至少三年,出货量可能超过一亿颗。每一颗晶片在跑某些模型时都会慢百分之七。这个代价,比流片晚十周更大。”
章宸在显示墙上画了一条红线,把npu调度器的问题列为“p0级”——最高优先级,必须在流片前解决。
赵静没有异议。她知道章宸是对的。在晶片验证中,最痛苦的不是发现问题,而是发现了问题却选择视而不见,因为怕影响进度。而每一次视而不见,都会变成一颗晶片整个生命周期里无法抹去的瑕疵。
下午两点,验证大厅里多了一组人——npu微架构设计团队的核心成员。他们从设计中心赶过来,带著rtl代码、仿真脚本和时序报告。调度台旁边的白板上开始出现各种电路图和时间波形,討论声越来越大,偶尔夹杂著爭论。
爭论的焦点不是“修不修”,而是“怎么修”。
方案a:修改调度器的流水线控制逻辑,增加一组专门处理这些特定参数的旁路路径。优点是彻底解决问题,副作用小。缺点是rtl改动较大,需要重新验证的范围也大,至少需要四周。
方案b:不改硬体,改软体——在npu驱动中增加一个“参数重映射表”,当应用提交这些低效率的卷积参数时,驱动自动將其转换为等效但效率更高的参数组合。优点是无需改硬体,不影响流片时间。缺点是这个“等效转换”不是对所有模型都成立,某些模型的精度可能会受影响。
方案c:部分修改硬体——只改调度器中与这些特定参数相关的比较器逻辑,不改流水线结构。优点是rtl改动小,验证范围可控,大约需要两周。缺点是不能完全解决所有低效率场景,只解决了最严重的那几个。
章宸听完三个方案,在白板上写下了一组判断標准。
第一,天权4號的生命周期內,这些低效率卷积参数出现的频率有多高
npu架构师调出了过去六个月小芯平台上所有模型的卷积参数统计。3x3stride2出现在超过百分之六十的模型中,5x5stride2出现在百分之三十左右,扩张卷积出现在约百分之十五的模型中。这些不是边缘场景,而是主流场景。
第二,不改硬体只改软体,对模型精度的影响有多大