線性掃描寄存器分配算法介紹

線性掃描寄存器分配

文章目錄

  • 線性掃描寄存器分配
    • 1. 算法介紹
    • 2. 相關概念
    • 3. 算法的實現
      • 3.1 偽代碼
      • 3.2 圖示
    • 參考文獻

  • 論文地址:

Linear Scan Register Allocation

? 我們描述了一種稱為線性掃描的快速全局寄存器分配的新算法。該算法不基于圖形著色,而是在變量生存范圍的單個線性時間掃描中將寄存器分配給變量。線性掃描算法比基于圖形著色的算法要快得多,并且易于實現,并且生成的代碼幾乎與使用基于圖形著色的更復雜且耗時的寄存器分配器獲得的代碼一樣高效。該算法適用于關注編譯時間的應用程序,例如動態編譯系統、“即時”編譯器和交互式開發環境。

不使用圖著色算法的根本原因是它要先構造好完整的干涉圖,才能在圖上著色,而干涉圖的構造代價太過高昂。應該說,圖著色過程中的大部分開銷都集中于干涉圖的構造階段。因此,雖然圖著色生成的代碼質量很高,但是對于講究編譯效率的現代編譯器來說,其時間成本是不可忽視的。對于對編譯時間更加敏感的 JIT 編譯器來說,則更是如此。除此之外,在實際的編譯工作中,人們發現了另外一個問題。由于在目前所有的硬件架構中,寄存器的數目都是有限的,故對于大型程序來說,寄存器不夠用可以說是必然存在的情況。換句話說,大型程序一定會產生大量溢出。問題就出現在這里,因為圖著色算法把重點放在解決“如何把所有的程序變量盡可能地分配到寄存器中”,如果程序一定會大量產生溢出,那么,關注“如何高效地溢出”比關注“如何盡量減少溢出”更有價值。

spill:溢出,是指目前的寄存器不夠使用,該部分數據需要借助sram或者堆棧區域的空間進行緩存協調的行為。

寄存器的數量是有限的,因此當程序中使用了過多的變量或產生了大量的臨時計算結果時,編譯器可能會出現寄存器不足的情況,導致寄存器溢出。這可能會導致編譯器將某些變量或數據存儲在內存中,而不是寄存器中,從而降低了程序的執行效率。

1. 算法介紹

線性掃描寄存器分配算法是一種用于在編譯器中分配寄存器的算法,旨在將程序中的變量映射到計算機的寄存器,以提高程序的執行效率。該算法通常用于編譯器的代碼生成階段,用于生成目標代碼。

線性掃描寄存器分配算法的基本思想是,通過一次線性掃描來分配寄存器,從而在程序的不同位置為變量分配寄存器。該算法不需要進行復雜的數據流分析,因此相對較快且簡單。以下是線性掃描寄存器分配算法的主要步驟:

  1. 構建活躍變量區間(Live Range):首先,通過數據流分析計算每個變量的活躍區間,即變量在程序中被使用的區間。活躍區間通常是變量在程序中的生命周期。
  2. 排序活躍變量區間:將所有活躍變量區間按照其結束位置從小到大進行排序。
  3. 遍歷活躍變量區間:從排好序的活躍變量區間列表中,按順序遍歷每個區間。在遍歷過程中,為每個區間分配一個可用的寄存器,并在需要時將之前分配的寄存器釋放。
  4. 確定溢出:如果某個區間沒有足夠的可用寄存器,即產生溢出,算法會嘗試將某個寄存器的值移出到內存中,以騰出空間來分配給新的變量。

線性掃描寄存器分配算法的優點在于簡單易實現,適用于中等規模的代碼生成。然而,它可能不如其他更復雜的寄存器分配算法(如圖著色法)在某些情況下能夠達到更高的性能。不同的編譯器可能會使用不同的寄存器分配算法,以根據特定的需求和目標平臺進行優化。

