他們提出了一個使用 Copy-and-Patch 技術的 Python 編譯器

Python徽標

Python 是一種高級編程語言。

最近主要之一 CPython 開發人員推出了新的 JIT 編譯器 對於Python 使用複製和修補技術,這是 最近的創新編譯技術因其速度快、易於維護而脫穎而出 及其與現有解釋器的完全整合。

複製和補丁 基於預定義庫的使用 二進位程式碼片段稱為 「模板」輸出最佳化的機器碼。這些模板是 AST(抽象語法樹)節點或位元組操作碼的預先建構實現,其中包含缺失值,例如立即文字、堆疊變數偏移量以及分支和呼叫目標。

它允許您以乾淨、純粹的方式系統地生成 C++ 中的二進位模板的變體。 使用 Clang+LLVM 編譯器基礎架構 在較低層級隱藏特定平台詳細資訊。

在運行時, 優化和程式碼產生變得更簡單的任務l 找到包含適當範本的資料表,建立它的實例,並使用複製和修補程序將其放置在所需位置,調整要在執行時修補的任何缺失值。

從更簡單的角度來看,它由編譯(Copy)現有原始程式碼和調整缺失值或特定修改(Patch)組成。

Copy-and-Patch大大方便了C語言編寫的解釋器的自動轉換 在 JIT 編譯器中,無需單獨建立程式碼產生邏輯和編譯表示。透過使用通用程式碼產生器,修復解釋器中的錯誤會自動解決 JIT 中的相同問題。

複製和修補方法依賴記憶體中重定位程式碼之間的相似性 當連結器載入目標檔案和在 JIT 中替換機器指令而不是字節碼時,是類似的任務。在程式執行期間​​,l列出了解釋器產生的字節碼指令, 和預編譯的機器碼 將每條指令複製到可執行記憶體區域,然後 的說明 它們被動態修改以即時替換處理後的資料。 對於 JIT,預定義模板是從已編譯的函數中複製的,並替換為必要的值,例如參數和常數。

使用複製和修補技術實現 JIT 涉及編譯 ELF 格式的目標檔或使用LLVM。此目標檔案包含有關字節碼指令的資訊以及有關必要資料替換的詳細資訊。在執行過程中,JIT 將解釋器產生的字節碼指令替換為機器代碼表示,同時調整計算所需的資料。儘管 JIT 實作在編譯期間需要 LLVM 作為依賴項,但執行時間元件不依賴外部依賴項,從而減少到大約 300 行手寫 C 程式碼和 3000 行產生的 C 程式碼。

在性能方面 建議採用複製和修補技術的 JIT 呈現出顯著的改進 與傳統方法相比。與傳統的 JIT (LLVM -O0) 相比,它的程式碼產生速度快了 100 倍,並且產生的程式碼 效率提高了 15%。 在WebAssembly編譯(Liftoff)領域,新的JIT 演示了程式碼產生速度提高了 5 倍,生成的程式碼運行速度提高了 50%。

與使用手動編寫彙編程式碼的最佳化 JIT(例如 LuaJIT)相比,所提出的 JIT 在 13 項測試中的 44 項中表現出色。儘管性能平均落後 35%,但必須強調的是,這種差異可以透過維護的顯著簡化和實施複雜性的降低來抵消。程式碼管理中效能和效率之間的這種平衡使建議的 JIT 成為效能領域中有吸引力的替代方案。

決賽選手如果您有興趣了解更多信息,您可以查看詳細信息 在下面的鏈接中。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。