北冥多样性计算融合架构系列解读之 一文读懂北冥基础使能:毕昇 C++ 编译器及北冥融合加速库
随着摩尔定律趋势放缓,单算力的性能发展逐渐难以满足业界的计算需求。相应地,广大开发者越来越多地依赖多样性算力解决计算需求——服务器上配置 GPU、NPU 或其它加速器将成为常态。
开发者从单算力过渡到多样算力面临一系列的编程挑战,比如多样性算力开发往往需要使用多种编程语言和工具,开发生态碎片化,不同算力上代码难以重用,多种算力协同困难等。在华为全联接 2021 上发布了北冥多样性计算融合架构,其中的基础使能组件包含毕昇 C++、毕昇编译器以及北冥融合加速库,希望帮助开发者解决应对这些挑战。我们接下来分别看下这些组件有哪些能力。
北冥架构之毕昇与融合加速库
毕昇 C++
毕昇 C++是支持多样算力的通用编程语言。它以 C++为基础,支持 SYCL 异构编程标准,一种语言即可对鲲鹏、昇腾及业界主流算力进行编程,降低开发者的学习成本。
C++是一门兼顾性能和开发效率的系统级编程语言,拥有良好的开发者群体和健康的软件生态。SYCL 是由工业界的 Khronos 组织制定的开放编程规范,在标准 C++基础上,增加了异构编程的支持。毕昇 C++支持标准语言,希望借助开放标准的能力,为开发者提供统一的、易学习的编程语言,使开发者的编程技能和代码资产得到有效复用。
除了现有标准的支持,毕昇 C++还针对多样算力特点提供了一系列新的编程抽象,例如为多种处理器上的不同矩阵计算单元提供统一的矩阵编程接口 UMMI,面向 AI 领域提供张量编程接口,提供 AutoSchedule 导语辅助编译器优化等。
使用毕昇 C++进行多样算力编程,开发者可以在同一份源码文件中对不同的算力进行编程,不用切换编程语言和编译器,就像编写普通程序一样便利。
毕昇 C++具备良好的通用性,开发者可以开发满足自己独特需求的应用程序。
毕昇编译器
毕昇编译器提供多指令集支持,实现了对鲲鹏、昇腾等算力的统一编译。配合毕昇 C++,可直接生成融合多种算力代码的可执行程序,方便地在多样性计算系统上部署运行。
毕昇编译器通过编译算法优化以及与处理器架构的深度协同,加强了预取优化、自动向量化、循环优化和多面体优化等能力。此外,毕昇编译器实现了多样算力融合优化技术,如跨算力的数据流分析、控制流分析、传播优化和数据布局优化,打破编译器只能对单算力进行编译优化的限制,有利于提升多样性计算的整体性能。
北冥融合加速库
华为全联接 2021 上发布的高性能北冥融合加速库 2.0,将去年发布的 CCAL 加速库全新升级为北冥融合加速库,为领域关键功能加速提供基于 API 的编程调用。秉承“简单留给用户,复杂留给自己”的理念,使开发者在应用开发过程中,无需关注硬件细节,直接调用对应的加速库即可获得在多算力上的极致性能,从而提升开发效率,降低开发成本。
华为的北冥融合加速库布局非常全面,涵盖了应用加速库和基础加速库。其中,应用加速库可兼容主流应用框架,实现已有应用生态的良好对接,并新增了对 AI+大数据、HPC+AI、HPDA 高性能数据分析等融合应用的支持;基础加速库结合算力独有特点做深度优化,可释放算力潜力。
同时,北冥融合加速库为多算力开发者提供了统一的 API 接口,构建了业界独有的多算力算子层。这一层可针对不同算法的各自计算逻辑、不同处理器的差异化特点,采用异构分解技术,最终实现算法在多个算力上的性能最优。比如,多算力算子层的优化器算子,精度要求不高但计算量巨大的张量计算被分解到昇腾执行,高精度计算由鲲鹏执行并为梯度计算提供精度补偿,从而大幅减少训练耗时。基于此优化器算子,实现了计算机视觉、自然语言处理等主流模型训练效率提升 1 倍以上。
多算力算子层屏蔽了复杂的算法拆解过程,开发者只需要调用北冥融合加速库的 API 接口,就可以获得在多算力上的性能加速。这对开发者而言,带来了极大的便利性。
在华为全联接 2021 上,展示了使用北冥架构基础使能组件加速气动噪声数值仿真,求解时间能够大幅缩短 5 倍,效果相当显著。
北冥架构的基础使能软件,是华为为应对多算力挑战非常重要的生态布局,它能够为多样性计算系统提供通用、高生产力、高性能的开发能力。相信软件开发者采用这些组件开发多算力上的应用,会更加从容。
评论