在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

華為編譯器吳峰的自述

工程師 ? 來源:華為人 ? 作者:華為人 ? 2020-10-16 12:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我是“翻譯官”優化師吳鋒

2015年我加入華為中軟院編譯器實驗室,那時候它還叫歐拉六部。

其實程序員敲代碼寫的編程語言機器是看不懂的,需要先翻譯成匯編語言,也就是一條條指令,再轉換成二進制,這樣機器才明白我們要做什么。編譯器就像是“翻譯官”,把程序員懂的編程語言轉化成機器認識的二進制,如果這個“翻譯官”看不懂編程語言或者翻譯的速度慢,在性能上的影響就可想而知了。

性能雖然可以通過手動改寫匯編語言(機器指令)進行優化,但匯編語言復雜難寫、工作量大、不易理解,如果不想寫匯編卻要有接近匯編的性能,就得依賴于一款強大的編譯器,這就是我們做編譯器的目標和使命。

從使用者到開發者

剛來華為的半年比較痛苦,技術討論的時候周圍的同事都是資深研發,說起技術來頭頭是道,我經常聽得云里霧里,搞的我每次開會心理壓力都很大。

編譯器這個東西門檻高,技術深。為了對這一塊有更深的理解,盡快上手,我記得當時是早上8點上班,我一般提前一小時7點到工位,結合實際的應用,帶著問題看代碼,我把編譯器里面一些常用模塊的代碼看了不知道多少遍。

因為在上一家公司近7年嵌入式領域的積累,我對性能(時延)比較敏感,漸漸地我也發現了自己擅長從用戶角度出發,提出產品的問題和優化點。從此我在華為所做的諸多大事小事,也基本離不開“優化”兩字。

很快我就迎來了自己的第一次出差,是去上海。一天主管過來說:“有個項目提了緊急援助,你們去攻關一下”。雖然這活一聽,就比較難搞定,但是對于還沒有轉正的我來說是一個很好的機會,于是我做好了摩拳擦掌、大顯身手的準備。在那之前,我只知道華為人為了業務是敢打敢拼,還沒有真正見識過,直到我參與了這次項目,第一次感受到為了沖刺交付的那股熱血。我到現在都記得,那段時間是冬天,很冷,但我在上研所“與世隔絕”,每天早上進去,晚上出來,仿佛外面雨雪風霜都與我們無關。

當時正值無線5G技術的大PK,各大廠商搞得如火如荼。無線同事們攻關數月,已經取得很大進展,但是在基帶業務上遇到性能瓶頸,業務處理時延值遠大于目標值。經過分析討論,分解給我們編譯器的任務是優化十幾個算法處理類函數,當前指標相比預期,有的甚至差距十幾倍乃至幾十倍。受到周圍熱血攻關的氣氛的影響,我拿到任務也是一頭扎進去,基于之前多年的經驗以及前段時間的苦學,面對第一個需要優化的函數,我從拿手的匯編開始分析,很快便發現了性能差的主要原因。因為對編譯器性能的了解,略微調整下算法中C語言某一段代碼的寫法,竟然就成功了,函數性能一下子提升X倍,達成了預期目標!這個結果令我興奮不已,這一定程度驗證了我之前努力的成效,更是給了我莫大的鼓勵,讓我對接下來的挑戰充滿信心。

最后經過兩周的攻關,我們達成了全部的目標,幫助產品解決了當前項目中的最大阻塞點。這次給我最深的感悟就是優化不是靠“磨”出來的,解決第一個的時候還在摸索,到后面慢慢就掌握了一些方法門路,越來越上手了。

數著cycle過日子的“火鍋小分隊”

如果說第一次攻關我們是援軍,那么第二次攻關我們就是主力軍,而我更是主力軍中的先鋒。

那會兒無線準備開發第一代自研矢量核,相比于普通核,芯片支持更寬的矢量計算,因此在矢量化后可以將運算次數縮減到1/X,讓芯片的性能提升X倍,我們團隊承接了其配套的編譯器開發,把實現矢量化功能的代碼“翻譯”給芯片。

