JIT の話あれこれ

7
前へ 1 2 ・・ 5 次へ
ぷりん大王・鰹節大臣(兼任) @phoenixstarhiro

@dmikurube あらー、残念です > 一時文献。見つけたら是非教えてください :-) 適当に書いてるときは、あんまりパフォーマンス気にしないんですけど、たまに頑張らないといけない時に、という話でした。 個人的には JIT は夢を感じるんで、頑張ってほしいんですけどねー。

2013-07-02 23:30:16
Dai MIKURUBE @dmikurube

devirtualize 自体というよりは、多段の仮想関数呼び出しを分岐なしでいかにぶち抜くか、というのがポイントだと理解しているけど、そのへんも最近では事情違うのかな

2013-07-02 23:32:14
ぷりん大王・鰹節大臣(兼任) @phoenixstarhiro

@dmikurube あ、まさにその asm 職人 v.s. Compiler みたいな世界が面白いなぁと思います。ただ、現状 Java v.s. C++ みたいのってあんまり考えなきゃいけない複雑度変わらないような・・・。

2013-07-02 23:32:58
Dai MIKURUBE @dmikurube

@phoenixstarhiro JIT本だれか書かないのーってその辺のきつねさんに振ったことがあるような気がするw

2013-07-02 23:33:15
Deprecated: おねーちゃんですよ!⚓/xhl_kogitsune @xhl_kogitsune

確かに「__builtin_expect とか __builtin_prefetch とかくらいまでは普通」だと、それ手動で動的情報を静的コードにエンコードしているようなものだから、その上でJITで何を、ということになるとなかなか高度である。

2013-07-02 23:35:00
Dai MIKURUBE @dmikurube

@phoenixstarhiro WebKitそんなにいじってない側の人ですが、「ここでっ...ここで仮想関数使わせてくれたらコード量が1/10になるのに...っ!」ってことが2, 3回あったですはい。でもあれほんとに仮想関数入れたら遅くなったのかなあ、というのは未検証 (^^;

2013-07-02 23:38:56
Akso de la Malbono @Cryolite

GCC の devirtualization 関連の missed optimization バグ報告は CERN の中の人がちょこちょこ報告してたので,中でどういう要求があったのかは知りたい.まー,単に報告者個人の趣味だった可能性も相当程度あるけど.

2013-07-02 23:39:47
Dai MIKURUBE @dmikurube

@eomole @nya3jp なんとなく "JIT" の定義的な話に入りそうな感じですが、それこそ最新事情を追いかけていないのでなんとも言えない (でもそれは直感的な語彙としては普通に just-in-time optimization の範疇に入るような気がしますが)

2013-07-02 23:44:46
Akso de la Malbono @Cryolite

CERN の中の人がちょこちょこ報告してたバグの種類として他に ELF visibility 関連があるので,仮想関数(動的多態)を依存関係切るツールとして見た場合,どちらも相当程度の規模のコードベースが背景にあると仮定すればしっくりくるので,そういう感じかなー? 知らんけど?

2013-07-02 23:45:13
Masahiro Kasahara @mkasahara

仮想関数呼び出しのオーバーヘッドとかウソもいいところでしょ。もちろん多重継承しまくったらアレだけど、Javaだとできないんだから間接参照一回の世界での比較だよね。

2013-07-02 23:46:03
Dai MIKURUBE @dmikurube

本職の人に JIT 本書いてほしす

2013-07-02 23:46:09
Deprecated: おねーちゃんですよ!⚓/xhl_kogitsune @xhl_kogitsune

Java vs C++軸はJIT vs 静的コンパイル軸とはそれなりにずれてると思う。Java の場合、大元の言語が先でJITが後だったので、「JITを最大限に言語生産性に生かした言語」だとどうなるんだろう。

2013-07-02 23:47:43
Masahiro Kasahara @mkasahara

LinuxでstaticコンパイルしてPLT抜いてもほとんどスピード変わらないんだから間接参照1回抜いて速くなるわけが。

2013-07-02 23:47:52
Deprecated: おねーちゃんですよ!⚓/xhl_kogitsune @xhl_kogitsune

考えてみれば性能を気にするJIT言語とかほぼ書いたことないや……

2013-07-02 23:47:53
Masahiro Kasahara @mkasahara

頑張ったらJITで速くなるケースって多分いろいろあるんだけど、JVMの場合はエラーが起きたときにスタックトレースが正しく取れる、って制約加えるだけでほとんど何もできなくなる印象。

2013-07-02 23:50:18
Akso de la Malbono @Cryolite

C++ は別に静的コンパイルとか特に仮定してないよ,あれはただ単に実装詳細だよ,派.まだ歴史的・技術的蓄積は浅いとはいえ, LLVM にして JIT 実行もできるご時世だし特に.

2013-07-02 23:52:48
Masahiro Kasahara @mkasahara

C++ JIT とかその発想はなかった・・。

2013-07-02 23:54:10
鯉江 @koie

@Cryolite でも静的コンパイルできなくなるような言語仕様はいれないようにしてるんじゃ?

2013-07-02 23:56:56
Akso de la Malbono @Cryolite

個人的な理解では「静的コンパイルできなくなるような言語仕様はいれない」という視点は,直接は持ってないような気がする.「使わない機能のためにオーバーヘッドが掛からない」という視点に,あと,「既存のリンカなどの資産を継承する」という視点はおそらくある.

2013-07-03 00:06:03
Akso de la Malbono @Cryolite

ある作業を後段のステップに遅らせれば遅らせるほどリッチな情報が取れるのは当たり前で,これは別に最適化に限らず,たとえばコンパイラとリンカを一体化すれば C++ の規格の "no diagnostic is required" という言い回しがされている部分の多くが改善する.

2013-07-03 00:10:11
Masahiro Kasahara @mkasahara

最近は分岐予測凄いから、関数はなるべくインライン化しない方が速い、なんて例もいくつか持ってる。

2013-07-03 00:10:29
Masahiro Kasahara @mkasahara

レジスタ割り当てアルゴリズムが最強ならインライン化して遅くなるケースは基本、無いはずだけど実際にはそうならないし。

2013-07-03 00:11:37
Dai MIKURUBE @dmikurube

仮想関数については実際問題最近はどこまで消えるん? 常にほぼ0だというのは今でもさすがに無いと思うのだけど。とりあえず2年前くらいの時点で目に見えて影響があるケースを解説した記事が1, 2個あった気がするけど、その後そんなに変わったん?

2013-07-03 00:12:38
Akso de la Malbono @Cryolite

何が言いたかったんだっけ? えーっと,C++の規格の文言は,従来のコンパイル・リンク・実行というモデルを想定はしているだろうけれど,コンパイルやリンクを後段のステップに遅らせる実装を排除していないので,observable behaviorが規格に準拠してさえいればやりたい放題.

2013-07-03 00:13:35
前へ 1 2 ・・ 5 次へ