Fork me on GitHub
#clojure-japan
<
2015-07-23
>
tnoda02:07:48

Monomorphic だったベクタのメソッドのインラインキャッシュがタプルのせいで megamorphic になってタプルが導入されるとベクタが遅くなる可能性がある。タプルが入ると call site が分割される(PersistentVector のメソッドが呼ばれる回数が減る)ので,ベクタのメソッドが JIT コンパイルされるタイミングが後ろになる。(Criterium で今まで実施されているような) マイクロベンチマークでは,これら現象をうまく測定できない。ということでしょうか。

tnoda02:07:55

難しい

athos02:07:04

PersistentVectorのメソッドの呼び出し回数が減るというよりは、megamorphic(1つのcall siteで複数クラスのメソッドが呼び出される)の状態になることで、メソッドのインライン化が効かなくなるとかそういうことだと思います。

tnoda05:07:49

JIT コンパイルのことしか考えていなかったんですけど,Rich が bimorphic にしようと言っているのは devirtualization のほうですね。ご指摘ありがとうございました。

athos05:07:05

JITコンパイルという言葉を先に出したのは僕なので、僕が誤解の元ですね…すいません😞