業務對我們的要求非常高,我們第一次出來的版本在業務側驗證,性能僅有手寫匯編的30%,距離既定目標差的非常遠。在現場直面產品的我很受打擊。身體僵坐在工位上看著屏幕上的代碼,聽著業務側的同事拍桌子質問:“這么大的差距,怎么追?”沒有人能比我當時的心情更著急。接下來,我們和產品矢量核業務開發團隊開展聯合優化,一方面雙方可以一起探索如何寫出高性能的矢量核代碼;另一方面,在探索過程中,我們可以了解業務特點,發掘編譯器的待改進點。他們做功能,我們優化性能,雙管齊下。

各個模塊里業務側都有自己的期望值,一開始的差距甚至都在2倍3倍以上。經過我們和業務側的討論,不久就確定了各個項目里程碑計劃表。面對巨大的gap,沒有時間給我浪費,而且越到后面優化難度越大。

編譯器的性能優化目標都是參考極致手寫匯編來確定的通常我們用cycle(機器執行指令頻率)數作為衡量性能的指標。Cycle的數量越少,說明耗時越短,性能越優。在那段時間里,我的腦子里面全是cycle,今天優化了多少cycle,我們距離下一個里程碑還有多少cycle,在接下來的日子里需要每天保持優化多少cycle。夜晚別人是數著綿羊入睡,我大概是念叨著cycle入睡……雖然偶爾會有些焦慮,但只要我做到今日cycle今日畢,就是在朝著目標一步步前進!

還記得被cycle支配的漫長異地攻關期,上研食堂的小火鍋是我們的最愛,又快又方便。一次在距離里程碑期限快要到了的時候,還有許多cycle沒有優化完成。我和另外兩個同事嘴里吃著丸子,心里默默念叨著自己的cycle。到最后有個同事越吃越沒勁,只想趕快回到工位工作,這時候鍋里還剩了好幾個丸子。我就拉著他說:“你吃完,別浪費,你吃一個丸子我給你減少100個cycle怎么樣?”他撲哧一下笑出聲。其實,我也明白兄弟們壓力都很大,雖然很艱難,希望大家能有時間放松一下緊繃的弦……

在持續攻關了三個多月后,我們終于看到了曙光。一方面業務側性能已經基本達到預期,雙方已聯合摸索出一套適配當前芯片架構的代碼寫法,另一方面編譯器引入和增強了許多的算法,各個模塊都已達成了90%手寫匯編的既定目標,在一些典型業務上的性能結果逼近匯編。而我心里的大石頭終于放下了,我想自己再也不用每天數著cycle過日子了,這場仗,我們打贏了!

項目結束后,我們幾個兄弟大快朵頤地吃了頓火鍋,還點了不少小丸子,大家聊起攻關歲月,都覺得那場景恍如隔日,卻又記憶猶新……

“不能在我這掉鏈子”

這個項目結束不久后,我就成為了團隊的SE。對于普通開發而言,工作偏向于聚焦某一個問題;而作為SE,團隊的對外技術發言人,需要花更多的精力去分析項目中的技術風險,并探索新技術,需要背負整個項目的壓力。

由于編譯器在第一代核上的性能達到了匯編的90%,在之后一代代的芯片演進過程中,90%的指標自然就成為了業務側對我們編譯器特性的最低要求。然而特性越來越復雜,技術難度更像是一道難以跨越的鴻溝,我們的標準卻并沒有降低。

記得在某一代矢量核演進過程中引入了一個新特性,該特性是當代芯片架構演進的主要提升點,但是這個特性在業界沒有任何先例技術。開會的時候,設計的同事斬釘截鐵地說著:“做不到90%,就不能達標”。

當時聽到這話的我,瞬間壓力巨大。由于該特性的編譯器實現沒有業界可參考經驗,我們就是從零開始,需要完全自研的設計開發。關于這個技術的特點,編譯器現有的能力,將來這塊能不能做?能做到什么程度?這些都是我要考慮的風險點。我不敢輕易承諾,但有時候我又不得不承諾。

