那曲檬骨新材料有限公司

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

    文章

    51192

    瀏覽量

    427324
  • GCC
    GCC
    +關注

    關注

    0

    文章

    108

    瀏覽量

    24890
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49291
  • HPC
    HPC
    +關注

    關注

    0

    文章

    324

    瀏覽量

    23853

原文標題:【鯤鵬 DevKit 黑科技揭秘】┃鯤鵬GCC編譯器,釋放鯤鵬澎湃算力

文章出處:【微信號:gh_3a181fa836b6,微信公眾號:華為計算】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么樣的代碼會被編譯器優化

    現在的編譯器有多智能,可能你辛辛苦苦寫的代碼,在編譯器看來就是幾句廢話,直接被刪除掉。
    的頭像 發表于 01-16 16:38 ?185次閱讀

    Triton編譯器與GPU編程的結合應用

    Triton編譯器簡介 Triton編譯器是一種針對并行計算優化編譯器,它能夠自動將高級語言代碼轉換為針對特定硬件優化的低級代碼。Trit
    的頭像 發表于 12-25 09:13 ?327次閱讀

    Triton編譯器如何提升編程效率

    開發者能夠更快地開發出更高效的軟件。 1. 代碼優化 1.1 編譯優化 Triton 編譯器編譯時進行了大量的代碼
    的頭像 發表于 12-25 09:12 ?337次閱讀

    Triton編譯器優化技巧

    在現代計算環境中,編譯器的性能對于軟件的運行效率至關重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優化技術,以確保生成的代碼既高效又適應不同的硬件架構。 1. 指令
    的頭像 發表于 12-25 09:09 ?340次閱讀

    Triton編譯器的優勢與劣勢分析

    Triton編譯器作為一種新興的深度學習編譯器具有一系列顯著的優勢,同時也存在一些潛在的劣勢。以下是對Triton編譯器優勢與劣勢的分析: 優勢 高效性能
    的頭像 發表于 12-25 09:07 ?396次閱讀

    Triton編譯器在機器學習中的應用

    1. Triton編譯器概述 Triton編譯器是NVIDIA Triton推理服務平臺的一部分,它負責將深度學習模型轉換為優化的格式,以便在NVIDIA GPU上高效運行。Triton編譯器
    的頭像 發表于 12-24 18:13 ?519次閱讀

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的張量運算的
    的頭像 發表于 12-24 17:25 ?484次閱讀

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的編譯器框架,允許開發者添加新的編程語言特性
    的頭像 發表于 12-24 17:23 ?647次閱讀

    分享關于編譯器的科普

    源代碼分析工具和IDE集成。GCC被構建成一個單一的靜態編譯器,這使得它非常難以被作為API并集成到其他工具中。 GCC比Clang支
    的頭像 發表于 12-09 09:49 ?172次閱讀

    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 ?819次閱讀
    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 ?2122次閱讀

    Meta發布基于Code Llama的LLM編譯器

    近日,科技巨頭Meta在其X平臺上正式宣布推出了一款革命的LLM編譯器,這一模型家族基于Meta Code Llama構建,并融合了先進的代碼優化編譯器功能。LLM
    的頭像 發表于 06-29 17:54 ?1567次閱讀

    微軟或將引入第三方數字游戲商店至Xbox平臺

    微軟選擇引入這些第三方游戲平臺,一方面可以增加自身擁有的硬件資源和服務優勢;另一方面,也是為了吸引那些在電腦端能夠自由選擇游戲購買渠道的游戲用戶。據悉,此前的Xbox系列產品都是只內置自家的商城。
    的頭像 發表于 03-27 15:51 ?533次閱讀
    优博娱乐城| 新西兰百家乐官网的玩法技巧和规则| 百家乐代理博彩正网| 大发888大奖| 澳门百家乐官网几副牌| 百家乐mediacorp| 伟德亚洲娱乐城| 做生意摆什么好招财| 全讯网开奖结果| 百家乐官网路单| 现场百家乐的玩法技巧和规则| 宝应县| 真人百家乐好不好玩| 真龙娱乐| 百家乐连闲几率| 德州扑克术语| 3U百家乐官网的玩法技巧和规则| 威尼斯人娱乐城首存| 百家乐官网投注心得和技巧| 博彩百家乐带连线走势图| 打百家乐官网如何赢分| 百家乐赌博公司| 网上百家乐官网骗人不| 百家乐大天堂| 玩百家乐官网高手支招篇| 百家乐官网德州扑克桌布| 大发扑克娱乐网| 三元玄空24山坐向开门| 大发888信用好不好| 如何看百家乐官网的玩法技巧和规则| 大发888娱乐城真假| 百家乐官网揽法大全| 威尼斯人娱乐场xpjgw5xsjgw| 百家乐官网娱乐网址| 大发888网页游戏| 新澳博百家乐官网的玩法技巧和规则 | 百家乐外套| 百家乐官网扑克发牌器| 真人游戏大全| 百家乐官网平玩法几副牌| 真人888|