0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鯤鵬GCC編譯器具有代表性的三方面優(yōu)化特性

7riU_gh_3a181fa ? 來源:華為計(jì)算 ? 作者:華為計(jì)算 ? 2021-09-02 10:48 ? 次閱讀

編譯器作為重要的基礎(chǔ)軟件之一,在各個(gè)領(lǐng)域都有著非常廣泛的應(yīng)用。比如在嵌入式領(lǐng)域,如何在有限的空間內(nèi)豐富應(yīng)用的功能困擾著眾多的工程師,編譯器能夠輔助大幅度地降低應(yīng)用的體積,是工程師們不可或缺的好幫手。

再或是 HPC(High Performance Computing,高性能計(jì)算)領(lǐng)域聚焦于計(jì)算密集型的場(chǎng)景,像氣象預(yù)報(bào)、科學(xué)研究等,極致化的應(yīng)用性能是 HPC 領(lǐng)域不斷探索的課題之一,編譯器作為重要的性能貢獻(xiàn)者,在其中發(fā)揮著至關(guān)重要的作用。

鯤鵬 GCC 是搭載在鯤鵬平臺(tái)上的高性能編譯器,致力于為用戶提供高效的性能體驗(yàn),在編譯算法、指令流水、運(yùn)算庫等方面進(jìn)行了深度的優(yōu)化。

了解鯤鵬 GCC 編譯器

鯤鵬 GCC 編譯器是基于開源 GCC 的高性能編譯器,鯤鵬 GCC 與鯤鵬芯片協(xié)同,通過編譯器技術(shù)充分發(fā)揮芯片的性能,提升鯤鵬硬件平臺(tái)上業(yè)務(wù)的性能體驗(yàn)。除支持開源 GCC 通用功能之外,鯤鵬 GCC 主要對(duì)以下三個(gè)方面進(jìn)行了增強(qiáng)。

更豐富的編譯算法:提供豐富的優(yōu)化算法,如內(nèi)存布局優(yōu)化、結(jié)構(gòu)體拆分優(yōu)化、自動(dòng)矢量化等,大幅提升指令和數(shù)據(jù)的吞吐量。

更靈活的指令流水:適配鯤鵬平臺(tái)的指令流水優(yōu)化,發(fā)揮鯤鵬架構(gòu)極致算力。

更高效的運(yùn)算庫:深度優(yōu)化數(shù)學(xué)庫算法,提供豐富的矢量數(shù)學(xué)函數(shù)接口,大幅提升數(shù)學(xué)計(jì)算的效率。

當(dāng)前鯤鵬 GCC 編譯器已廣泛應(yīng)用于多種 HPC 典型場(chǎng)景,如氣象、安防、流體力學(xué)等,性能優(yōu)勢(shì)已經(jīng)逐步展露。其中,SPECCPU 2006 和 SPECCPU 2017 benchmark 跑分平均優(yōu)于開源 GCC 15% 以上,HPC 典型氣象應(yīng)用 WRF 優(yōu)于開源 GCC 10% 以上。

GCC 編譯器典型優(yōu)化場(chǎng)景及其優(yōu)化原理介紹

結(jié)構(gòu)體拆分優(yōu)化——大幅提升 Cache 命中率

SPECCPU 2006 benchmark 中有一款 libquantum 子項(xiàng),它用于模擬量子計(jì)算機(jī)運(yùn)行整數(shù)分解的 Shor 算法,該子項(xiàng)的一個(gè)瓶頸在于頻繁連續(xù)的內(nèi)存讀寫,簡化后的代碼示例如下圖左邊所示。

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

內(nèi)存布局優(yōu)化原理示意圖

從循環(huán)中可以看出在結(jié)構(gòu)體 node_t 中,data1 的使用率極高,而 data2 是不使用的。在源代碼中,數(shù)據(jù)是以結(jié)構(gòu)體數(shù)組的形式排布在內(nèi)存中,按照普通編譯器的編譯方式,每次從內(nèi)存中取數(shù)據(jù)時(shí)會(huì)將連續(xù)幾個(gè)結(jié)構(gòu)體數(shù)據(jù)加載到 cache 中,而 cache 包含的數(shù)據(jù)中有一半將不會(huì)參與運(yùn)算,這會(huì)造成 cache 空間和帶寬的浪費(fèi)與性能的損耗。

