鸿蒙5.0开发进阶:NDK开发-毕昇编译器

鸿蒙HarmonyOS实战:创建NDK工程、毕昇编译器 为顺利进行NDK开发,开发者需要先掌握必要的基本概念及基础知识。 阅读详情

往期鸿蒙全套实战文章必看:


毕昇编译器简介

毕昇编译器是基于LLVM开源软件开发的一款用于C/C++等语言的native编译器,能将C/C++代码工程编译链接成可以在设备上运行的二进制。在无需改动用户代码的条件下,相比业界主流的开源LLVM或GCC编译器,毕昇编译器能提供更强大的优化能力,使编译链接出来的二进制的运行时长更短、指令数更少,帮助提升应用在设备上的运行流畅度。

能力范围

毕昇编译器提供将C/C++代码工程编译链接成可以在设备上运行的二进制的基本能力,主要包括以下三方面:

  • 编译能力:将C/C++源码文件编译成汇编文件,汇编文件是指使用汇编语言编写的文件。
  • 汇编能力:将汇编文件汇编成可重定向文件,可重定向文件是ELF格式的二进制文件,但不能直接放在设备上运行。
  • 链接能力:将一个或多个可重定向文件一起链接成一个可执行的二进制文件。

亮点特征

毕昇编译器相对于LLVM/GCC编译器有以下特点。

  • 循环优化增强

针对循环相关的编译优化,毕昇编译器在场景识别、结构变换等方面做了改进和增强。例如在社区LLVM已有的Loop Distribution优化上,毕昇编译器相比开源LLVM编译器,能额外识别出循环内不同代码块间数据依赖关系、以及不同代码块运行的迭代次数差别,从而能对更多的循环进行loop distribution优化。

Figure 1 毕昇编译器Loop Distribution优化增强示例

  • 矢量化优化增强

毕昇编译器在矢量化优化方面,相比开源LLVM编译器,不仅能将更多的循环做矢量化转换,还在矢量化指令选择上更高效。例如下面示例中,开源LLVM编译器虽然做了矢量化,但使用了5条矢量指令;而毕昇编译器只需要使用2条矢量指令,最终产生的二进制效率更优。

Figure 2 毕昇编译器矢量化优化增强示例

毕昇编译器使用指导

在DevEco Studio 中使用毕昇编译器:

开发者可以获取DevEco Studio 5.0.3.402及以上的版本,在HarmonyOS应用的工程级build-profile.json5中简单配置即可使用毕昇编译器:在runtimeOS为HarmonyOS的时候,设置nativeCompiler为BiSheng,即可使用毕昇编译器构建HarmonyOS工程的C/C++代码。

鸿蒙next角落里的知识:NDK工程、编译器 适合使用NDK的场景:应用涉及如下场景时,适合采用NDK开发 阅读详情

相关推荐

鸿蒙篇——初次使用鸿蒙原生编译器DevEcoStudio创建一个鸿蒙原生应用遇到的坑--汇总(持续更新)

初次使用鸿蒙原生编译器DevEcoStudio创建一个鸿蒙原生应用遇到的坑--汇总(持续更新)

u011391361的博客 4141

毕昇编译器异构算子开发基本思想

为了更好的阅读体验,请移步笔者。

Deleter357的博客 502

【STM32】STM32F103C8T6多串口通信实战:3个USART并行收发与中断处理优化

本文详细介绍了STM32F103C8T6多串口通信的实战技巧,包括3个USART模块的并行配置、中断优先级优化及数据收发冲突规避策略。通过硬件初始化步骤、中断优先级设置和双缓冲区实现等方案,有效解决了多串口通信中的数据错乱问题,提升系统稳定性与效率。

weixin_42526417的博客 168

【毕昇编译器】编译优化与软硬协同释放鲲鹏澎湃算力 笔记

针对不同的场景,不同的应用特点,使用不同的编译优化手段编译优化的代价与收益权衡,需要综合考虑性能收益,代码体积,编译时间,可调试性等多方面因素软硬件结合,通过软件及硬件的协同优化,最大化的发挥硬件算力语言生态构建的持续性,语言标准的不断演进,及新特性支持。

Jack20的博客 1万+

逐飞vs龙邱:英飞凌miniwiggler仿真器硬件接口差异全解析(附拆机对比图)

本文通过拆解对比逐飞与龙邱两家厂商的英飞凌miniwiggler仿真器,详细解析了其硬件接口的核心差异。重点分析了Type-C接口的取舍、DAP调试协议(SWD)的支持、电源设计(跳线帽vs拨码开关)以及工艺用料,为嵌入式开发者与智能车竞赛选手提供了清晰的选型参考和实际应用建议。

weixin_29189003的博客 112

ABAP动态填充Word模板:基于cl_docx_document的XML替换方案

