作者ericerix (我的帥,在於臉)
看板CompilerDev
標題[討論] JIT compiler中的instruction Selection
時間Tue May 17 16:21:26 2022
JIT compiler 會去分析所謂的hotspot,然後進行最佳化,
甚至JVM中市直接把hotspot的bytecode編譯成machine code 來強化效能,
但假如有一份程式碼長這樣:
a = b / c;
d = b % c;
傳統上,在instruction Selection會只產生一個組合語言,當硬體有指令能夠一次算出
商數和餘數。
但 JIT compiler 會這樣做嗎?
我自己認為不會,但我找不到相關佐證。
我認為不會的原因是:
1.JVM為例,他是以一行一行bytecode執行,hotspot在這兩個指令上他是否會知道能夠只產生
一個組合語言指令?
2.JIT compiler 在執行階段進行重新編譯,其時間應該也會被算進去執行時間,那麼是否
會以"越少重新編譯時間"來進行編譯?也就是說,較為優秀的Instruction Selection是否
需要更多時間,也因此JIT compiler不這麼做。
JIT compiler 在論文上好像很多在討論如何有效地產生程式碼,但好像不多在討論產生有效的程式碼
(至少我survey起來沒有)
我撰寫包含上面的除法、取餘數這樣的程式碼,並把他們包在迴圈內,
用 clang 編譯並執行,與java的相比,後者遜色很多。(程式邏輯相同)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.197.252 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/CompilerDev/M.1652775690.A.810.html
→ Chikei: 會。請看 1. openjdk9 compile.cpp#L3182 05/17 17:14
→ Chikei: 或 graalvm 2. openjdk9 AMD64NodeLIRBuilder.java#L83 05/17 17:15
推 sonicyang: JIT 編譯單位也不會是instruction單位吧..那也太沒有效 05/18 10:01
→ sonicyang: 率了。你整個BB一起下去,沒有道理本來的optimizer跟in 05/18 10:01
→ sonicyang: struction selection會發生的事情不會發生? 05/18 10:01