鯤鵬 GCC 編譯器會(huì)自動(dòng)檢查循環(huán)中適合優(yōu)化的場(chǎng)景,通過將結(jié)構(gòu)體拆分成兩個(gè)結(jié)構(gòu)體的方式(如上圖右),將有效的數(shù)據(jù)緊湊排布起來,從而提高 cache 命中率和應(yīng)用性能。經(jīng)測(cè)試,此優(yōu)化可以給 libquantum 子項(xiàng)帶來80%的性能提升。除此之外,鯤鵬 GCC 編譯器還支持結(jié)構(gòu)體全展開、結(jié)構(gòu)體成員重排列等內(nèi)存布局優(yōu)化,讓應(yīng)用程序的性能如虎添翼。

指令流水優(yōu)化——更加適合鯤鵬的指令調(diào)度模型

通用的指令流水調(diào)度是基于各個(gè)指令的消耗和指令間的依賴關(guān)系合理地調(diào)度指令執(zhí)行的順序。在不進(jìn)行指令流水優(yōu)化時(shí),6條指令依次順序執(zhí)行,假設(shè)每條指令需要兩個(gè)單位的執(zhí)行時(shí)間來計(jì)算得到結(jié)果,由于指令間存在數(shù)據(jù)依賴,在沒有計(jì)算得到 V1 值的條件下,無法進(jìn)行 V0 值的計(jì)算,由此導(dǎo)致了一個(gè)單位時(shí)間的等待,造成性能損失。

在使用指令流水優(yōu)化后,在 V 系列指令執(zhí)行等待的一個(gè)單位時(shí)間內(nèi)加入了沒有數(shù)據(jù)依賴的K系列指令的執(zhí)行,所有指令的執(zhí)行被合理地調(diào)度了起來,指令流水優(yōu)化提升了指令執(zhí)行的效率和程序運(yùn)行的性能。

鯤鵬芯片基于 ARM 架構(gòu),對(duì)指令的消耗和指令間依賴關(guān)系的處理進(jìn)行了優(yōu)化和增強(qiáng)。鯤鵬 GCC 編譯器導(dǎo)入了基于鯤鵬芯片的指令模型,使得指令流水優(yōu)化的結(jié)果能夠更加適合鯤鵬芯片的執(zhí)行,提升鯤鵬軟件運(yùn)行的性能。經(jīng)測(cè)試,該優(yōu)化可以給 SPEC CPU 2006benchmark 帶來2%的整體性能提升。

高性能運(yùn)算庫——極致性能的數(shù)學(xué)庫和矢量數(shù)學(xué)函數(shù)

HPC 領(lǐng)域會(huì)運(yùn)用到大量的數(shù)學(xué)函數(shù)計(jì)算,如 pow、sinf、log 等,也經(jīng)常需要對(duì)整個(gè)數(shù)組內(nèi)的數(shù)據(jù)做數(shù)學(xué)函數(shù)運(yùn)算。如下圖舉例所示,左邊是需要對(duì) a 數(shù)組的所有數(shù)據(jù)進(jìn)行 sinf 數(shù)學(xué)計(jì)算。

正常情況下會(huì)循環(huán)遍歷 a 數(shù)組依次對(duì)每個(gè)數(shù)據(jù)進(jìn)行 sinf 數(shù)學(xué)計(jì)算,無法獲得進(jìn)一步的性能提升空間。鯤鵬 GCC 編譯器能夠識(shí)別該場(chǎng)景,自動(dòng)將 sinf 數(shù)學(xué)函數(shù)的調(diào)用轉(zhuǎn)化為矢量化 vec_sinf 的數(shù)學(xué)調(diào)用,能夠同時(shí)處理四個(gè)數(shù)據(jù)的 sinf 數(shù)學(xué)計(jì)算,并矢量化存取數(shù)據(jù),得到性能的提升。經(jīng)測(cè)試,該優(yōu)化可以給 HPC 領(lǐng)域 NEMO 應(yīng)用帶來6%的性能提升。

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