本文详细介绍了ABAP中基于cl_docx_document类的动态Word模板填充方案。该方案通过直接操作DOCX文件的XML核心,完美解决了传统OLE/DOI方法在格式保真、性能和后台运行方面的痛点,是实现复杂、批量Word文档生成的优雅解决方案。

gpt4scribbler的博客 525

编译器 鲲鹏GCC ,毕昇编译器

通过检索和阅读了解到, 鲲鹏GCC是基于开源GCC升级得到的ARM平台GCC工具, 而毕昇编译器是基于开源LLVM升级得到的编译平台。 两者的优势场景不一样,就如同C语言和Java一样,场景决定选择,不会统一。 尽管两者都是面向编译场景的工具,使用场景也有重合空间,但具体到实际应用中可能会发现,鲲鹏GCC对经典的编译型语言如C/C++/Fortan等的适配更优,而LLVM作为底层虚拟机来实现编译的前端统一,在代码重用上比GCC强,但整体优化上不抵GCC,所以现在问LLVM会不会取代GCC,大概率还是

hxsln11的博客 958

Unity游戏开发实战:用Flow Field实现RTS百人军团流畅寻路(附完整代码)

本文深入探讨了在Unity中利用流场寻路技术解决RTS游戏大规模单位移动性能瓶颈的实战方案。通过解析从Dijkstra算法生成成本场、积分场到最终向量场的核心原理,并结合分块、缓存及与DOTS/ECS架构集成的优化策略,实现了百人军团的流畅群体寻路。文章提供了完整的代码示例,助力开发者构建高性能的RTS寻路系统。

weixin_28363123的博客 587

华为毕昇编译器,藏着哪些“黑科技”?

此外,毕昇编译器通过高阶抽象的搬运、计算、内存三大类OP描述算子,简化了开发者对硬件架构细节的感知,仅需掌握Tile切分技巧,即可轻松实现跨架构的高效编程,进一步提升了昇腾硬件的通用性和易用性。这种灵活性与深度优化的结合,不仅加速了应用落地,还拓宽了昇腾硬件在各领域的应用前景。针对以上问题,华为毕昇编译器打造了统一的编译优化框架,通过MLIR技术桥接不同编程语言与硬件架构,实现高效的端到端编译调优,实现“一次编写,多芯运行”,让算力调度像实时翻译一样流畅高效,从底层破解“翻译效率制约算力释放”的行业难题。

优快云资讯 1679

Ubuntu配置Qt Creator树莓派交叉编译环境一步到位

本文详细指导在Ubuntu系统上配置Qt Creator树莓派交叉编译环境。从工具链安装、sysroot创建到Qt库编译,逐步讲解如何搭建完整的ARMv7交叉编译工具链,实现高效开发树莓派应用。

1275

OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案

双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。

大模型大数据攻城狮的专栏 1235

深度解析毕昇编译器:昇腾CANN生态的异构计算与性能优化引擎

毕昇编译器作为CANN生态核心组件,为昇腾AI处理器提供关键软件支持。其主要特性包括:异构编译架构实现统一开发体验,支持C++高级特性;通过软硬协同优化提升计算效率,包括寄存器优化和指令级调度;提供自动同步机制和丰富开发工具链,简化异构编程。应用案例显示,在卷积算子、Transformer推理等方面可带来40%以上的性能提升,大幅提升AI开发效率。毕昇编译器通过降低开发门槛、释放硬件性能,成为连接AI应用与昇腾芯片的重要桥梁。

笃行其道的博客 1万+

嵌入式NuttX RTOS面试题及参考答案

NuttX 的板级支持包(BSP)是一组软件组件,用于将 NuttX 操作系统适配到特定的硬件平台上。BSP 提供了硬件抽象层,使得 NuttX 能够与硬件进行交互,包括初始化硬件设备、提供设备驱动程序等。BSP 的主要作用是隐藏硬件细节,为上层应用程序和操作系统内核提供统一的接口,从而提高软件的可移植性和可维护性。开发 NuttX 的 BSP 通常需要以下步骤:硬件分析:首先需要对目标硬件平台进行详细的分析,了解硬件的架构、处理器类型、外设接口等信息。

大模型大数据攻城狮的专栏 1303

鸿蒙(API 12 Beta2版)NDK开发【毕昇编译器】

毕昇编译器是基于LLVM开源软件开发的一款用于C/C++等语言的native编译器,能将C/C++代码工程编译链接成可以在设备上运行的二进制。在无需改动用户代码的条件下,相比业界主流的开源LLVM或GCC编译器,毕昇编译器能提供更强大的优化能力,使编译链接出来的二进制的运行时长更短、指令数更少,帮助提升应用在设备上的运行流畅度。

鸿蒙的技术博客 1161

File Load Error for Untitled.ipynb Unhandled error 解决方案

