[討論] JIT compiler中的instruction Selection

看板CompilerDev作者 (我的帥,在於臉)時間3年前 (2022/05/17 16:21), 編輯推噓1(104)
留言5則, 2人參與, 3年前最新討論串1/1
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
會。請看 1. openjdk9 compile.cpp#L3182
05/17 17:14, 1F

05/17 17:15, 3年前 , 2F
或 graalvm 2. openjdk9 AMD64NodeLIRBuilder.java#L83
05/17 17:15, 2F

05/18 10:01, 3年前 , 3F
JIT 編譯單位也不會是instruction單位吧..那也太沒有效
05/18 10:01, 3F

05/18 10:01, 3年前 , 4F
率了。你整個BB一起下去,沒有道理本來的optimizer跟in
05/18 10:01, 4F

05/18 10:01, 3年前 , 5F
struction selection會發生的事情不會發生?
05/18 10:01, 5F
文章代碼(AID): #1YWriAWG (CompilerDev)