
發布
注冊
/
登錄編譯優化的案例
案例分享|仿真軟件并行架構升級——基于編譯優化的風雷軟件性能突破
循環級緩存性能榨取</h3><ul><li>向量化加速:重構循環結構,利用Intel編譯器自動向量化技術將標量運算轉化為SIMD指令(如AVX512),單指令處理多數據;分塊與融合:通過循環分塊(Tiling)提升緩存命中率,融合獨立循環減少分支跳轉開銷;數據預取:優化內存訪問模式,引導編譯器自動插入預取指令,減少CPU等待延遲。</li></ul><p><br></p><h3>2. 鏈接時全局優化</h3><ul><li>LTO(鏈接時優化):借助LLVM工具鏈對全程序代碼進行跨模塊分析,內聯關鍵函數、消除冗余計算;IPO(過程間優化):跨函數邊界優化寄存器分配與指令調度,提升指令級并行度。</li></ul><p><br></p><h3>3. 零侵入式代碼重構</h3><ul><li>多維數組底層訪問優化:用多級指針替代傳統類封裝,減少隱式索引計算;編譯器指令嵌入:通過`pragma omp simd`等編譯制導語句引導編譯器生成高效機器碼。</li></ul><p><br></p><h2>四、結果測試:效率躍升與跨平臺驗證</h2><p class="ql-align-justify">在完成編譯優化方案的構建后,我們迎來了至關重要的實戰驗證階段。本次測試聚焦兩大核心目標:一是驗證優化后的風雷結構網格求解器在不同平臺上的計算效率是否實現顯著提升,二是確保優化過程絲毫未影響程序的計算精度。</p><h3>1.
展開 北鯤云超算平臺賦能蛋白設計助推生物制藥行業發展
北鯤云單節點206CPU核心,NvidaV100,A100等加速卡支持,多種交互方式,支持超過300種經過編譯優化的可以軟件,使生物信息研究、生命科學探索、生物制藥發展、蛋白設計等場景的云計算功能都能輕松達成,對推動行業發展具有重要意義。
超算力量|“神威·太湖之光”:“速度”與“應用”兼具
“神威·太湖之光”整機采用高密度運算超節點和高流量可擴展復合網絡架構,實現全系統高效可擴展與并行運行;采用層次包容、分級自治的軟硬協同容錯體系,實現整機系統的高可用;運用面向典型應用和機器結構的編譯優化、自適應精細平衡調度等技術,實現應用軟件的高效運行。
“神威?太湖之光”的系統峰值性能12.5億億次,持續性能9.3億億次,性能功耗比每瓦特60.5億次,2016~2017年,連續四次獲評世界第一。國家超級計算無錫中心主任楊廣文作了一個形象的比喻:它1分鐘的計算能力,需要全球72億人同時用計算器不間斷計算32年。
“神威·太湖之光”的應用
2016年起,“神威·太湖之光”與多家高校、研究機構、海內外企業開展合作,內容涉及天氣氣候、地球科學、海洋環境、材料設計、生物制藥、航空航天、圖計算、量子計算、生命科學、天體物理等眾多行業。
在航空航天領域,國家超級計算無錫中心聯合中國航空航天的相關研究機構,共同完成了C919大飛機多種飛行狀態的模擬,完成C919大型客機低速大攻角深失速特性的精細數值模擬。計算網格規模由千萬網格提升到兩億網格,計算時間縮短到10小時以內,大大減少風洞試驗次數、降低設計成本,對C919大型客機氣動設計工作具有重要的指導意義。
在生物醫藥領域,中科院上海藥物所利用優化后的DOCK虛擬藥物篩選軟件,使用40個申威16010處理器在4天內完成寨卡病毒的虛擬藥物篩選(若使用實驗室128個CPU的SGI Origin3800進行同等規模分子對接工作,需要超過四年的時間才能完成),極大地提高了工作進度,為相關研究節省了大量寶貴時間。
圖為惡性腫瘤靶標B-Raf激酶與藥物在原子水平上的相互作用
在地震預測方面
,“神威·太湖之光”也頗具神威。
展開 David Patterson:摩爾定律終結,計算機體系結構正迎來下一個黃金時代
體系結構設計者不僅需要了解底層器件、芯片工藝等,更需要了解編譯器和編程語言,軟硬結合才是后摩爾時代適用的新方法。
來源:內容來自36kr「鄭銦@超人學院」,謝謝。

