0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鲲鹏GCC编译器具有代表性的三方面优化特性

7riU_gh_3a181fa 来源:华为计算 作者:华为计算 2021-09-02 10:48 次阅读

编译器作为重要的基础软件之一,在各个领域都有着非常广泛的应用。比如在嵌入式领域,如何在有限的空间内丰富应用的功能困扰着众多的工程师,编译器能够辅助大幅度地降低应用的体积,是工程师们不可或缺的好帮手。

再或是 HPC(High Performance Computing,高性能计算)领域聚焦于计算密集型的场景,像气象预报、科学研究等,极致化的应用性能是 HPC 领域不断探索的课题之一,编译器作为重要的性能贡献者,在其中发挥着至关重要的作用。

鲲鹏 GCC 是搭载在鲲鹏平台上的高性能编译器,致力于为用户提供高效的性能体验,在编译算法、指令流水、运算库等方面进行了深度的优化。

了解鲲鹏 GCC 编译器

鲲鹏 GCC 编译器是基于开源 GCC 的高性能编译器,鲲鹏 GCC 与鲲鹏芯片协同,通过编译器技术充分发挥芯片的性能,提升鲲鹏硬件平台上业务的性能体验。除支持开源 GCC 通用功能之外,鲲鹏 GCC 主要对以下三个方面进行了增强。

更丰富的编译算法:提供丰富的优化算法,如内存布局优化、结构体拆分优化、自动矢量化等,大幅提升指令和数据的吞吐量。

更灵活的指令流水:适配鲲鹏平台的指令流水优化,发挥鲲鹏架构极致算力。

更高效的运算库:深度优化数学库算法,提供丰富的矢量数学函数接口,大幅提升数学计算的效率。

当前鲲鹏 GCC 编译器已广泛应用于多种 HPC 典型场景,如气象、安防、流体力学等,性能优势已经逐步展露。其中,SPECCPU 2006 和 SPECCPU 2017 benchmark 跑分平均优于开源 GCC 15% 以上,HPC 典型气象应用 WRF 优于开源 GCC 10% 以上。

GCC 编译器典型优化场景及其优化原理介绍

结构体拆分优化——大幅提升 Cache 命中率

SPECCPU 2006 benchmark 中有一款 libquantum 子项,它用于模拟量子计算机运行整数分解的 Shor 算法,该子项的一个瓶颈在于频繁连续的内存读写,简化后的代码示例如下图左边所示。

dd98c7bc-0b48-11ec-8fb8-12bb97331649.png

内存布局优化原理示意图

从循环中可以看出在结构体 node_t 中,data1 的使用率极高,而 data2 是不使用的。在源代码中,数据是以结构体数组的形式排布在内存中,按照普通编译器的编译方式,每次从内存中取数据时会将连续几个结构体数据加载到 cache 中,而 cache 包含的数据中有一半将不会参与运算,这会造成 cache 空间和带宽的浪费与性能的损耗。

鲲鹏 GCC 编译器会自动检查循环中适合优化的场景,通过将结构体拆分成两个结构体的方式(如上图右),将有效的数据紧凑排布起来,从而提高 cache 命中率和应用性能。经测试,此优化可以给 libquantum 子项带来80%的性能提升。除此之外,鲲鹏 GCC 编译器还支持结构体全展开、结构体成员重排列等内存布局优化,让应用程序的性能如虎添翼。

指令流水优化——更加适合鲲鹏的指令调度模型

通用的指令流水调度是基于各个指令的消耗和指令间的依赖关系合理地调度指令执行的顺序。在不进行指令流水优化时,6条指令依次顺序执行,假设每条指令需要两个单位的执行时间来计算得到结果,由于指令间存在数据依赖,在没有计算得到 V1 值的条件下,无法进行 V0 值的计算,由此导致了一个单位时间的等待,造成性能损失。

在使用指令流水优化后,在 V 系列指令执行等待的一个单位时间内加入了没有数据依赖的K系列指令的执行,所有指令的执行被合理地调度了起来,指令流水优化提升了指令执行的效率和程序运行的性能。

