[討論] JIT compiler中的instruction Selection
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
→
05/17 17:14,
3年前
, 1F
05/17 17:14, 1F
→
05/17 17:15,
3年前
, 2F
05/17 17:15, 2F
推
05/18 10:01,
3年前
, 3F
05/18 10:01, 3F
→
05/18 10:01,
3年前
, 4F
05/18 10:01, 4F
→
05/18 10:01,
3年前
, 5F
05/18 10:01, 5F