gpt4 book ai didi

scala - 是否可以禁用 JVM JIT 循环优化

转载 作者:行者123 更新时间:2023-12-02 20:32:21 26 4
gpt4 key购买 nike

我有非常简单的 scala 代码:

  def main(): Int = {
var i: Int = 0
var limit = 0

while (limit < 1000000000) {
i = inc(i)
limit = limit + 1
}
i
}

def inc(i: Int): Int = i + 1

我正在使用 JVM JIT 方法内联 inc 方法。当启用内联时,我得到了 2 秒与 4 纳秒的令人惊讶的好例子 - 我想确保或至少验证的是,同时没有循环优化占据宫殿。我看了一下机器代码,看起来没问题

0x000000010b22a4d6: mov 0x8(%rbp),%r10d  ; implicit exception: dispatches to 0x000000010b22a529
0x000000010b22a4da: cmp $0xf8033d43,%r10d ; {metadata('IncWhile$')}
0x000000010b22a4e1: jne L0001 ;*iload_3
; - IncWhile$::main@4 (line 7)
0x000000010b22a4e3: cmp $0x3b9aca00,%ebx
0x000000010b22a4e9: jge L0000 ;*if_icmpge
; - IncWhile$::main@7 (line 7)
0x000000010b22a4eb: sub %ebx,%r14d
0x000000010b22a4ee: add $0x3b9aca00,%r14d ;*iadd
; - IncWhile$::inc@2 (line 16)
; - IncWhile$::main@12 (line 9)
0x000000010b22a4f5: mov $0x3b9aca00,%ebx ;*if_icmpge
; - IncWhile$::main@7 (line 7)
L0000: mov $0xffffff65,%esi

我还检查了飞行记录器,没有发现任何可疑的东西,但由于我不是普通用户,我想与更有经验的人仔细检查。代码可查on github

最佳答案

当然,循环已经优化了。普通CPU无法执行只需几纳秒即可完成 10 亿次操作。

HotSpot 中有许多循环优化 - 您想禁用全部它们吗?例如

-XX:LoopUnrollLimit=0
-XX:+UseCountedLoopSafepoints
-XX:-UseLoopPredicate
-XX:-PartialPeelLoop
-XX:-LoopUnswitching
-XX:-LoopLimitCheck

等等。要禁用大部分循环优化,请使用

-XX:LoopOptsCount=0

关于scala - 是否可以禁用 JVM JIT 循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com