顶点小说(biquge432.com)更新快,无弹窗!
积层的计算效率比预期低了大概百分之七。不是所有层,只是某些特定的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出现在百分之三十左右,扩张卷积出现在约百分之十五的模型中。这些不是边缘场景,而是主流场景。
第二,不改硬体只改软体,对模型精度的影响有多大?
赵静让团队跑了十组代表性模型的对比测试。方案B的等效转换在八组模型上精度无损,在一组模型上精度下降百分之零点三,在最后一组模型上精度下降百分之一点一。百分之一点一的下降对于某些应用来说可能不可接受。
第三,部分修改硬体能覆盖多少场景?
方案C的覆盖范围是:3x3stride2和5x5stride2可以完全解决,扩张卷积只能解决一部分。总体覆盖率大约百分之八十五。
章宸把三个方案的优缺点在白板上列完后,在方案A上画了一个圈。
「改完整。不改部分,不workaround。天权4号不能带着一个『某些模型会慢百分之七』的标签出厂。用户不会理解『这是为了赶进度做的妥协』,他们只会觉得天权晶片不行。」
NPU架构师点了点头,把方案A的任务拆解成具体的RTL修改点,分配给团队的三个工程师。每个修改点都标注了完成时间和验证负责人。