在這種承諾下,我只能自己消化。當務之急就是對這個最大的風險特性做一個能力評估,時間緊迫,平時開發一個新特性都要2-3個月,但那時的我沒有時間了。我花了2天時間通讀了該特性的所有描述,并理解每一個細節;同時還調研了業務場景,梳理哪些場景我們可以支持,哪些將會是風險,最后在兩周內給出commit(確認)。

之后,我又花了幾天時間實現了一個demo,進一步證實了我們的基本方案的可行性。基于方案初稿,我們評估可以覆蓋80%的業務場景,剩下的20%也可以通過一些定制化擴充來進一步支持。至此,我們可以commit 90%的目標,雖然仍有風險,但已經有了底氣。

那段時間,我經常在會后一個人默默復盤,思考著會議上大家提出的問題技術上是否可以通過外部交流幫助;編譯器到底需要解決哪些問題,才能風險可控,將來又怎么去彌補。畢竟我要對項目負責,對團隊負責。要知道到目前為止,我們團隊可是從來沒有過“敗績”,我們之前沒有一次掉鏈子的,更不能在我這掉鏈子,我做出的承諾就要達到。當然最終我們也是順利達成了目標。

與可信風險說“不”

2018年下半年,公司開始推行軟件工程能力提升項目,很多團隊都大刀闊斧地進行了可信改革,我們的編譯器優選版本定了5年更新一次的計劃。

編譯器在CT領域進行了近10年的交付,特別是在無線場景,支撐的芯片類型非常多,每種芯片類型編譯器支撐的版本也不盡相同,所以整個編譯器的“可信”工程是艱巨的,存在可信風險,亟需升級。另一方面我們是自研芯片的編譯器,在獲得高性能的同時還有很多的業務協同優化,牽一發動全身,一旦編譯器發生變更,涉及協同優化部分的代碼調整將會是最痛苦的煎熬。此外,自研芯片已經演進了那么多代,升級后每一代都要重新配套。而我們半年后將迎來客戶交付時間點,要在那之前完成6款自研編譯器的升級,時間上也將是一個巨大的風險。

面臨這么多困難當前,我們編譯器難道不升級了?

不,作為負責無線領域的編譯器SE,我要帶領團隊與時間賽跑,我們交付的編譯器不僅要高性能,還要高可信。我一直認為,作為SE,可信設計其實就是本職工作,并不是今天公司搞可信,我們才撲上去搞,而應該是在平時的設計開發中,就要去考慮的。雖然版本升級時間緊、任務重,但我還是給這次任務增加了額外的難度,既然未來是要繼續升級,考慮到后續代碼的可維護性,索性這次就直接從系統層面做一個大重構,一步到位!

說實話,這么重要又有難度的挑戰,我心里也打鼓,畢竟這不僅是編譯器團隊的事,還牽扯著協同業務的優化,更重要的是不能影響后續客戶的交付節奏和質量,我們不容有失。

半年的時間痛苦又漫長,通過多次攻關聯調,經過了很多個重構,我們終于完成了全部的自研芯片編譯器版本升級。不僅保障了升級后的各個編譯器在業務側性能沒有下降,消除了芯片應用上的可信風險;同時我們在升級過程中,也做了很多的架構解耦工作,包括開源與自研代碼解耦,多個芯片之間的接口抽象等,以利于下次升級。給客戶、也給我們自己交了一份滿意的答卷。如今再回首,我覺得一切都是最值得的,對于可信的風險,我們必須迎難而上!

最后,我想說,我們團隊是一支歷史悠久的團隊,伴隨著無線自研芯片一路成長,未來軟件優化更顯重要,編譯器在其中的重要性不言而喻。SE是團隊的領航者,不僅要保證當前項目的成功,還要為團隊的未來發展找技術方向。高性能、高可信不僅僅只是口號,而是需要我們去持續打造。