DPU性能評測系統框架與測試流程
測試報告中除了給出不同測試用例的性能指標,還需要給出測試過程中的全部配置信息,包括:配置參數,包括服務器、存儲、網絡等其他硬件設施;安裝的操作系統、文件系統、測試工具等軟件版本;在測試過程中使用到的其他軟件程序;程序編譯優化選項。在執行 DPU Benchmark 時如果系統發送異常或者其他情況,需要在報告附錄中指出。
文章來源:智能計算芯世界
Itasca軟件(FLAC3D, 3DEC, PFC)推出Linux版本---一個更好的體驗?
此外,在Linux系統(Debian/Ubuntu或Fedora)下使用Abaqus,可以使用免費的Fortran編譯器(gfortran)運行子程序。一些ANSYS用戶也證實Fluent在Linux系統下比在Windows系統下運算速度快。
3 L版與W版的模型文件
在Linux版本上創建的模型保存文件(model save)能在Windows版本上加載,反之亦然。在Ubuntu系統下,也可以使用GUI和命令行,并以單一的Debian文件分發。
4 L版與W版的差異
(1) 一些微小的圖形用戶界面上的差異(如字體)。Ubuntu的用戶界面更炫酷一些,色彩更重些(我自己的體驗,使用過一段時間,但不太適應它的那種界面風格);
(2) 由于不同操作系統版本使用不同的編譯器,Linux版本的結果可能與Windows版本的結果不完全相同。所有的模型在Linux或Windows中都是可以重復的,不過當更新或改變編譯器時,由于浮點運算和編譯器優化的變化,模型結果會發生變化。有多大的不同?這取決于模型的類型。對于一些模型來說,由于編譯器的數值差異,結果會出現分歧。在某些情況下,差異可能小于0.1%。
(3) Linux系統的文件名和路徑是區分大小寫的,不應該包括空格。因此,從其他數據文件中調用數據文件時要小心。
(4) Linux版本構模型的C++插件功能還沒有實現。
5 串函數string()
題外話,這個部分與本文主題無關,剛好遇上啦,順便記錄一下。
展開 干貨|嵌入式C代碼的十種優化方案
這樣可能會影響某些編譯器的優化——比如,自動內聯。
九、采用遞歸
與LISP之類的語言不同,C語言一開始就病態地喜歡用重復代碼循環,許多C程序員都是除非算法要求,堅決不用遞歸。事實上,C編譯器們對優化遞歸調用一點都不反感,相反,它們還很喜歡干這件事。只有在遞歸函數需要傳遞大量參數,可能造成瓶頸的時候,才應該使用循環代碼,其他時候,還是用遞歸好些。
十、變量
1.register變量 在聲明局部變量的時候可以使用register關鍵字。這就使得編譯器把變量放入一個多用途的寄存器中,而不是在堆棧中,合理使用這種方法可以提高執行速度。函數調用越是頻繁,越是可能提高代碼的速度。
在最內層循環避免使用全局變量和靜態變量,除非你能確定它在循環周期中不會動態變化,大多數編譯器優化變量都只有一個辦法,就是將他們置成寄存器變量,而對于動態變量,它們干脆放棄對整個表達式的優化。盡量避免把一個變量地址傳遞給另一個函數,雖然這個還很常用。C語言的編譯器們總是先假定每一個函數的變量都是內部變量,這是由它的機制決定的,在這種情況下,它們的優化完成得最好。但是,一旦一個變量有可能被別的函數改變,這幫兄弟就再也不敢把變量放到寄存器里了,嚴重影響速度。看例子:
a = b();
c(&d);
因為d的地址被c函數使用,有可能被改變,編譯器不敢把它長時間的放在寄存器里,一旦運行到c(&d),編譯器就把它放回內存,如果在循環里,會造成N次頻繁的在內存和寄存器之間讀寫d的動作,眾所周知,CPU在系統總線上的讀寫速度慢得很。比如你的賽楊300,CPU主頻300,總線速度最多66M,為了一個總線讀,CPU可能要等4-5個周期,得。。得。。得。。想起來都打顫。
展開 干貨 | 新手經常忽略的嵌入式基礎知識點
編譯器是一種神奇的程序,能自動將代碼從復雜的語言轉換為簡單的語言。
操作系統
從本質上講,編譯后的計算機程序是CPU 指令的序列。如前所述,為臺式計算機編譯的代碼無法在智能手機中運行,因為二者采用不同的CPU體系結構。不過,由于程序必須與計算機的操作系統通信才能運行,編譯后的程序也可能無法在共享相同CPU 架構的兩臺計算機中使用。
為實現與外界的通信,程序必須進行輸入與輸出操作,如打開文件、在屏幕上顯示消息、打開網絡連接等。但不同的計算機采用不同的硬件,因此程序不可能直接支持所有不同類型的屏幕、聲卡或網卡。
這就是程序依賴于操作系統執行的原因所在。借助操作系統的幫助,程序可以毫不費力地使用不同的硬件。程序創建特殊的系統調用,請求操作系統執行所需的輸入/ 輸出操作。編譯器負責將輸入/ 輸出命令轉換為合適的系統調用。
然而,不同的操作系統往往使用互不兼容的系統調用。例如,與macOS或Linux 相比,Windows 在屏幕上打印信息所用的系統調用有所不同。
因此,在使用x86 處理器的Windows 中編譯的程序,無法在使用x86處理器的Mac 中運行。除針對特定的CPU 體系結構外,編譯后的代碼還會針對特定的操作系統。
編譯優化
優秀的編譯器致力于優化它們生成的機器碼。如果編譯器認為可以通過修改部分代碼來提高執行效率,則會處理。在生成二進制輸出之前,編譯器可能嘗試應用數百條優化規則。
因此,應使代碼易于閱讀以利于進行微優化。編譯器最終將完成所有細微的優化。例如,一些人對以下代碼頗有微詞。
展開 地平線的「新征程」與自主品牌汽車的「新機遇」
簡單理解就是,貝葉斯架構利用異構計算單元提供針對場景的最佳計算模式配比,實現降低計算功耗與延遲;利用高靈活大并發數據橋提升計算單元利用率;通過脈動張量計算核降低計算功耗、延遲和所需要的數據帶寬,最終通過編譯優化算法,達成高度并行的計算能力,這樣就有了征程 5 強大的真實 AI 性能輸出。
征程 5 已經通過了 ASIL - B 功能安全認證,基于征程 5 的系統可達到 ASIL - D 功能安全水準,并可通過安全島設計進行全時追控。
至此,征程 5 的硬件實力已經聊完,如果上述的技術細節比較難懂,那么你只需要知道征程 5 芯片的算力可以達到全球前三,性能可以比肩英偉達、特斯拉、Mobileye、華為,也是全球唯三的可以量產自動駕駛大算力、高性能芯片的中國科技公司。
而基于征程 5,地平線推出了全場景智能駕駛計算平臺 Matrix 5:
4 顆征程 5,單板算力為 512 TOPS;
雙板聯合算力為 1024 TOPS;
Matrix 5 支持 48 路攝像頭、多路毫米波雷達、4D 成像雷達、激光雷達、超聲波以及麥克風陣列的接入;
支持全 800 萬像素攝像頭輸出。
根據官方介紹,Matrix 5 能夠滿足自動駕駛、智能座艙等多個場景的應用,雖然地平線推出 Matrix 5,但 Ta 不會自己做域控制器,地平線只是提供一個參考設計,后續合作伙伴可以根據需求進行定制來滿足不同需求,Matrix 5 通過裁剪后可滿足的動態范圍是基礎 ADAS、L2/L2+、L3 及以上。
地平線表示,大陸集團、東軟睿馳、立訊精密、江蘇聯成開拓,已經基于地平線提供的 Matrix 5 參考設計開發出了多款的域控制器產品。
展開 Android 9 Pie 現已面向全球正式發布!
我們擴展了 ART 對執行特征的使用,以優化應用并減少已編譯應用代碼的內存占用量。ART 現可使用特征文件信息在設備上重寫 DEX 文件,幫助多個常見應用的內存占用減少高達 11%。我們期望借此減少系統 DEX 內存使用量并加快應用啟動時間。
Kotlin 優化
Kotlin 是 Android 開發的一等編程語言,如果您還未嘗試,還在等什么呢?我們在 Kotlin 性能方面進行了長期資源投入,同時持續加大對 Kotlin 的支持,如優化 Kotlin 代碼性能。在 Android 9 中,您會看到這項工作已初見成效 —— 我們已經改進了一些編譯器優化,尤其是那些針對循環的編譯器優化,以實現更好的性能。我們還將繼續與 JetBrains 合作,優化 Kotlin 生成的代碼。只需保持更新 Android Studio 上的 Kotlin 插件,您就能獲得所有最新的 Kotlin 性能更新。
今天,我們還在 Android 9 中發布了更新后的 API —— API 28 SDK (rev. 6),在部分最常用的 API 內加入可空值注解 (nullability annotation)。我們會在近期發布相關文章,提供更多細節信息,敬請期待。
現代化的 Android
在 Android 9 中,我們繼續投入大量資源,進一步打造更為現代的 Android 平臺與運行應用,進而推動我們在安全性、性能和穩定性這三方面長遠目標的實現。
我們在去年就已經宣布過 Google Play 將要求所有應用在 2018 年 11 月之前針對 Android Oreo (targetSdkVersion 26 或更高) 進行更新。因此,若您的應用目標平臺版本早于 Android 4.2 (API等級17),用戶在安裝您的應用時,系統會彈出警告對話框。
展開 全面分析特斯拉機器人“超算”芯片(超越GPGPU?)
3.4 Dojo架構處理器的編譯生態
D1處理器軟件棧
對于D1這類AI芯片來說,編譯生態的重要性不低于芯片本身。
在D1處理器平面上,D1被劃分為矩陣式的計算單元。編譯工具鏈負責任務的劃分和配置數據存儲,并且通過多種方式進行細粒度的并行計算,并減少存儲占用。
Dojo編譯器支持的并行方式包括數據并行、模型并行和圖并行。支持的存儲分配方式包括分布式張量、重算分配和分割填充。
編譯器本身可以處理各種CPU中常用的動態控制流,包括循環和圖優化算法。借助Dojo編譯器,用戶可將Dojo大型分布式系統視作一個加速器進行整體設計和訓練。
整個軟件生態的頂層基于PyTorch,底層基于Dojo驅動,中間使用Dojo編譯器和LLVM形成編譯層。這里加入LLVM后,可以使特斯拉更好的利用LLVM上已有的各種編譯生態進行編譯優化。
特斯拉Dojo 編譯器
4,結語
通過特斯拉AI日,我們看到了特斯拉機器人的真身,并且對其強大的“內芯”有了更多的認識。
特斯拉的Dojo核心與以往的CPU和GPU架構特點都有差別,可以說是結合了CPU特點的精簡GPU,相信其在編譯上也會與CPU和GPU有較大的差異。為了提升計算密度,特斯拉做了極致精簡的優化,并且提供了主動調節的電源管理機制。
特斯拉Dojo架構不止名為道場,其設計也確實以簡為道,以少為多。那這種架構會不會成為繼CPU和GPU之后的另一算力芯片架構典型形態呢?讓我們拭目以待。
展開 
生成式對抗網絡 (GAN) |簡介
編譯判別器:
這里我們用 binary_crossentropy loss 和 rmsprop 優化器編譯鑒別器。
將判別器設置為不訓練其權重(設置其 “trainable” 字段)。
Python3 語言
### START CODE HERE ###
discriminator.compile(loss="binary_crossentropy", optimizer="rmsprop")
discriminator.trainable = False
### END CODE HERE ###
4. 構建和編譯 GAN 模型 :
為 GAN 構建順序模型,傳遞包含生成器和判別器的列表。
使用二進制交叉熵損失和 rmsprop 優化器編譯模型。
展開 技術分享︱從 8192 到 10000:OpenRadioss 在國產超算上的一次關鍵突破
在我們最近的一次對于OpenRadioss的優化中,成功地突破了這個并行數上限,將最大并行數成功突破到了10000+進程,并成功地在國產太湖之光超算平臺進行了多次測試。為后期OpenRadioss處理大規模模擬問題提供了重要支持。
數值模擬流程圖
02 技術挑戰
突破這一限制的主要難點體現在以下方面:
1. 代碼層面
OpenRadioss在開發之時,內部的一些數組和進程數有著固定的限制,文件讀寫接口、數值方法、接觸算法、循環與判斷語句、優化算法等均與進程數強綁定。由于這些限制,需要完整找出限制并行擴展的代碼并進行修改,這一工作難度很大。
2. 編譯層面
在release模式下,編譯器會對代碼進行嚴格地優化和檢查,尤其是在一萬進程下某些數組和內存訪問方式會觸發警告,需要針對性進行優化。
3. 系統層面
在超算系統進行萬核測試時,往往會觸發ulimit限制和節點內存限制,導致作業直接被殺死。同時也可能會引發MPI庫的通信問題,因此需要對作業系統參數和作業命令進行針對性調整。
OpenRadioss模塊架構圖
03 成果展示
在完成代碼擴展后,我們將 OpenRadioss 移植至 太湖之光 超算,順利通過編譯,并完成了多個典型算例(如汽車碰撞、流固耦合等)的 一萬進程并行模擬。
所有算例均成功運行,輸出結果穩定,驗證了 OpenRadioss 在萬核規模下的可擴展性與可靠性。
展開 技術分享︱從 8192 到 10000:OpenRadioss 在國產超算上的一次關鍵突破
在我們最近的一次對于OpenRadioss的優化中,成功地突破了這個并行數上限,將最大并行數成功突破到了10000+進程,并成功地在國產太湖之光超算平臺進行了多次測試。為后期OpenRadioss處理大規模模擬問題提供了重要支持。
數值模擬流程圖
02 技術挑戰
突破這一限制的主要難點體現在以下方面:
1. 代碼層面
OpenRadioss在開發之時,內部的一些數組和進程數有著固定的限制,文件讀寫接口、數值方法、接觸算法、循環與判斷語句、優化算法等均與進程數強綁定。由于這些限制,需要完整找出限制并行擴展的代碼并進行修改,這一工作難度很大。
2. 編譯層面
在release模式下,編譯器會對代碼進行嚴格地優化和檢查,尤其是在一萬進程下某些數組和內存訪問方式會觸發警告,需要針對性進行優化。
3. 系統層面
在超算系統進行萬核測試時,往往會觸發ulimit限制和節點內存限制,導致作業直接被殺死。同時也可能會引發MPI庫的通信問題,因此需要對作業系統參數和作業命令進行針對性調整。
OpenRadioss模塊架構圖
03 成果展示
在完成代碼擴展后,我們將 OpenRadioss 移植至 太湖之光 超算,順利通過編譯,并完成了多個典型算例(如汽車碰撞、流固耦合等)的 一萬進程并行模擬。
所有算例均成功運行,輸出結果穩定,驗證了 OpenRadioss 在萬核規模下的可擴展性與可靠性。
展開 收藏!嵌入式AI創新峰會萬字干貨,16位大咖演講精華
朱樹磊認為,打造模型、接口、代碼三大編譯器是嵌入式平臺模型微服務化的關鍵。為此,大華股份基于組件規劃、技術棧選擇、架構設計三大環節,打造模型編譯器DNNX、接口編譯器IDLC、通用交叉編譯器UCC三大編譯器,將代碼開發轉化為編譯器、中間件等核心標準件的開發,實現微服務。
此外,朱樹磊還提到,要因地制宜實踐嵌入式算法開發的DevOps流程,始終把性能作為嵌入式平臺模型服務化的核心關注點。
3、知存科技:行業面臨存儲墻瓶頸,存算一體是最高效AI計算
知存科技CEO王紹迪主要以《存算一體AI芯片:AIoT設備的算力新選擇》為題,解讀存算一體技術如何帶來更加高效的AI計算。
▲知存科技CEO王紹迪在發表演講
作為存算一體AI芯片賽道的領軍者,知存科技主要研發基于Flash的存算一體芯片。王紹迪談到,現在行業已經進入到了后摩爾時代,尤其當芯片進入到7nm和5nm階段后,研發進度放緩,芯片研發成本急劇增高,每一次迭代單個芯片成本增加1倍。
但碎片化的IoT市場對先進工藝芯片的需求并不強烈,反而更青睞于低成本、低功耗、易開發的芯片。不過,目前芯片都都采用傳統的馮諾伊曼架構,最先進的存儲器仍采用1X工藝,“所以摩爾定律走到這個階段,存儲器的速度很難滿足現在行業的需求。”王紹迪說。
在他看來,現在行業大多都面臨著存儲墻問題,存儲器的數據搬運慢、搬運能耗大,緩存的大小和密度都很難提升。為了解決存儲器瓶頸的問題,許多公司都采用了不同的方案,包括3D Xpoint、近內存計算、近存儲計算和存內計算。
其中,王紹迪認為存算一體是最高效率的AI計算。
展開