随着人工智能与高性能计算需求的爆发式增长,GPU正从单芯片向多芯片封装(Multi-Die)架构演进。然而,如何高效地在该类硬件上运行大规模、复杂的内核程序(即“巨内核”,Megakernel),成为业界亟待解决的难题。近日,来自知名高校与芯片研究机构的团队提出了一种名为“Fleet”的层次化任务抽象框架,专为多芯片GPU上的巨内核设计,有望大幅降低编程复杂度并提升硬件利用率。
多芯片GPU的机遇与挑战
现代GPU已普遍采用芯片堆叠或互联封装技术,将多个计算芯片(Die)集成在同一封装内,以突破单芯片的面积与功耗限制。例如NVIDIA的GH100、AMD的MI300系列均采用多Die设计,总计算单元数可达数百甚至上千。然而,这种架构也带来了严峻的编程挑战:不同Die间存在非统一内存访问(NUMA)延迟,且全局同步成本极高。传统编程模型(如CUDA)假设单一、统一的全局内存空间和一致的线程调度,直接应用于多Die GPU时,容易出现负载失衡、数据局部性差以及同步开销过大的问题。
巨内核——一个包含多层嵌套循环、复杂控制流和大量共享内存操作的内核——在多Die环境下更为脆弱。由于此类内核通常需要全局同步或跨Die数据交换,其性能往往被Die间通信与同步所限制。现有工作通过手动拆分任务或使用全局调度器应对,但缺乏通用性与可扩展性。
Fleet:层次化抽象破局
针对上述困境,研究团队提出了Fleet抽象框架。其核心思想是引入层次化任务图,将巨内核中的计算与通信任务按粒度分解为“舰队”(Fleet)级任务,每个任务可对应单个Die内的计算块(Block),也可跨Die协同。具体而言,Fleet提供以下关键机制:
-
显式层次结构:开发者仅需定义高层次的任务依赖关系(如“等待所有Die上的子任务完成后聚合结果”),而无需关注底层通信细节。Fleet的运行时会自动将任务映射到Die内的局部计算单元,并在Die间插入最优化的数据传输与同步原语。
-
弹性负载均衡:针对不同Die的计算能力差异(如部分Die配置更高频率或更多缓存),Fleet采用动态任务窃取(Work-Stealing)策略。空闲Die可主动“窃取”其他Die的待调度子任务,从而避免因硬件异构性导致的资源闲置。
-
隐式数据局部性:Fleet自动识别Die内共享内存与全局内存的访问模式,优先将数据放置在距离计算最近的存储层次中。跨Die通信通过异步或流水线方式进行,最大限度隐藏延迟。
实验验证与前瞻
研究团队在模拟的多Die GPU系统上(配置4个Die,每个Die含32个SM)对多个典型巨内核(包括大规模矩阵乘法、卷积核计算、图神经网络推理)进行测试。结果显示:与传统的CUDA手动优化版本相比,采用Fleet抽象的内核在Die间同步次数减少72%,整体执行效率提升约1.8~3.5倍。更重要的是,开发者所需编写的代码行数平均减少40%,显著降低了多Die GPU的编程门槛。
目前Fleet仍处于原型阶段,但已引起学术界与工业界的关注。业内分析认为,随着多芯片封装技术逐步成为GPU主流架构,类似Fleet的自动化抽象框架将成为释放硬件潜力的关键。未来研究计划将Fleet扩展至支持动态负载突变(如实时推理场景)以及和主流深度学习框架(如PyTorch、TensorFlow)的集成。
在多Die GPU时代,巨内核的编程不应成为性能瓶颈。Fleet以层次化任务抽象交出答卷——它让开发者更专注于算法设计,而让运行时与硬件协同完成高效的并行执行。这或许正是通往下一代高性能计算的重要一步。