作者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://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1652775690.A.810.html
1F:→ Chikei: 会。请看 1. openjdk9 compile.cpp#L3182 05/17 17:14
2F:→ Chikei: 或 graalvm 2. openjdk9 AMD64NodeLIRBuilder.java#L83 05/17 17:15
3F:推 sonicyang: JIT 编译单位也不会是instruction单位吧..那也太没有效 05/18 10:01
4F:→ sonicyang: 率了。你整个BB一起下去,没有道理本来的optimizer跟in 05/18 10:01
5F:→ sonicyang: struction selection会发生的事情不会发生? 05/18 10:01