亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于龍芯3A的編譯器及操作系統(tǒng)深度優(yōu)化

        2017-06-01 08:48:21何信華連彥澤王新
        關(guān)鍵詞:編譯器操作系統(tǒng)

        何信華 連彥澤 王新

        摘要:為了深度發(fā)揮龍芯3A1500的性能,文章提出了一種基于龍芯3A的編譯器及操作系統(tǒng)深度優(yōu)化方法,使用loongson3a指令集(mips64r2是loongson3a指令集的子集)重新編譯了Fedora21(即Loongnix1.0)操作系統(tǒng)。經(jīng)過(guò)試驗(yàn)驗(yàn)證,優(yōu)化后的操作系統(tǒng)性能大幅度提升,部分函數(shù)性能提升6倍以上。

        關(guān)鍵詞:龍芯處理器;編譯器;操作系統(tǒng);深度優(yōu)化;基礎(chǔ)指令集 文獻(xiàn)標(biāo)識(shí)碼:A

        中圖分類(lèi)號(hào):TP302 文章編號(hào):1009-2374(2017)08-0044-02 DOI:10.13535/j.cnki.11-4406/n.2017.08.021

        1 概述

        重新編譯srpm包共14781個(gè),編譯后生成39369個(gè)rpm包,該系統(tǒng)原生支持64位,同時(shí)兼容32位應(yīng)用程序,包括O32和N32,集成了office、瀏覽器、編譯工具、調(diào)試工具、QT圖形工具、媒體播放、云計(jì)算、數(shù)據(jù)庫(kù)等各類(lèi)應(yīng)用,是迄今為止龍芯處理器上最完整的操作系統(tǒng),提供海量軟件倉(cāng)庫(kù)。

        2 編譯器優(yōu)化

        GCC編譯器添加了一系列針對(duì)龍芯GS464處理器核(簡(jiǎn)稱(chēng)464核)的定制和優(yōu)化,主要工作如下:

        2.1 GS464、GS464E處理器核基礎(chǔ)支持

        將464核的基礎(chǔ)指令集從mips64升級(jí)到mips64r2。升級(jí)后,編譯器代碼生成時(shí)以mips64r2的標(biāo)準(zhǔn)進(jìn)行,與mips64相比,指令集中將增加如下指令:(d)ror、(d)seb、(d)seh、(d)ext、(d)mthc1、(d)mfhc1。

        根據(jù)464核官方文檔中描述的指令延遲特征,建立了后端流水線(xiàn)描述;添加龍芯三操作數(shù)乘法、除法、取模以及l(fā)oad到0號(hào)寄存器的預(yù)取指令模板支持;針對(duì)龍芯464處理器核在O32 ABI下(即FR=0),浮點(diǎn)寄存器應(yīng)按照mips3模式使用的特征,對(duì)奇數(shù)號(hào)浮點(diǎn)寄存器的使用規(guī)則進(jìn)行了定制;添加-march=loongson3a選項(xiàng),該選項(xiàng)雖然名字叫做3a,但實(shí)際上可以控制3A/3B/2H/2J處理器的優(yōu)化。在GCC代碼中,可以通過(guò)TARGET_LOONGSON_3A宏來(lái)實(shí)現(xiàn)對(duì)464核的定制優(yōu)化。

        2.2 函數(shù)序跋的128位訪存優(yōu)化

        本優(yōu)化在GCC的pro_and_epilogue遍實(shí)施,該遍生成函數(shù)的序和跋的RTL指令序列,該遍通過(guò)gen_prologue()(由模板define_expand prologue生成)調(diào)用到mips后端的對(duì)應(yīng)函數(shù),分別為mips_expand_prologue()和mips_expand_epilogue()。在這兩個(gè)函數(shù)中,分別有對(duì)應(yīng)于寄存器保存(序)和寄存器恢復(fù)(跋)的代碼生成函數(shù),通過(guò)函數(shù)mips_for_each_saved_reg來(lái)對(duì)每一個(gè)需要保存和恢復(fù)的寄存器生成對(duì)應(yīng)的store和load的RTL指令。

        為了實(shí)現(xiàn)該優(yōu)化,為mips_for_each_saved_reg增加一個(gè)參數(shù),用于區(qū)分保存/恢復(fù)。當(dāng)同時(shí)滿(mǎn)足條件時(shí),進(jìn)行特殊的代碼生成過(guò)程,否則依然按照原來(lái)的方式生成寄存器保存和恢復(fù)序列。

        實(shí)現(xiàn)該優(yōu)化后,可以提高代碼密度,減小代碼尺寸,并且減少訪存指令數(shù)量,從而減小訪存隊(duì)列和訪存部件壓力。但是由于龍芯3A處理器和3B處理器對(duì)128位訪存指令的實(shí)現(xiàn)細(xì)節(jié)不同,對(duì)3A處理器而言,128位訪存指令是在浮點(diǎn)訪存功能部件中實(shí)現(xiàn)的,使用時(shí)需要內(nèi)核將浮點(diǎn)協(xié)處理器置為可用狀態(tài),而內(nèi)核出于效率考慮,一般不使用浮點(diǎn)指令。因此3A處理器不宜在系統(tǒng)態(tài)使用128位訪存,而3B處理器在用戶(hù)態(tài)和系統(tǒng)態(tài)下均可使用。該優(yōu)化spec2000平均提升5~6%,有單個(gè)測(cè)試用例提升10%。

        2.3 64位數(shù)組指針乘法優(yōu)化

        464核由于不對(duì)hi/lo寄存器重命名,因此在執(zhí)行m指令時(shí),后續(xù)指令都要暫停取指重命名以等待其結(jié)果。在gcc的-mips3指令集選項(xiàng)下,乘法指令是雙操作數(shù)的(mult和multu),結(jié)果隱式寫(xiě)入hi/lo寄存器,當(dāng)使用-mips64指令集選項(xiàng)后,編譯器能夠產(chǎn)生三操作數(shù)的乘法指令,但僅局限于將兩個(gè)源通用寄存器內(nèi)的32位的有符號(hào)數(shù)相乘得到一個(gè)64位結(jié)果存入目標(biāo)通用寄存器。

        龍芯擴(kuò)展指令集提供了將兩個(gè)64位整數(shù)相乘的低64位結(jié)果存入結(jié)果寄存器的指令gsdmult和gsudmult,且龍芯還具有在執(zhí)行32位定點(diǎn)alu操作和訪存操作時(shí),將通用寄存器的高32位進(jìn)行隱式的符號(hào)擴(kuò)展的特點(diǎn)。

        該優(yōu)化可以在減小代碼密度的同時(shí),提升運(yùn)算速度,運(yùn)算速度的提升來(lái)自于三個(gè)方面:首先,指令變少;其次,會(huì)堵流水線(xiàn)的hi/lo移動(dòng)指令被消除;最后,鏈?zhǔn)絘lu操作減少,降低了464核上alu到alu的forwarding具有一拍延遲的影響。

        該優(yōu)化可以用于所有具有464核處理器的系統(tǒng)態(tài)和用戶(hù)態(tài)上,無(wú)任何副作用。

        2.4 將464核流水線(xiàn)描述實(shí)驗(yàn)性的改為跟5kc一致

        在對(duì)coremark程序的指令調(diào)度調(diào)優(yōu)中,發(fā)現(xiàn)將流水線(xiàn)描述改成跟5kc一致后,性能有2%~3%提升,但對(duì)SPEC2000進(jìn)行測(cè)試,卻發(fā)現(xiàn)26個(gè)程序有升有降。

        主要修改的是mips.md和loongson.md文件。需要注意的細(xì)節(jié)是mips.h文件中的枚舉enum processor_type以及mips.c文件中的static const struct mips_rtx_cost_data mips_rtx_cost_data[PROCESSOR_MAX]數(shù)組,以及mips.md文件中的(define_attr “cpu”…)語(yǔ)句中,關(guān)于不同處理器名稱(chēng)的出現(xiàn)順序應(yīng)該一致,否則將出現(xiàn)rtx insn的cost和流水線(xiàn)描述不能與實(shí)際的-march選項(xiàng)所選擇的處理器相匹配的問(wèn)題。而mips.c文件中的mips_cpu_info_table卻無(wú)需跟另外三者順序完全對(duì)應(yīng),該表的查找是采用字符串hash進(jìn)行的。

        優(yōu)化5的兩個(gè)patch,除了將在-march=loongson3a選項(xiàng)下的指令調(diào)度全部都變成以5kC的方式進(jìn)行調(diào)度,并對(duì)與464核的指令集有了更多的描述。

        2.5 指令實(shí)現(xiàn)數(shù)學(xué)庫(kù)中round、lround、trunc、cabs、floor和ceil函數(shù)

        glibc中的數(shù)學(xué)函數(shù)round、lround、trunc和cabs,這些函數(shù)使用c語(yǔ)言實(shí)現(xiàn),通過(guò)編譯器生成的二進(jìn)制目標(biāo)碼執(zhí)行效率低。由于round、lround、trunc、cabs等指令與glibc中對(duì)應(yīng)函數(shù)舍入方式不同,無(wú)法直接替換為對(duì)應(yīng)指令。通過(guò)gcc中的__builtin_round、__builtin_lround、__builtin_trunc等接口,實(shí)現(xiàn)glibc中對(duì)應(yīng)函數(shù)的功能。性能提升明顯,其中spec2000中189.lucas程序提升20%。

        glibc中的數(shù)學(xué)函數(shù)floor和ceil,這些函數(shù)使用c語(yǔ)言實(shí)現(xiàn),通過(guò)編譯器生成的目標(biāo)碼執(zhí)行效率低。由于floor、ceil等指令與glibc中對(duì)應(yīng)函數(shù)舍入方式不同,無(wú)法直接替換為對(duì)應(yīng)指令。通過(guò)gcc中的__builtin_floor、__builtin_ceil接口,實(shí)現(xiàn)glibc中對(duì)應(yīng)函數(shù)的功能。性能提升明顯,其中spec2000中177.mesa程序提升15%。

        3 數(shù)學(xué)庫(kù)優(yōu)化

        Fedora21基于GNU的glibc-2.20版本優(yōu)化了數(shù)學(xué)庫(kù)及一些string類(lèi)函數(shù),glibc的數(shù)學(xué)庫(kù)計(jì)算精度滿(mǎn)足IEEE754標(biāo)準(zhǔn)。操作系統(tǒng)的核心庫(kù)glibc(數(shù)學(xué)庫(kù)是其核心的一部分)使用上述優(yōu)化的GCC版本編譯,充分發(fā)揮loongson3a指令集優(yōu)勢(shì),流式DMA運(yùn)算特性支持,能夠數(shù)倍甚至數(shù)量級(jí)倍提升三角函數(shù)、矩陣運(yùn)算、FFT等的性能表現(xiàn)。

        龍芯處理器提供了abs、sqrt等專(zhuān)用指令,編譯器不會(huì)直接生成這些指令,從而采用效率很低的C代碼,通過(guò)手寫(xiě)匯編指令的方法直接使用這些專(zhuān)用指令。分別執(zhí)行百萬(wàn)次abs和sqrt函數(shù),使用abs指令的性能與C函數(shù)相比,性能提高32%,使用sqrt指令的性能與C函數(shù)相比,性能提高6倍。

        編譯器提供了大量的編譯選項(xiàng),不同的編譯選項(xiàng)影響生成的目標(biāo)代碼質(zhì)量,最終影響程序的運(yùn)行時(shí)間,采用編譯選項(xiàng)搜索優(yōu)化,找到適合龍芯處理器和ZY計(jì)算的最優(yōu)編譯選項(xiàng)。例如,統(tǒng)計(jì)6種三角函數(shù)的200萬(wàn)次計(jì)算時(shí)間,-O3情況下計(jì)算時(shí)間為12.3秒,-O2情況下計(jì)算時(shí)間為16.4秒,-O3與-O2相比,計(jì)算時(shí)間減少了25%。

        4 QT優(yōu)化

        目前為止已經(jīng)完成了初步優(yōu)化,優(yōu)化的主要工作如下:(1)QT4.7.4和QT4.8.6的向量指令優(yōu)化;(2)QT4.8.6中獨(dú)立繪制過(guò)程的部分算法級(jí)優(yōu)化;(3)QT4.8.6中OPENGL后端繪制過(guò)程的橢圓繪制的優(yōu)化;(4)QT4.7.4和QT4.8.6中內(nèi)存填充過(guò)程的優(yōu)化等。

        5 試驗(yàn)結(jié)果

        multi_calc包括sin、cos、asin、acos等32個(gè)函數(shù),是將測(cè)試2中的函數(shù)放在一起循環(huán)百萬(wàn)次計(jì)算,也分為dbl-64精度和flt-32精度??梢钥闯雠c單個(gè)函數(shù)測(cè)試均值的能提升基本一致,flt-32精度下fedora21優(yōu)化較fedora13提升較大。

        6 結(jié)語(yǔ)

        基于龍芯3A對(duì)編譯器及操作系統(tǒng)進(jìn)行了深度優(yōu)化,采用算法和內(nèi)嵌匯編指令的方法優(yōu)化熱點(diǎn)函數(shù),提高操作系統(tǒng)的整體性能。通過(guò)內(nèi)嵌匯編指令,一方面可以直接使用龍芯專(zhuān)用指令;另一方面可以減少指令數(shù)量,提高指令的執(zhí)行效率,從而減少程序的運(yùn)行時(shí)間。通過(guò)裁剪保留操作系統(tǒng)最基本的核心功能,從而保證操作系統(tǒng)的最小CPU和內(nèi)存消耗,滿(mǎn)足不同應(yīng)用場(chǎng)景的需要。

        參考文獻(xiàn)

        [1] 胡奇明.VxWorks操作系統(tǒng)的重新編譯和優(yōu)化研究與

        實(shí)現(xiàn)[D].國(guó)防科學(xué)技術(shù)大學(xué),2008.

        (責(zé)任編輯:蔣建華)

        猜你喜歡
        編譯器操作系統(tǒng)
        基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
        運(yùn)行速度大突破華為《方舟編譯器》詳解
        智能手機(jī)操作系統(tǒng)的分析與比較
        卷宗(2016年10期)2017-01-21 14:04:15
        國(guó)產(chǎn)桌面操作系統(tǒng)中虛擬化技術(shù)應(yīng)用研究
        計(jì)算機(jī)維護(hù)中操作系統(tǒng)還原技術(shù)的分析
        對(duì)計(jì)算機(jī)進(jìn)行操作系統(tǒng)重裝的維護(hù)
        基于單片機(jī)的嵌入式系統(tǒng)的開(kāi)發(fā)研究
        “操作系統(tǒng)原理”實(shí)驗(yàn)教學(xué)設(shè)置初探
        Microchip為MPLAB XC系列專(zhuān)業(yè)版編譯器推出低成本可續(xù)訂包月許可證
        通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
        香港三级日本三级a视频| 97久久久一区二区少妇| 一区二区三区免费观看日本 | 午夜tv视频免费国产区4| 玩弄人妻少妇500系列网址| 欧美自拍区| 日本熟妇hd8ex视频| 午夜视频手机在线免费观看| 国产日产欧产精品精品蜜芽| 8av国产精品爽爽ⅴa在线观看| 亚洲成人免费无码| 国产一区二区三区高清视频| 精品国产麻豆免费人成网站| 亚洲国产精品久久久av| 久久96国产精品久久久| 欧美xxxx黑人又粗又长精品| 久久久久欧洲AV成人无码国产| 免费在线av一区二区| 亚洲av无码国产精品色午夜软件| 成人精品视频一区二区| 丰满少妇被猛烈进入| 精品人无码一区二区三区| 国产白浆精品一区二区三区| 国产丝袜美腿在线视频| 狠狠综合久久av一区二区蜜桃| 欧美精品videossex少妇| 亚洲日韩欧美一区二区三区| 亚洲国产日韩综合天堂| 初尝人妻少妇中文字幕| 免费特级黄毛片| 91福利国产在线观看网站| 中文字幕国产精品专区| 巨爆中文字幕巨爆区爆乳| 欧美人与动牲猛交xxxxbbbb| 亚洲伊人久久大香线蕉影院| 国产自拍精品视频免费观看| 少妇免费av一区二区三区久久| 四虎影视免费永久在线观看| 国产av影片麻豆精品传媒| 国产精品麻豆成人av| 日本在线观看一二三区|