---
title: 【鲲鹏DevKit黑科技揭秘】┃ 毕昇编译器，让你的代码快到飞起！-官方技术文章-鲲鹏社区
description: 本文主要向大家介绍什么是毕昇编译器，典型优化场景及其优化原理。
keywords: DevKit,黑科技揭秘,让你的代码快,到飞起,官方技术文章,鲲鹏社区,了解毕昇编译器,毕昇编译器典
url: https://www.hikunpeng.com/developer/techArticles/20230922-10?envFlag=1
section: (其他)
---

# 【鲲鹏DevKit黑科技揭秘】┃ 毕昇编译器，让你的代码快到飞起！-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20230922-10?envFlag=1
描述: 本文主要向大家介绍什么是毕昇编译器，典型优化场景及其优化原理。
关键词: DevKit,黑科技揭秘,让你的代码快,到飞起,官方技术文章,鲲鹏社区,了解毕昇编译器,毕昇编译器典

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

【鲲鹏DevKit黑科技揭秘】┃ 毕昇编译器，让你的代码快到飞起！

【鲲鹏DevKit黑科技揭秘】┃ 毕昇编译器，让你的代码快到飞起！

实战经验

发表于 2021/07/30

0

HPC（ High Performance Computing，高性能计算）领域主要是解决计算密集型、海量数据处理等业务的计算需求，如科学研究、气象预报、计算模拟等。如何提高计算能力、极致化应用性能成为当前 HPC 领域各大平台最关键的课题之一，编译器在其中发挥着至关重要的作用。

毕昇编译器作为一款基于鲲鹏平台的高性能编译器，在编译算法、加速指令集、 Autotuner 等方面对应用场景进行了深度的优化，为开发者提供高效的性能加持。本期由毕昇编译器工程师卜乐为你介绍鲲鹏的性能优化利器——毕昇编译器如何释放鲲鹏的强劲算力。

## 了解毕昇编译器

毕昇编译器是基于 LLVM，针对鲲鹏平台进行了深度优化的高性能编译器。除支持 LLVM 通用功能之外，对以下三个方面进行了增强，使得鲲鹏平台的强劲算力能够最大限度地得到释放。

（1）高性能编译算法：编译深度优化，内存优化增强，自动矢量化等，大幅提升指令和数据呑吐量。

（2）加速指令集：结合 NEON/SVE 等内嵌指令技术，深度优化指令编译和运行时库，发挥鲲鹏架构极致算力。

（3）AI 迭代调优：内置 AI 自学习模型，自动优化编译配置，迭代提升程序性能，完成最优编译。

毕昇编译器特性架构图

当前毕昇编译器已广泛应用于多种 HPC 典型场景，如气象、安防、流体力学等，性能优势已初步体现。其中，SPEC CPU 2017 benchmark 跑分平均优于 GCC 20%以上，HPC 典型气象应用 WRF 优于 GCC 10%。

毕昇编译器与开源编译器SPEC CPU 2017 跑分对比：

## 毕昇编译器典型优化场景及其优化原理

（1）结构体内存布局优化—大幅提升缓存命中率，突破访存瓶颈

SPEC CPU 2017 benchmark 中的 mcf 子项是对内存要求极高的应用，它是一款叫做MCF的大规模交通规划软件的核心代码。其瓶颈代码如下图左边所示。

结构体优化原理示意图：

可见在 struct 中，data1 的使用率极高，而 data2 是不使用的。然而由于源代码中，数据的排布是以结构体数组的形式排布。按照一般编译器的编译方式，拿数据时每次都会将整个结构体放到 cache 里面，导致大量不参与计算的 data2 也被加载到了 cache 中，造成高速内存空间的浪费和性能的损耗。毕昇编译器会通过用户标记的结构体声明，或者通过自动检查循环中适合优化的内存场景，确认优化点。然后通过将结构体数组变为数组结构体的方式（如上图右），将有效数据紧凑排布，从而提高 cache 命中率和应用性能。经测试，此优化可以对 mcf 子项带来50%的性能提升。

（2）自动矢量化—计算效率提升的秘诀

鲲鹏平台支持 Armv8 NEON 矢量化指令集。当前支持32个128位的矢量寄存器，指令可以同时操作4*32或2*64的数据。毕昇编译器依托这种硬件优势做了大量优化，包括 SLP(superword-level parallelism) 矢量化和循环自动矢量化。例如在 SPEC CPU 2017 benchmark 中处理视频流格式转换的x264子项中，毕昇编译器会自动识别并使用 uabd 和 udot 这类高效向量指令完成计算来替换标量指令，增大单时钟周期的数据处理量， 从而大幅提升计算效率。对于 x264 子项，这项优化可有效提升其30%的计算效率。

矢量化优化示例：

（3）Autotuner—基于机器学习快速获取最优编译配置

如何获取性能最优编译选项是编译器使用中常见的问题，往往需要长时间的手动选项调优。为了减少这其中的工作量，使得用户能快速找到最优的优化选项，毕昇编译器自研了基于 ML 的自动搜索技术(ML-based Search) 的 Autotuner 工具。

Autotuner 的调优流程由两个阶段组成：初始编译阶段（initial compilation）和调优阶段（tuning process），如下图所示：

Autotuner 使用流程：

简单来说，在初始编译阶段，编译器会通过用户指定的调优方向，对可调优的代码区间进行标记。在随后的调优阶段，Autotuner 会根据搜索算法对不同的优化区间生成不同的编译配置。然后使用此配置编译运行，并根据运行性能的反馈来迭代优化配置参数。最后经过给定迭代次数后找出最优配置供用户使用。在实践过程中，通过 Autotuner 对 Coremark Benchmark 进行调优可以获取5%以上的收益。

以上介绍的三个优化特性分别是毕昇编译器在中前端算法优化、后端指令优化、迭代调优中最具代表性、在各自领域对性能提升表现最佳的三个特性。除以上介绍的三个优化特性之外，毕昇编译器在软件预取、循环优化、分支预测、指针压缩等编译优化技术均有探索且取得了显著的收益，详情可点击“阅读原文”获取毕昇编译器详细信息，快来试试吧！

## 关于鲲鹏DevKit开发套件

鲲鹏DevKit开发套件是为广大鲲鹏开发者打造的一把屠龙之刃，帮助开发者高效开发，快速迁移。鲲鹏DevKit开发套件提供全流程开发工具，集代码迁移、编译调试、性能调优、异常诊断等工具和功能于一体，将开发者的各个工作环节一一串联，提供了一个方便、快捷和专业的工具包。

往期推荐：

【鲲鹏DevKit黑科技揭秘】┃ 看鲲鹏DevKit如何解决迁移拦路虎 [了解详情](https://mp.weixin.qq.com/s?__biz=MzUyNjk4NjM1MA==&mid=2247583797&idx=1&sn=5b640d51007414cf891a4ba9200bed7f&chksm=fa05b534cd723c221bb20af39cc0309ad707eba48cb2fbfdc9ef892d97b39132c8191c0f0ebe&token=1800228665&lang=zh_CN&scene=21#wechat_redirect)

本页内容