來源:華為人

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    459

    文章

    52420

    瀏覽量

    439561
  • 華為
    +關注

    關注

    216

    文章

    35186

    瀏覽量

    255645
  • 軟件
    +關注

    關注

    69

    文章

    5144

    瀏覽量

    89144
  • 編譯
    +關注

    關注

    0

    文章

    677

    瀏覽量

    33925
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

    在現代軟件開發中,編譯器扮演著至關重要的角色。它們不僅將高級語言代碼轉換為機器可執行的代碼,還通過各種優化技術提升程序的性能。Triton 編譯器作為一種先進的編譯器,通過多種方式提升編程效率,使得
    的頭像 發表于 12-25 09:12 ?731次閱讀

    Triton編譯器在高性能計算中的應用

    高性能計算(High-Performance Computing,HPC)是現代科學研究和工程計算中不可或缺的一部分。隨著計算需求的不斷增長,對計算資源的要求也越來越高。Triton編譯器作為一種
    的頭像 發表于 12-25 09:11 ?934次閱讀

    Triton編譯器的優化技巧

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

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

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

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

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

    Triton編譯器的常見問題解決方案

    Triton編譯器作為一款專注于深度學習的高性能GPU編程工具,在使用過程中可能會遇到一些常見問題。以下是一些常見問題的解決方案: 一、安裝與依賴問題 檢查Python版本 Triton編譯器通常
    的頭像 發表于 12-24 18:04 ?2904次閱讀

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton語言和編譯器的訪問,使得用戶可以在Python環境中
    的頭像 發表于 12-24 17:33 ?938次閱讀

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

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

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

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

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    C7000優化C/C++<b class='flag-5'>編譯器</b>

    Keil編譯器優化方法

    我們都知道,代碼是可以通過編譯器優化的,有的時候,為了提高運行速度或者減少代碼尺寸,會開啟優化選項。
    的頭像 發表于 10-23 16:35 ?2012次閱讀
    Keil<b class='flag-5'>編譯器</b>優化方法

    AI編譯器技術剖析

    隨著人工智能技術的飛速發展,AI編譯器作為一種新興的編譯技術逐漸進入人們的視野。AI編譯器不僅具備傳統編譯器的功能,如將高級語言編寫的源代碼轉換為機器可執行的代碼,還融入了人工智能技術
    的頭像 發表于 07-17 18:28 ?2651次閱讀

    人工智能編譯器與傳統編譯器的區別

    人工智能編譯器(AI編譯器)與傳統編譯器在多個方面存在顯著的差異。這些差異主要體現在設計目標、功能特性、優化策略、適用范圍以及技術復雜性等方面。以下是對兩者區別的詳細探討,旨在全面解析其內在差異。
    的頭像 發表于 07-17 18:19 ?2904次閱讀
    主站蜘蛛池模板: 日本不卡视频在线 | 欧美ggg666| 亚洲网站www| 高清人人天天夜夜曰狠狠狠狠 | 起碰免费视频 | 美女屁屁免费视频网站 | 亚洲成a人一区二区三区 | 黄色免费网站在线观看 | fxxx性xxx性| 国产精品资源站 | 国产在线观看色 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 性黄视频 | 35qao强力打造免费上线高清 | 91啦中文在线观看 | 五月天婷婷亚洲 | 亚洲天堂导航 | 中国成熟xxx视频 | 国产精品99r8免费视频2022 | 久久777国产线看观看精品卜 | 国产拍拍| 在线观看视频高清视频 | 888米奇在线视频四色 | 亚洲美女高清一区二区三区 | 色爽视频 | 特级一级毛片视频免费观看 | 美女和帅哥在床上玩的不可描述 | 欧美一级精品高清在线观看 | 久久黄视频 | 久久狠色噜噜狠狠狠狠97 | 天天干天天爱天天射 | 色综合小说天天综合网 | 美女张开大腿让男人桶 | 欧美一区二区不卡视频 | 美女爱爱网站 | 97青青| 日本高清不卡视频 | 四虎最新免费网址 | 午夜黄色网 | 中国业余老太性视频 | 五月婷激情|