矢量數(shù)學(xué)函數(shù)優(yōu)化原理示意圖

本文我們主要介紹了鯤鵬 GCC 編譯器具有代表性的三方面優(yōu)化特性:前中端編譯算法優(yōu)化、后端指令優(yōu)化、運(yùn)行時(shí)庫優(yōu)化。除此之外,還有軟件預(yù)取、循環(huán)優(yōu)化、分支預(yù)測(cè)、矢量化等編譯優(yōu)化特性的開發(fā)應(yīng)用。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    452

    文章

    50033

    瀏覽量

    419870
  • GCC
    GCC
    +關(guān)注

    關(guān)注

    0

    文章

    105

    瀏覽量

    24798
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1608

    瀏覽量

    48986
  • HPC
    HPC
    +關(guān)注

    關(guān)注

    0

    文章

    306

    瀏覽量

    23625

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

文章出處:【微信號(hào):gh_3a181fa836b6,微信公眾號(hào):華為計(jì)算】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Keil編譯器優(yōu)化方法

    我們都知道,代碼是可以通過編譯器優(yōu)化的,有的時(shí)候,為了提高運(yùn)行速度或者減少代碼尺寸,會(huì)開啟優(yōu)化選項(xiàng)。
    的頭像 發(fā)表于 10-23 16:35 ?120次閱讀
    Keil<b class='flag-5'>編譯器</b><b class='flag-5'>優(yōu)化</b>方法

    嵌入式學(xué)習(xí)-常用編輯器之GCC編譯器

    本帖最后由 jf_13411809 于 2024-8-28 10:26 編輯 GCC(GNU Compiler Collection)是由GNU開發(fā)的編程語言編譯器,最初是作為GNU操作系統(tǒng)
    發(fā)表于 08-27 10:17

    常用編輯器之GCC編譯器

    GCC(GNU Compiler Collection)是由GNU開發(fā)的編程語言編譯器,最初是作為GNU操作系統(tǒng)的編譯器編寫的。GCC是一個(gè)編譯器
    發(fā)表于 08-24 11:05

    維天地低代碼開發(fā)平臺(tái)助力第三方質(zhì)檢行業(yè)數(shù)據(jù)可視化

    三方檢驗(yàn)是由獨(dú)立于買賣雙方利益之外的第三方機(jī)構(gòu)(例如專業(yè)的監(jiān)督檢驗(yàn)機(jī)構(gòu))執(zhí)行的,這些機(jī)構(gòu)以公正、公平、權(quán)威的非當(dāng)事人身份,依據(jù)雙方共同認(rèn)可的法律、標(biāo)準(zhǔn)和合同等進(jìn)行商品的符合檢驗(yàn)和認(rèn)證活動(dòng)
    的頭像 發(fā)表于 08-09 13:59 ?206次閱讀
    <b class='flag-5'>三</b>維天地低代碼開發(fā)平臺(tái)助力第<b class='flag-5'>三方</b>質(zhì)檢行業(yè)數(shù)據(jù)可視化

    AI編譯器技術(shù)剖析

    隨著人工智能技術(shù)的飛速發(fā)展,AI編譯器作為一種新興的編譯技術(shù)逐漸進(jìn)入人們的視野。AI編譯器不僅具備傳統(tǒng)編譯器的功能,如將高級(jí)語言編寫的源代碼轉(zhuǎn)換為機(jī)器可執(zhí)行的代碼,還融入了人工智能技術(shù)
    的頭像 發(fā)表于 07-17 18:28 ?1351次閱讀

    人工智能編譯器與傳統(tǒng)編譯器的區(qū)別

    人工智能編譯器(AI編譯器)與傳統(tǒng)編譯器在多個(gè)方面存在顯著的差異。這些差異主要體現(xiàn)在設(shè)計(jì)目標(biāo)、功能特性、
    的頭像 發(fā)表于 07-17 18:19 ?1492次閱讀

    Meta發(fā)布基于Code Llama的LLM編譯器

    近日,科技巨頭Meta在其X平臺(tái)上正式宣布推出了一款革命的LLM編譯器,這一模型家族基于Meta Code Llama構(gòu)建,并融合了先進(jìn)的代碼優(yōu)化編譯器功能。LLM
    的頭像 發(fā)表于 06-29 17:54 ?1390次閱讀

    SEGGER編譯器優(yōu)化和安全技術(shù)介紹 支持最新C和C++語言

    SEGGER編譯器是專門為ARM和RISC-V微控制器設(shè)計(jì)的優(yōu)化C/C++編譯器。它建立在強(qiáng)大的Clang前端上,支持最新的C和C++語言功能。 除其他外,其主要功能包括: 1)?尺寸優(yōu)化
    的頭像 發(fā)表于 06-04 15:31 ?1296次閱讀
    SEGGER<b class='flag-5'>編譯器</b><b class='flag-5'>優(yōu)化</b>和安全技術(shù)介紹 支持最新C和C++語言

    Labview如何內(nèi)嵌操作第三方EXE程序!

    自己在網(wǎng)上搜了下相關(guān)資料,能把第三方EXE內(nèi)嵌進(jìn)入容器里,但是有個(gè)問題,這個(gè)第三方軟件必須手動(dòng)拖到容器正中間,手動(dòng)最大化。請(qǐng)問有什么方法可以自動(dòng)實(shí)現(xiàn)嗎? 下圖是我內(nèi)嵌的POLL 軟件。如圖!
    發(fā)表于 04-18 14:26

    微軟或?qū)⒁氲?b class='flag-5'>三方數(shù)字游戲商店至Xbox平臺(tái)

    微軟選擇引入這些第三方游戲平臺(tái),一方面可以增加自身擁有的硬件資源和服務(wù)優(yōu)勢(shì);另一方面,也是為了吸引那些在電腦端能夠自由選擇游戲購買渠道的游戲用戶。據(jù)悉,此前的Xbox系列產(chǎn)品都是只內(nèi)置自家的商城。
    的頭像 發(fā)表于 03-27 15:51 ?430次閱讀

    lsl文件中將text段copy到ram,編譯器具體是如何實(shí)現(xiàn)的?

    lsl文件中,將text段copy到ram,編譯器具體是如何實(shí)現(xiàn)的?
    發(fā)表于 02-02 07:23

    Android編譯優(yōu)化之混淆配置

    為了使用java8及后續(xù)java新版本的特性,Google增加了一步編譯過程—脫糖(desugaring),但這一步會(huì)導(dǎo)致更長的編譯時(shí)間,這也是為什么Google會(huì)推出D8和R8編譯器
    的頭像 發(fā)表于 12-21 09:21 ?1868次閱讀
    Android<b class='flag-5'>編譯</b><b class='flag-5'>優(yōu)化</b>之混淆配置

    編譯器優(yōu)化選項(xiàng)

    這一點(diǎn),需要了解編譯器的能力和限制;第,要了解硬件的運(yùn)行方式,針對(duì)硬件特性進(jìn)行優(yōu)化。本文著重展開第二點(diǎn)和第點(diǎn)。 簡單認(rèn)識(shí)
    的頭像 發(fā)表于 11-24 15:37 ?812次閱讀
    <b class='flag-5'>編譯器</b>的<b class='flag-5'>優(yōu)化</b>選項(xiàng)

    OpenAtom OpenHarmony 三方庫創(chuàng)建發(fā)布及安全隱私檢測(cè)

    ,通常在應(yīng)用開發(fā)中通過N-API暴露JS接口的方式使用,或直接編譯在OpenHarmony操作系統(tǒng)鏡像中。 鼓勵(lì)開發(fā)者通過OpenHarmony三方庫中心倉(地址為:https
    發(fā)表于 11-13 17:27

    解讀可穿戴設(shè)備代表性產(chǎn)品核心技術(shù)原理

    電子發(fā)燒友網(wǎng)站提供《解讀可穿戴設(shè)備代表性產(chǎn)品核心技術(shù)原理.doc》資料免費(fèi)下載
    發(fā)表于 10-31 11:22 ?0次下載
    解讀可穿戴設(shè)備<b class='flag-5'>代表性</b>產(chǎn)品核心技術(shù)原理