| 動態形狀深度學習模型形狀推理 | 在深度學習模型中,當輸入張量未給定時,一些張量的精確形狀難以推斷,製約了計算圖編譯優化的空間。為了充分利用圖優化技術處理動態形狀的模型,需要構建一個符號維度係統。該係統引入符號維度表示張量形狀,並對動態維度之間的數學關係建模,進而設計一套針對符號維度和形狀的約束求解與查詢係統,以支持計算圖優化中的模式匹配過程,降低匹配過程中的時間複雜度。當前已有一些針對動態形狀深度學習模型的形狀推理係統,如BladeDISC[1], PyTorch-2[2]等,但存在對某些複雜約束(如隱式廣播維度)的描述能力較弱、符號匹配開銷大等不足。本課題研究動態形狀的描述、推理及符號匹配查詢,提升深度學習編譯技術的優化能力,涵蓋係統調研、算法複現和優化。 [1] Zhen Zheng, et al. BladeDISC: Optimizing Dynamic Shape Machine Learning Workloads via Compiler Approach. Proc. ACM Manag. Data,2023. [2] Jason Ansel, et al. PyTorch 2: Faster Machine Learning Through Dynamic Python Bytecode Transformation and Graph Compilation. ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), 2024. | | CodeSize 優化方法調研與實踐 | Codesize優化是一種編譯技術,旨在減少代碼體積,特別適用於資源受限的係統(如嵌入式設備、移動設備[1]、雲服務等)。減小代碼體積有助於節省存儲空間、提升傳輸效率和加快部署速度。常見的優化方法包括Function Merge[2]、Branch Fusion[3]、Loop Rolling[4]和OutInlining[5]等。無論是靜態語言(如 C/C++、Rust)還是動態語言(如Python),都可以通過適當的編譯器選項或/和工具進行Codesize優化,以滿足內存和存儲受限的場景需求。而對於受管語言(如Go、Java),其二進製文件中包含大量運行時元數據(如stackmap、safe point等占比超過了30%),傳統優化手段效果有限。本課題將通過軟件工程、編譯優化、數據壓縮等方法開展代碼體積優化研究,涵蓋調研、複現和實證分析,研究範圍可涉及多種編程語言與應用場景。 此外,全國大學生計算機係統能力大賽編譯係統設計賽挑戰賽道自2023年起引入代碼體積優化賽題,網址參見:https://compiler.educg.net/#/。 [1] Milind Chabbi et al., An Experience with Code-Size Optimization for Production iOS Mobile Applications, IEEE/ACM International Symposium on Code Generation and Optimization (CGO), 2022. [2] Rodrigo C.0.Recha et. al., Function Merging by Sequence Alignment, IEEE/ACM International Symposium on Code Generation and Optimization (CGO), 2019. [3] Rodrigo C. 0. Rocha et. al., HyBF: A Hybrid Branch Fusion Sirategy for Code Size Reduction, 32nd ACM SIGPLAN International Conference on Compiler Construction, 2023. [4] Rodrigo C.0.Rocha et. al., Loop Rolling for Code Size Reduction, IEEE/ACM International Symposium on Code Generation and Optimization (CGO), 2022. [5] Girish Mururu, Diferential Outlining: Outlining Similar Instructon Sequences. 2023 LLVM Dev Mtg. | | LLM 輔助的程序缺陷檢測與修複 | 程序缺陷檢測與修複是軟件開發的關鍵環節,旨在保證係統的可靠性、穩定性和安全性。隨著軟件規模和複雜性的增加,手動發現和修複程序缺陷變得愈發困難,不僅耗時費力,還容易出現遺漏。雖然自動化工具提升了開發效率,但在處理複雜代碼結構和多樣化場景時仍有局限。大模型(LLM, Large Language Model)通過預訓練展現了強大的代碼理解和生成能力,具有識別代碼中缺陷並提供修複建議的潛能 [1 - 5]。然而,大模型在輔助編碼、缺陷檢測與修複方麵麵臨著以下問題:1)代碼上下文感知能力不足,難以獲取特定代碼庫的相關信息;2)處理大型代碼庫時,受限於 token 數量,難以全麵理解代碼引用關係和背景信息。本課題旨在結合傳統程序分析技術,提升大模型的代碼上下文感知能力,增強其在缺陷檢測與修複中的效果,助力提高軟件開發效率和質量。 [1] Wen C, Cai Y, Zhang B, et al. Automatically Inspecting Thousands of Static Bug Warnings with Large Language Model: How Far Are We?[J]. ACM Transactions on Knowledge Discovery from Data, 2024, 18(7): 1-34. [2] Zhang J, Wang C, Li A, et al. An Empirical Study of Automated Vulnerability Localization with Large Language Models[J]. arXiv preprint arXiv:2404.00287, 2024. [3] Bouzenia I, Devanbu P, Pradel M. Repairagent: An autonomous, llm-based agent for program repair[J]. arXiv preprint arXiv:2403.17134, 2024. [4] Pearce H, Tan B, Ahmad B, et al. Examining zero-shot vulnerability repair with large language models[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2339-2356. [5] Li H, Hao Y, Zhai Y, et al. Enhancing Static Analysis for Practical Bug Detection: An LLM-Integrated Approach[J]. Proceedings of the ACM on Programming Languages, 2024, 8(OOPSLA1): 474-499. | | AI 輔助的類型推斷 | 在動態類型語言如JavaScript、Python中,類型信息僅在運行時才能完全確定,導致這些語言的程序需要依賴虛擬機解釋執行或即時編譯,性能通常低於靜態編譯類語言。然而,隨著互聯網技術的發展,動態語言的執行性能需求日益提高。一種可行的優化手段是通過靜態編譯提前處理,但類型信息的缺乏成為主要障礙。傳統基於程序分析的類型推斷在高度動態的語言如JavaScript上難以取得理想效果,並且現有的靜態類型推斷工具(如針對JavaScript的Flow、Hegel等)大多用於類型檢查,而非性能優化。近年來,AI 技術的進步為此問題帶來了新的解決思路,AI 輔助的類型推斷已成功應用於 Python 中[2],展現出其理解程序語義的能力。本課題旨在結合傳統的程序分析方法,引入AI輔助類型推斷,提升動態語言的類型推斷效果,從而為動態類型語言的靜態編譯優化提供新的路徑。 [1] Hackett B, Guo S. Fast and precise hybrid type inference for JavaScript[J]. ACM SIGPLAN Notices, 2012, 47(6): 239-250. [2] Peng Y, Wang C, Wang W, et al. Generative type inference for python[C]//2023 38th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, 2023: 988-999 | | GO 跨語言調用的透明綁定生成 | 現代軟件開發日益“多語言化”,即軟件係統通常由多種編程語言實現。前端常用如 Python、Go 等語言以提高開發效率,而後端則傾向於使用高效的係統編程語言如 C/C++。例如,Go 語言因其高效開發和原生支持高並發而廣泛應用於雲原生和微服務領域。由於大量現存的 C/C++ 代碼和高性能庫,Go 中通過 CGO 機製(跨語言調用)與 C 代碼互操作仍然至關重要。現有的一些半自動綁定生成工具(如 c-for-go、SWIG)可以利用 CGO 生成 C 代碼庫的綁定,但它們通常僅考慮 C 庫的 API 和使用約定,而不符合 Go 的開發習慣。例如,生成的綁定代碼可能要求開發者手動調用內存回收函數,且無法滿足特定 Go API 的需求。一個例子是 Go 官方社區為了滿足加解密庫 crypto 的 FIPS 認證需求,通過 CGO 透明地替換其內部實現為 C 庫 boringSSL(即 boringCrypto),實現了無縫功能和性能提升。為解決這一問題,CGORewritter[1]提出了一種半自動代碼生成方式,定義了透明綁定代碼生成所麵臨的挑戰,並實現了簡單的原型。本課題將進一步探索如何在同時考慮Go API以及C API的情況下,自動或半自動地為特定的Go API生成透明綁定代碼。 [1] Boyao Ding, Yu Zhang*, Jinbao Chen, Mingzhe Hu and Qingwei Li. CGORewritter: A better way to use C library in Go (ERA). 30th IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER). Macao, China, March 21-24, 2023. DOI: 10.1109/SANER56733.2023.00072 | | 基於模式匹配的量子計算的模式描述 | 在量子計算中,量子線路在執行過程中受到噪聲影響,導致正確性逐漸下降,因此編譯優化變得重要。目前,借鑒經典編譯的模式匹配方法已被廣泛應用於主流量子編譯框架,如 Qiskit 和 t|ket>,該方法具有應用無關性和硬件無關性,適應了量子技術的快速演進。然而,現有的模式匹配算法麵臨一些挑戰,尤其是量子線路的模式匹配被證明為 NP 完全問題,研究者們主要集中於設計啟發式算法以提升匹配效率。自動生成和驗證量子線路模式被認為是提高匹配效率的關鍵,但當前的模式描述主要集中在量子線路的結構,無法有效匹配沒有明確結構但有特殊語義的線路。同時,缺乏信息傳遞機製導致各次匹配過程間無法共享信息,從而影響匹配效率。因此,設計更有效的量子線路模式描述格式是一個重要研究方向。本課題旨在結合經典編譯優化技術,提升量子線路編譯過程的效率,特別是針對實時編譯算法(如 VQE)和在線編譯算法的實現,為量子計算的實際應用性能提供新思路。 [1] Raban Iten, Romain Moyard, Tony Metger, David Sutter, and Stefan Woerner. Exact and practical pattern matching for quantum circuit optimization. ACM Transactions on Quantum Computing, 3(1), Jan 2022. [2] Mingyu Chen, Yu Zhang*, Yongshang Li, Zhen Wang, Jun Li, Xiangyang Li. QCIR: Pattern Matching Based Universal Quantum Circuit Optimization Framework. 41st International Conference on Computer-Aided Design (ICCAD). San Diego, California, USA, 2022. | | 麵向WebView場景的JavaScript執行引擎的軟硬件協同設計 | WebView是一種可嵌入Android和iOS應用的視圖控件,用於顯示網頁內容。然而,在加載網頁時,JavaScript的執行通常是性能的主要瓶頸,尤其在複雜交互和動態內容中。作為動態類型語言,JavaScript在運行時需要頻繁進行類型檢查和動態解釋,盡管這為開發者提供了靈活性,但也帶來了性能負擔。JavaScript引擎通常使用即時編譯(JIT)技術,將部分代碼轉化為機器碼執行,但由於動態性和程序複雜性,這些優化常常基於假設,導致生成的代碼需要插入大量檢查,以防假設失效,而這些檢查又會影響性能。Parravicini等人通過將去優化的檢查設計為專門的硬件指令,有效減少了解釋器和JIT編譯器的開銷,從而提升了JavaScript的執行效率。本課題將關注軟硬件協同設計對JavaScript執行性能的影響,特別是在WebView場景中如何利用硬件加速技術提升JavaScript的解釋和編譯效率。 [1] Parravicini A, Mueller R. The Cost of Speculation: Revisiting Overheads in the V8 JavaScript Engine. 2021 IEEE International Symposium on Workload Characterization (IISWC). IEEE, 2021: 13-23. | | AI 輔助的編譯策略決策 | 在現代編譯器中,為了優化程序性能,通常會提供數百甚至上千種不同的優化選項。這些優化並不是簡單地執行一遍就能獲得最佳性能。優化選項之間的組合、閾值選擇(如內聯優化時的函數大小或複雜度閾值),以及針對不同應用程序的優化策略都需要仔細決策,以實現更好的性能。編譯器調優技術旨在通過調整編譯器的配置和優化策略,以生成更高效的機器代碼,從而提升程序的運行性能或減少資源消耗。然而,這些調優往往針對特定程序進行,並且要消耗大量的資源進行搜索,這使得它僅在有限場景下才有應用價值。本課題旨在將AI技術引入到編譯器調優中,輔助編譯策略決策,從而使編譯器調優能夠在更廣泛的場景下發揮使用。 [1] Compiler Autotuning through Multiple-phase Learning. ACM Transactions on Software Engineering and Methodology, 33(4):1-38, 2024. |
|