本文主要介绍了File Load Error for Untitled.ipynb Unhandled error 解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

鸿蒙 毕昇编译器:Native编译

本文介绍了鸿蒙NDK开发中的毕昇编译器,这是一款基于LLVM开发的native编译器,专为C/C++代码优化设计。毕昇编译器相比开源LLVM/GCC具有更强大的优化能力,能在不修改用户代码的情况下,显著提升二进制运行效率。文章重点阐述了其三大核心能力(编译、汇编、链接)、两大优化亮点(LoopDistribution和矢量化增强),以及四种使用场景:在DevEco Studio中的配置方法、流水线集成方式,并详细解析了IClang增量编译、PGO性能引导优化、LTO链接时优化和fp浮点优化四项关键技术特性。

梦想不只是梦与想的博客 513

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

鸿蒙PC应用集成SQLite指南:从编译到NAPI踩坑实战

本文介绍了如何高效将SQLite3数据库引擎集成到鸿蒙PC应用的全流程方案。传统手动集成存在NAPI桥接等痛点,耗时2-4小时。文章提出基于AtomCode的自动化流程,详细说明了工程搭建、库文件部署、CMake配置等关键步骤,重点解析了CMakeLists.txt的编写要点,包括头文件路径设置、静态库链接顺序等易错点。该方案利用开源鸿蒙PC社区资源,使用BiSheng编译器和lycium_plusplus工具链,大幅提升三方库集成效率,适用于鸿蒙PC和移动设备开发。

栈深码力哥 1006

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++实现设计模式引入

源代码仓库地址 本篇文章主要用介绍用C++实现的设计模式,博文主要呈现逻辑和结构,具体源代码请访问上面的仓库地址。 文章目录设计模式介绍工厂模式 设计模式介绍 设计模式其实是一套提高代码复用性,健壮性,可维护性等一系列优化编程的结局方案,是代码美观,安全。本质就是对面向对象设计原则的实际运用。实现一下设计模式,对其理解会更加深刻,也是对面向对象特性的充分理解。 下面的模式介绍,不按照分类,而是从学习的角度去理解和掌握。毕竟即使列出表格也不一定能记住。 工厂模式 工厂就是制造,用于生产,下面我们来看看一看.

走过路过不要错过 770

毕昇编译器循环优化实验————一文读懂如何使用毕昇编译器自动调优(openEuler系统)

一次酣畅淋漓得配置与调试过程,个中艰辛不足外人道哉,希望以后的同学可以查阅本篇文章获得一点帮助,这是我最后得波纹了(笑),自动调优确实挺猛得倒是。

weixin_29536515的博客 234

案例分析 | g_mmpbsa软件移植毕昇编译器无法启动多线程

背景介绍自由能的计算在计算科学领域是一个非常重要的研究课题,所有物理、化学以及生物过程自发进行达到的程度都是由初态(反应物)与终态(产物)之间的自由能变化决定的。对在分子模拟领域, 准确计算结合自由能(binding free energy)仍然是一个挑战。g_mmpbsa 使用 MM-PBSA 方法计算结合能的分量,除了使用能量分解方案的熵项和每个残基对结合的能贡献,计算结合能的分量。软件安装需...

2301_76434200的博客 141

鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)

cryptocj 是一个安全的密码库,包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法

鸿蒙的技术博客 1690

caffe之upsample实现

caffe之upsample实现和理解

u012385733的专栏 894

鸿蒙系统编译(一)设备编译

鸿蒙设备编译

pjie131_的博客 4799

毕昇 JDK:“传奇再现”,华为如何打造 ARM 上最好用的 JDK?

不知道大家是否听说过亦或是使用过毕昇 JDK,是否从事 Java 工作?是否从事 JVM 底层开发?绝大多数 Java 开发者使用的都是 Oracle 的 JDK 或者是 OpenJDK,本文我们将介绍华为的毕昇 JDK 以及我们所做的相关技术优化,希望能在除上述两者之外提供给大家新的选择。

白鹿第一帅的 优快云 博客 7614

从依赖进口到自主可控,C++工业软件国产化转型的3大关键突破点

掌握C++工业软件国产化转型三大突破点,实现从依赖进口到自主可控。结合2025全球C++及系统软件技术大会:工业软件C++国产化适配案例,解析航空航天、智能制造等场景下的核心技术路径与兼容性优化方案,提升系统稳定性与开发效率,值得收藏。

ProcePerch的博客 784

【编译器】传统编译器和AI/ML编译器总结

本文总结了传统编译器和AI/ML编译器,可作为学习、研究、研发的参考资料。

luoganttcc的博客 1896
上一篇: 鸿蒙5.0开发进阶:NDK开发-在NDK工程中使用预构建库
下一篇: 鸿蒙5.0开发进阶:NDK开发-Node-API支持的数据类型和接口
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值