在AMD这样十分看重实效和挑战精神的半导体公司,成长最快的时刻,往往不是你在PPT上画出多漂亮的架构图,而是当你面对一个让El Capitan跑分明显下降的诡异Bug,在全组人盯着你的屏幕时,如何通过那套成熟的底层直觉,一步步定位问题、挽回性能。
💡 那个让我手心出汗的真实案例当时我负责一个面向MI300系列大语言模型推理的算子优化项目。
项目背景看起来很美好:我们想通过一种新的内存访问模式,提升Token生成的吞吐量。在模拟器上跑得很好,但代码部署到真实硅片的第二天,性能团队就发来了红色警报。
痛点:由于我们对Chiplet架构下的Inter-chiplet latency理解不够充分,在特定Batch Size下,大量数据堵死在Infinity Fabric总线上。
后果:客户关键Workload性能下降约30%,且表现为随机抖动。如果不能在一周内修复,客户可能会调整采购安排。
那时我真的快崩溃了,眼看着整个Q3的软件交付目标因为我这个环节卡住。作为核心SDE,我第一次真切感受到,软件代码撞上物理定律的无力感。
🔍 深度问题分析:为什么“看起来对”的逻辑也会撞墙经过三天逻辑分析仪抓包和全组复盘,我终于找到了原因,也复盘出两个典型的新人坑。
第一个坑:对“模拟器”的盲目迷信
我们当时太相信软件模拟的结果,觉得逻辑对、路径优,性能自然就会好。但忽略了在真实物理世界中,热量、电压和总线拥塞是模拟器无法完全覆盖的。作为硬件公司的SDE,我没有在开发早期就在FPGA或工程样片上做深度的实机验证,这是最大的失职。
第二个坑:缺乏对“全栈系统”的共情
我们当时只盯着自己的Kernel代码,觉得指令流水线很完美,却忽略了操作系统调度和固件层面对功耗的动态调整。在AMD这种高强度实战中,全局系统的协同视角,永远比局部代码的微操更重要。
🛠️ 总结几条在AMD“求生”的硬核技巧那次经历让我总结了几条实战技巧,在后来的项目中多次帮到我。
技巧一:建立以Trace为基础的性能归因体系
适用场景:任何性能优化任务。
操作步骤:
别猜:用Rocprof或Omnitrace抓取完整的时间轴。
看“气泡”:如果计算单元有空闲,问自己:是数据没跟上,还是指令依赖卡住了?
准备“微基准测试”:提前准备好最小可复现的测试用例,永远不要让自己陷入无法隔离问题的窘境。
技巧二:掌握数据驱动的沟通方式
适用场景:推动架构变更或需要硬件团队支持时。
操作步骤:
做一份高质量的Roofline Model图表:别只讲感受,要用直观的数学模型,说明你的代码已经接近硬件的理论上限。
做一个积极的“硬件问题”提交者:当你确信是硬件问题时,整理好复现脚本(Repro Case)和详细现象,这是对架构团队很有价值的帮助。
技巧三:提升在压力下的非正式协同力
适用场景:Release前的紧张阶段。
操作步骤:
和Performance Labs的同事搞好关系:他们手里有最全的测试数据。
主动发起“War Room”:别单打独斗,把驱动、固件和库的专家拉到一起集中攻关,效率是最高的。