鲲鹏芯片基于 ARM 架构,对指令的消耗和指令间依赖关系的处理进行了优化和增强。鲲鹏 GCC 编译器导入了基于鲲鹏芯片的指令模型,使得指令流水优化的结果能够更加适合鲲鹏芯片的执行,提升鲲鹏软件运行的性能。经测试,该优化可以给 SPEC CPU 2006benchmark 带来2%的整体性能提升。

高性能运算库——极致性能的数学库和矢量数学函数

HPC 领域会运用到大量的数学函数计算,如 pow、sinf、log 等,也经常需要对整个数组内的数据做数学函数运算。如下图举例所示,左边是需要对 a 数组的所有数据进行 sinf 数学计算。

正常情况下会循环遍历 a 数组依次对每个数据进行 sinf 数学计算,无法获得进一步的性能提升空间。鲲鹏 GCC 编译器能够识别该场景,自动将 sinf 数学函数的调用转化为矢量化 vec_sinf 的数学调用,能够同时处理四个数据的 sinf 数学计算,并矢量化存取数据,得到性能的提升。经测试,该优化可以给 HPC 领域 NEMO 应用带来6%的性能提升。

ddd81796-0b48-11ec-8fb8-12bb97331649.png

矢量数学函数优化原理示意图

本文我们主要介绍了鲲鹏 GCC 编译器具有代表性的三方面优化特性:前中端编译算法优化、后端指令优化、运行时库优化。除此之外,还有软件预取、循环优化、分支预测、矢量化等编译优化特性的开发应用。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    456

    文章

    50873

    浏览量

    424069
  • GCC
    GCC
    +关注

    关注

    0

    文章

    107

    浏览量

    24850
  • 编译器
    +关注

    关注

    1

    文章

    1634

    浏览量

    49146
  • HPC
    HPC
    +关注

    关注

    0

    文章

    316

    浏览量

    23797

原文标题:【鲲鹏 DevKit 黑科技揭秘】┃鲲鹏GCC编译器,释放鲲鹏澎湃算力

文章出处:【微信号:gh_3a181fa836b6,微信公众号:华为计算】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Trit
    的头像 发表于 12-25 09:13 227次阅读

    Triton编译器如何提升编程效率

    开发者能够更快地开发出更高效的软件。 1. 代码优化 1.1 编译优化 Triton 编译器编译时进行了大量的代码
    的头像 发表于 12-25 09:12 218次阅读

    Triton编译器优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令
    的头像 发表于 12-25 09:09 213次阅读

    Triton编译器的优势与劣势分析

    Triton编译器作为一种新兴的深度学习编译器具有一系列显著的优势,同时也存在一些潜在的劣势。以下是对Triton编译器优势与劣势的分析: 优势 高效性能
    的头像 发表于 12-25 09:07 233次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器
    的头像 发表于 12-24 18:13 370次阅读

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的
    的头像 发表于 12-24 17:25 371次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译器框架,允许开发者添加新的编程语言特性
    的头像 发表于 12-24 17:23 404次阅读

    分享关于编译器的科普

    源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。 GCC比Clang支
    的头像 发表于 12-09 09:49 113次阅读

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    C7000<b class='flag-5'>优化</b>C/C++<b class='flag-5'>编译器</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 596次阅读
    Keil<b class='flag-5'>编译器</b><b class='flag-5'>优化</b>方法

    常用编辑器之GCC编译器

    GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器,最初是作为GNU操作系统的编译器编写的。GCC是一个编译器
    发表于 08-24 11:05

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性
    的头像 发表于 07-17 18:19 1935次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化编译器功能。LLM
    的头像 发表于 06-29 17:54 1511次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    SEGGER编译器是专门为ARM和RISC-V微控制器设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的C和C++语言功能。 除其他外,其主要功能包括: 1) 尺寸优化
    的头像 发表于 06-04 15:31 1477次阅读
    SEGGER<b class='flag-5'>编译器</b><b class='flag-5'>优化</b>和安全技术介绍 支持最新C和C++语言

    微软或将引入第三方数字游戏商店至Xbox平台

    微软选择引入这些第三方游戏平台,一方面可以增加自身拥有的硬件资源和服务优势;另一方面,也是为了吸引那些在电脑端能够自由选择游戏购买渠道的游戏用户。据悉,此前的Xbox系列产品都是只内置自家的商城。
    的头像 发表于 03-27 15:51 498次阅读