1. 从技术周期到产业生态:一位工程师的深度观察
最近,英特尔中国研究院院长宋继强在《财经》年会上的分享,在咱们工程师圈子里引发了不小的讨论。他谈到的“三个坚持”和“构建未来技术生态”,乍一听像是高层战略,但细品下来,每一句都戳中了我们这些一线研发、架构设计和技术管理者的痛点。我们每天都在和芯片、代码、协议打交道,眼看着AI模型参数从亿级奔向万亿级,数据从TB到PB乃至EB级增长,应用场景从单一的云端推理扩展到端-边-云协同的复杂网络。宋院长提到的“多场景、多应用迸发”和“任何单一计算形态都不足以满足需求”,这绝不是空话,而是我们手头项目正面临的真实挑战:那个原本跑在标准服务器CPU上的算法,现在是不是该考虑用GPU加速一下?这个实时性要求极高的车规级控制逻辑,是不是FPGA更合适?这些异构的硬件平台,软件栈怎么统一管理?性能怎么最大化榨取?这些问题,已经从学术探讨变成了迫在眉睫的工程现实。今天,我不想复述宏观趋势,而是想结合我们嵌入式、硬件、系统软件工程师的日常,拆解一下宋院长观点背后的技术逻辑,并分享一些在“异构计算”和“软硬结合”实战中的具体思考和踩坑经验。
2. 技术周期的本质与工程师的定位
2.1 我们正处在哪个“技术周期”?
宋院长提到“穿越技术周期”,这个概念很有意思。所谓技术周期,在我看来,就是主导计算范式发生根本性转变的时段。回顾过去,我们经历了以提升单核CPU主频为核心的“频率周期”,以及通过增加核心数量来提升并行能力的“多核周期”。而现在,我们正身处一个更为深刻的“异构周期”或“XPU周期”。这个周期的核心驱动力,是应用需求的极度分化和数据形态的爆炸性增长。
举个例子,自动驾驶的感知系统需要同时处理高分辨率图像(适合GPU并行计算)、激光雷达点云(适合专用ASIC或DSP流式处理)和毫米波雷达信号(适合FPGA做实时滤波与融合),最后还需要一个高可靠性的CPU核心来做决策规划。这四种计算任务,对算力、精度、延迟、功耗的要求截然不同,指望一种通用处理器(比如一颗高性能CPU)以最优的能效比搞定所有环节,已经越来越不现实。这就是“任何单一的计算形态都不足以满足需求”这句话最生动的注脚。这个周期对我们工程师的要求,从“精通某一类处理器”变成了“理解并驾驭多种计算架构”,以及更关键的,“懂得如何将它们协同起来解决一个系统级问题”。
2.2 “三个坚持”的工程化解读
宋院长提出的“三个坚持”,如果翻译成工程师的语言,我认为是这样的:
坚持打开视野,更多交流合作:这意味着我们不能只埋头看自己眼前的电路图或代码行。嵌入式工程师需要了解一些AI框架(如TensorFlow Lite for Microcontrollers)的模型部署瓶颈;硬件工程师需要和算法工程师沟通,了解其计算图的特点,以便设计更高效的加速器微架构;软件工程师需要理解硬件的内存层次结构和数据通路,才能写出缓存友好的代码。跨团队、甚至跨公司的技术社区交流(如RISC-V基金会、oneAPI社区)变得空前重要。
坚持基础创新,不能只看‘空中楼阁’:在追逐AI、元宇宙等热门概念时,不能忽视底层的基础设施。比如,新的存算一体架构、近内存计算、光互连技术、先进封装(如英特尔的EMIB、Foveros),这些才是决定上层应用能飞多高的“地基”。对于工程师而言,关注这些底层技术的演进,可能意味着要重新学习芯片间互连协议(如CXL)、新型存储器特性,或者研究如何将算法映射到三维堆叠的芯片上。
坚持突破,不要轻易放弃:异构计算和软硬协同的优化,是一个极其复杂且充满试错的过程。为一个特定算法设计硬件加速器,可能经历了RTL设计、仿真、FPGA原型验证、性能分析、再修改架构的多次循环。软件调优更是如此,为不同的硬件后端(CPU, GPU, NPU)调整数据布局、并行策略、内核函数,往往需要极大的耐心和反复的基准测试。没有“坚持突破”的心态,很容易在性能提升遇到瓶颈时选择妥协。
3. 异构计算(XPU)的实战拆解与选型逻辑
3.1 为什么是“XPU”而不是“CPU+GPU”?
英特尔将自己定义为“XPU公司”,这个“X”代表的是多样化(diverse)。这不仅仅是营销话术,它反映了一个根本性的转变:从“以CPU为中心”到“以数据为中心”的计算架构。不同的数据形态和处理任务,需要不同的计算引擎。
我们可以用一个简单的表格来理解主要计算单元的特性与适用场景:
| 计算单元 | 核心优势 | 典型应用场景 | 工程师选型考量 |
|---|---|---|---|
| CPU (中央处理器) | 强大的通用性、复杂的控制流处理、低延迟单线程性能。 | 操作系统、业务逻辑、决策控制、串行任务。 | 任务是否涉及复杂分支判断?是否需要频繁的IO或系统调用?是否是整个系统的控制核心? |
| GPU (图形处理器) | 大规模数据并行计算、高吞吐量的浮点运算。 | 图形渲染、科学计算、深度学习训练与推理(矩阵运算)。 | 我的算法是否可以高度并行化(如对大量数据做相同操作)?计算密度是否足够高以掩盖内存访问延迟? |
| FPGA (现场可编程门阵列) | 硬件可重构性、极致的确定性与低延迟、能效比高。 | 网络数据包处理、金融高频交易、工业实时控制、算法原型验证。 | 是否需要纳秒级的确定时延?算法是否固定或变化不频繁?是否有硬件开发团队和较长的开发周期? |
| AI加速器 (NPU/TPU等) | 针对张量计算高度优化、极佳的能效比(TOPS/W)。 | 端侧和边缘侧的AI推理(图像识别、语音唤醒)。 | 是否以AI推理为核心负载?对功耗和成本是否极度敏感?是否支持主流的模型算子? |
注意:选型绝不是非此即彼。一个复杂的系统往往是多种XPU的集合。关键在于识别工作负载中的“热点”(Hot Spot),将适合的任务卸载到适合的硬件上,这也就是常说的“异构计算”或“混合计算”。
3.2 从理论到实践:一个边缘AI摄像头的异构架构设计
假设我们要设计一个智能安防摄像头,它需要实现实时的人脸检测、属性分析(是否戴眼镜、口罩)和跟踪。这个需求如何映射到XPU架构上?
工作负载分解:
- 图像预处理:缩放、色彩空间转换(YUV2RGB)。计算特点:规则的数据搬运和像素级操作,轻度并行。
- 人脸检测:运行一个轻量级卷积神经网络(如MobileNet-SSD)。计算特点:大量的卷积、池化等张量运算,高度并行。
- 属性分析:在检测到的人脸区域上,运行另一个小型分类网络。计算特点:与检测类似,但计算量更小。
- 跟踪与决策:基于多帧结果进行目标跟踪,并决定是否触发报警上传。计算特点:涉及数据关联、状态机等逻辑控制,串行性强。
异构映射方案:
- 方案A(低成本):一颗集成了轻量级NPU的嵌入式SoC。NPU处理两个AI模型,CPU核处理图像预处理、跟踪决策和系统控制。这是目前最常见的端侧方案。
- 方案B(高性能):采用CPU+GPU的组合。GPU负责所有视觉算法(预处理也可用GPU Shader加速),CPU负责控制流和网络通信。这在一些高端边缘计算盒子中常见。
- 方案C(极致能效/确定时延):CPU+FPGA。将AI模型编译部署到FPGA上,获得比NPU更灵活的算力配置和极低的恒定处理延迟,CPU角色不变。适用于对功耗和实时性要求严苛的工业场景。
选型背后的“为什么”:
- 为什么不用纯CPU?因为纯CPU跑CNN模型,功耗高、速度慢,无法满足实时性。
- 为什么方案A比B更常见于摄像头?因为摄像头的功耗、成本和体积限制严格,集成NPU的SoC在能效比和集成度上优势明显。
- 什么情况下考虑方案C?当算法需要频繁自定义修改(FPGA可重构),或者处理流水线需要与外部传感器进行微秒级同步时(FPGA的确定性延迟)。
这个例子说明,异构计算的设计起点是对应用负载的深刻剖析,而不是盲目追求最强的单一算力。
4. 软硬结合的核心:oneAPI与跨架构编程的挑战
4.1 硬件性能需要软件来释放
宋院长强调“硬件的性能需要软件来加以释放”,这句话道出了异构计算最大的痛点之一——“软件墙”。每一类硬件(CPU、GPU、FPGA)都有自己独特的编程模型、工具链和优化技巧:
- CPU: 用C/C++, 关注缓存、分支预测、向量化(如AVX-512)。
- GPU: 用CUDA(NVIDIA)或HIP(AMD), 关注线程网格、共享内存、合并访问。
- FPGA: 用Verilog/VHDL或HLS(高层次综合), 关注流水线、资源利用率、时序收敛。
如果一个应用要同时利用CPU和GPU,开发团队就需要至少维护两套代码,并拥有两种技能栈的工程师。这带来了巨大的开发、调试和维护成本。更糟糕的是,代码被锁定在特定厂商的硬件上,丧失了可移植性和未来架构选择的灵活性。
4.2 oneAPI的愿景与工程实践
英特尔推出的oneAPI,其核心目标是提供一个开放的、基于标准的统一编程模型。开发者可以用一种语言(主要是DPC++,基于C++和SYCL)编写代码,然后通过不同的编译器后端,将其适配到CPU、GPU、FPGA等硬件上运行。
它的工作原理可以简单理解为:你编写一份描述并行计算任务的“高级”代码,oneAPI的编译器负责将其“翻译”成适合目标硬件的“低级”指令。例如,你写了一个并行循环,针对GPU,它可能被编译成CUDA Kernel;针对CPU,则可能被编译成使用TBB(线程构建块)的多线程代码。
在工程中的潜在价值:
- 降低开发门槛:团队可以主要使用C++技能进行异构编程,无需人人成为CUDA或FPGA专家。
- 保护投资:业务逻辑代码与硬件加速代码解耦。当未来硬件升级(比如从某代GPU换到下一代,甚至换到其他厂商的加速器),只需重新编译或做少量适配,而非重写。
- 性能可移植性:在理想情况下,一份代码可以在不同架构上获得不错的性能,虽然要达到“最优”性能可能仍需一些架构特定的微调。
4.3 实战中的注意事项与心得
然而,在目前阶段,将oneAPI或类似统一编程模型用于生产级项目,需要保持清醒的认识:
- 性能与便利性的权衡:用统一模型写出的代码,其性能往往难以匹敌由专家手工精心优化的、针对特定硬件的原生代码(如手写CUDA)。oneAPI的价值在于在“开发效率”和“跨平台性能”之间取得一个较好的平衡,而不是提供绝对的性能巅峰。
- 生态系统成熟度:oneAPI对英特尔自家硬件(如Xe GPU、FPGA)的支持自然是最佳的。对于其他厂商硬件的支持,取决于社区和厂商自身的适配程度。在选型时,必须评估其对你目标硬件平台的支持是否达到生产要求。
- 学习曲线依然存在:DPC++/SYCL虽然基于C++,但引入了用于描述并行度和数据管理的新的抽象(如
queue、buffer、kernel)。开发者仍需理解异构计算的基本概念(如主机-设备内存分离、数据依赖),学习曲线比纯CPU编程要陡峭。 - 调试与 profiling 工具:跨架构的调试和性能分析工具链是否完善、易用,是决定开发效率的关键。英特尔提供了VTune、Advisor等工具,但整个跨平台调试体验相比成熟的单一平台工具链,仍有提升空间。
个人心得:对于新启动的、明确需要长期跨多种架构部署的项目,可以考虑从早期就评估并尝试oneAPI。对于已有大量CUDA代码的存量项目,迁移成本可能很高,更务实的做法可能是封装核心计算内核,通过运行时动态选择不同后端的实现。软硬结合的理想很丰满,但工程落地需要一步步来,从最关键、最通用的计算模块开始尝试统一编程模型,是一个稳健的策略。
5. 构建技术生态:工程师能做什么?
宋院长谈到的“构建未来技术生态”,听起来很大,但生态的基石正是我们每一个开发者、每一个技术决策。我认为,工程师层面可以在这几个方面贡献力量:
- 拥抱开放标准:在技术选型时,在满足性能需求的前提下,优先考虑基于开放标准的技术。例如,在AI领域,关注ONNX(开放的模型交换格式)而非某个框架的私有格式;在芯片指令集层面,关注RISC-V的进展;在编程模型上,关注SYCL、OpenCL等开放标准。这能减少被单一厂商锁定的风险,增加系统的长期灵活性。
- 贡献开源项目与社区:异构计算的软件栈非常复杂,离不开开源社区的共建。无论是为Linux内核的某个驱动提交补丁,为某个AI编译器(如TVM、MLIR)贡献代码,还是参与oneAPI开源项目,都是在夯实整个生态的基础设施。分享你在移植、优化过程中遇到的问题和解决方案,也是在帮助整个社区穿越“技术周期”。
- 在系统设计中预留弹性:在设计硬件板卡或软件架构时,不要做“死”的设计。例如,在板载连接器上预留一些高速串行总线(如PCIe)的通道,未来可以接驳不同的加速卡;在软件架构上,采用插件化设计,将计算密集模块抽象为可插拔的“算子”,方便后续替换为不同硬件后端的实现。
- 培养“全栈”思维:这里的“全栈”不是指前后端,而是指对计算栈从上到下(应用、算法、框架、运行时、操作系统、驱动、硬件)有一定程度的理解。不需要成为每个领域的专家,但需要知道每一层的关键约束和优化机会在哪里。这样在与上下游同事沟通、进行系统级性能分析和优化时,才能更高效。
穿越技术周期,不是被动等待,而是主动适应和塑造。作为工程师,我们每天面对的具体技术挑战——如何让这个算法更快、更省电,如何让这个系统更稳定、更易扩展——这些微观的努力,汇聚起来就是在构建宋院长所说的“未来技术生态”。坚持打开视野去学习新架构,坚持在底层技术上深挖优化,坚持在调试和优化中不放弃,这“三个坚持”其实就是优秀工程师的职业本能。在这个异构计算成为主流的时代,这份本能比以往任何时候都更加重要。