2. 相關概念

live interval:生命間隔
live range:生命周期

interference:相交(conflict)

active list:已經分配物理內存的節點集合

3. 算法的實現

3.1 偽代碼

image-20230814221420865

3.2 圖示

image-20230814221317558

image-20230814221239700

參考文獻

[1] Register Allocation in LLVM 3.0
[2] Hacker News - Register Allocation
[3] Linear Scan Register Allocation
[4] Register Allocation
[5] 博客圓-線性掃描寄存器分配

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36926.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36926.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36926.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echarts3d柱狀圖

//畫立方體三個面 const CubeLeft echarts.graphic.extendShape({shape: {x: 0,y: 0,width: 9.5, //柱狀圖寬zWidth: 4, //陰影折角寬zHeight: 3, //陰影折角高},buildPath: function (ctx, shape) {const api shape.api;const xAxisPoint api.coord([shape.xValue, 0]);con…

陪診小程序開發|陪診陪護小程序讓看病不再難

陪診小程序通過與醫療機構的合作,整合了醫療資源,讓用戶能夠更加方便地獲得專業醫療服務。用戶不再需要面對繁瑣的掛號排隊,只需通過小程序預約服務,便能夠享受到合適的醫療資源。這使得用戶的就醫過程變得簡單高效,并…

Redis使用規范及優化

緩存設計 緩存方案 普通緩存 查詢數據時,先查找緩存,如果有延長緩存時間并返回。如果沒有,再去查找數據庫,將查詢的數據再寫到緩存,同時設置過期時間。如果是靜態熱點數據,可以不設置緩存失效時間。 冷…

IntelliJ最佳插件

基于 IntelliJ 平臺的 JetBrains IDE 可能是當今最常見的 IDE 之一。它們的受歡迎程度在 JVM 語言社區中尤其明顯,IntelliJ IDEA 仍然是大多數開發人員的首選 IDE。所有這一切都是在一些新競爭對手的出現和老競爭對手克服以前的缺點并重新加入競爭者的情況下實現的。…

【EI/SCOPUS檢索】第三屆計算機視覺、應用與算法國際學術會議(CVAA 2023)

第三屆計算機視覺、應用與算法國際學術會議(CVAA 2023) The 3rd International Conference on Computer Vision, Application and Algorithm 2023年第三屆計算機視覺、應用與算法國際學術會議(CVAA 2023)主要圍繞計算機視覺、計算機應用、計…

PPT顏色又丑又亂怎么辦?

一、設計一套PPT時,可以從這5個方面進行設計 二、PPT顏色 (一)、PPT常用顏色分類 一個ppt需要主色、輔助色、字體色、背景色即可。 (二)、搭建PPT色彩系統 設計ppt時,根據如下幾個步驟,依次選…

Arduino驅動紅外二氧化碳傳感器(氣體傳感器篇)

目錄 1、傳感器特性 2、驅動程序 紅外激光傳感器是將成熟的紅外吸收氣體檢測技術與精密光路設計、精良電路設計緊密結合而制作出的高性能傳感器,具有高靈敏度、高分辨率、低功耗,響應快、抗水汽干擾、不中毒、穩定性高、使用壽命長等特點。本篇博文使用Arduino驅動紅外二氧…

Android學習之路(2) 設置視圖

一、設置視圖寬高 ? 在Android開發中,可以使用LayoutParams類來設置視圖(View)的寬度和高度。LayoutParams是一個用于布局的參數類,用于指定視圖在父容器中的位置和大小。 ? 下面是設置視圖寬度和高度的示例代碼: …

Win10基于 Anaconda 配置 Deeplabcut 環境

最近需要做動物行為學分析的相關研究,同時由于合作者只有 Windows 系統,于是只好在 Windows 中配置環境。說實話還真的是挺折磨的。。。 一、下載 Anaconda 可以通過清華源下載 Anaconda:https://mirrors.tuna.tsinghua.edu.cn/anaconda/ar…

