register-allocation

    1熱度

    1回答

    我在閱讀Briggs94對圖着色寄存器分配的改進。 我只是想知道什麼樣的程序會有鑽石干涉圖嗎?這是針對四個生存範圍w,x,y,z:w干擾x,x干擾z,z干擾y,並且y干擾w。沒有其他干擾了。 由於w和z都會干擾x和y,因此在時間軸上必須存在活動範圍x和y之間的空洞。 w和z都會穿過這個洞,導致w干擾z,矛盾。 (這裏的鏈接到紙上:http://citeseerx.ist.psu.edu/viewd

    1熱度

    2回答

    我知道兩個變量,比如a1和a2出現在Fortran中的Equivalence(a1,a2)語句中,然後它們佔據相同的內存空間。所以說這發生在一個過程中,其中a1和a2是該過程中的局部變量。 這意味着你不僅可以在內存中擁有a1和a2的副本嗎?因爲其中一個值將被覆蓋。你可以將a1保留在內存位置,並將a2保存在整個過程的註冊表中,這樣會好嗎? 我的問題基本上是:你可以在整個過程中註冊a1嗎? 我會說是的

    0熱度

    2回答

    是否有可能使cuda使用在函數外聲明的單線程作用域變量(寄存器或本地內存)? 我的大部分設備功能需要使用相同的變量。 我不想將與變量相同的變量作爲參數傳遞給我的所有設備函數,我想在函數之外聲明變量。 這可能嗎? 我的計算能力是1.2。 編輯:一個例子: __device__ __local__ int id; __device__ __local__ int variable1 = 3; __

    0熱度

    2回答

    我正在寫一個新的寄存器分配階段在llvm上。我按照這裏的說明http://llvm.org/docs/WritingAnLLVMPass.html#the-machinefunctionpass-class。 通行證不顯示在llc --help中。我改變了貪婪的分配算法,以「greedier」這個名字進行註冊並構建。即使這似乎並沒有反映在llc。 任何人都可以幫忙嗎?

    4熱度

    3回答

    當談到寄存器分配時,編譯文本(例如Cooper編寫的Engineering a Compiler)經常提到存儲在寄存器中的值需要是「安全的」 - 否則它們應該存儲在內存中。 是什麼讓一個值不安全的保存在寄存器中? 編輯:從書中語境: 「在內存到內存模式,分配器必須確定哪些值可以安全地在寄存器中,也就是說,它的值是明確保留」 我能找到的信息最多的是 「寄存器升級使用指針值的數據流分析來確定何時可以安

    3熱度

    1回答

    我正在完成本科課程的完成項目,包括寄存器分配算法的實驗分析。對於這個任務,我正在使用LLVM項目中的一組工具。 不過,我看了LLVM項目的文檔和尚未找到一個辦法把拼圖拼在一起。到目前爲止,我知道: 由於傳遞工作使他們參與LLVM,並知道我必須實現MachineFunctionPass pass。 我按照一些建議,看看Basic Allocator代碼,但不能太多瞭解。 我打算實現的分配器是基於圖着

    1熱度

    1回答

    我的問題是,我應該用什麼算法來實現該工程按照以下Python示例功能 translate: >>> translate('aa', 'a') [('S', -1)] >>> translate('a', 'aa') [('R', 0, 'x'), ('S', 1), ('W', 0, 'x')] >>> translate('abc', bca') [('R', 0, 'x'), ('R

    1熱度

    1回答

    我寫了一個簡單的虛擬機,它有指令來操縱堆棧,將堆棧值存儲到寄存器,將堆棧值裝入堆棧,將值從寄存器移動到寄存器並設置寄存器值...我試圖寫一個非常簡單的編譯成這個VM字節碼的語言,我還沒有做過任何指令從地址到地址跳轉,但我覺得VM有足夠的字節碼來存儲變量值。 虛擬機有7個寄存器:a,b,x,y,z,j和i。但是,如果我有12個包含簡單整數的變量,我將如何將它們存儲在寄存器中? 我以前就讀過這篇文章,

    0熱度

    1回答

    我正在爲llvm生成具有定製RISCV後端的代碼。當我沒有優化編譯(-O0)時,程序是可用的。當我使用優化編譯(-O2)時,沒有任何臨時寄存器(保存的調用者)在調用後重新加載。經過優化的代碼看起來似乎具有良好的寄存器分配,但它可以執行諸如使用類初始化程序的地址加載臨時寄存器,然後多次調用初始化程序而不重新加載寄存器的操作。 load t1 %(foo) jal t1 ... jal t1

    0熱度

    1回答

    我遇到了「註冊重新加載」這個詞,但我在網上找不到任何東西,只是它與註冊溢出有關。我想我知道什麼是溢出(當編譯器有更多的活動值比它有可用的寄存器,因此它必須將它們中的一些存儲在內存中),但什麼是重新加載?