算法leetcode|70. 爬樓梯(rust重拳出擊)

文章目錄 70. 爬樓梯:樣例 1:樣例 2:提示: 分析:題解:rust:go:c:python:java: 70. 爬樓梯: 假設你正在爬樓梯。需要 n 階你才能到達樓…

奧威BI數據可視化工具:報表就是平臺,隨時自助分析

別的數據可視化工具,報表就只是報表,而奧威BI數據可視化工具,一張報表就約等于一個平臺,可隨時展開多維動態自助分析,按需分析,立得數據信息。 奧威BI是一款多維立體分析數據的數據可視化工具。它可以幫助…

電腦xinput1_3.dll丟失的解決方法?哪個解決方法更簡單

最近在打開軟件或者游戲的時候,電腦提示xinput1_3.dll文件丟失的錯誤。這個問題導致我無法運行某些游戲和應用程序。通過一番嘗試和研究,我找到了一些修復xinput1_3.dll文件丟失的方法,并在此分享給大家。 首先,我了解到xinput1_3…

如何使用PHP編寫爬蟲程序

在互聯網時代,信息就像一條無休無止的河流,源源不斷地涌出來。有時候我們需要從Web上抓取一些數據,以便分析或者做其他用途。這時候,爬蟲程序就顯得尤為重要。爬蟲程序,顧名思義,就是用來自動化地獲取Web頁…

NSI45030AT1G LED驅動器方案為汽車外部及內部照明恒流穩流器(CCR)方案

關于線性恒流調節器(CCR):是一種用于控制電流的穩定輸出。它通常由一個功率晶體管和一個參考電流源組成。CCR的工作原理是通過不斷調節功率晶體管的導通時間來維持輸出電流的恒定。當輸出電流超過設定值時,CCR會減少功率晶體管的導…

SAP MM學習筆記20- SAP中的英文2 - SD中英文,日語,中文

SD模塊中的英文,日語,中文 對照。 販売管理 日本語英語中國語受注伝票sales order銷售訂單出荷伝票delivery order交貨訂單ピッキングリストpicking list領貨清單シップメント伝票shipment document發運單據出庫確認post goods issue發貨確認請求伝票b…

紅日ATT&CK VulnStack靶場(三)

網絡拓撲 web階段 1.掃描DMZ機器端口 2.進行ssh和3306爆破無果后訪問web服務 3.已知目標是Joomla,掃描目錄 4.有用的目錄分別為1.php 5.configuration.php~中泄露了數據庫密碼 6.administrator為后臺登錄地址 7.直接連接mysql 8.找到管理員表,密碼加密了…

提高學生學習效率的模擬考試系統

在如今競爭激烈的社會環境下,提高學生的學習效率顯得尤為重要。為了幫助學生評估自己的學習水平并提供有針對性的學習建議,開發一款模擬考試系統是非常必要的。 一、學生信息錄入 模擬考試系統首先需要學生信息錄入功能。學生可以通過一個簡單的表單填…

Unity游戲源碼分享-中國象棋Unity5.6版本

Unity游戲源碼分享-中國象棋Unity5.6版本 項目地址: https://download.csdn.net/download/Highning0007/88215699

【c語言】指針進階(超詳細)

文章目錄 ? 指向函數指針數組的指針📌指向函數指針數組的指針的定義📌指向函數指針數組的數組指針的使用 ?回調函數📌 回調函數的定義📌 回調函數的使用 ?qsort函數📌 qsort函數的作用📌qsort函數的定義…

【佳佳怪文獻分享】安全人機交互的學習責任分配與自動駕駛應用

標題:Learning Responsibility Allocations for Safe Human-Robot Interaction with Applications to Autonomous Driving 作者:Ryan K. Cosner, Yuxiao Chen, Karen Leung, and Marco Pavone 來源:2023 IEEE International Conference on …