JIT の話あれこれ

7
ぷりん大王・鰹節大臣(兼任) @phoenixstarhiro

静的型付言語で C++ よりパフォーマンスでるのって、最近聞く言語であるんだろうか。。。

2013-07-01 01:05:25
ぷりん大王・鰹節大臣(兼任) @phoenixstarhiro

爆速です(ただし C++ の 2-3 倍程度キリッ)(意訳)っていうのは見る気がするけど・・・。

2013-07-01 01:06:37
Egtra (ysk-noh) @egtra

@phoenixstarhiro Javaなんかは状況次第でC++より速いのではないでしょうか?実行時にしか分からない情報を使ってJITで最適化したり、GCありでメモリ確保も速くできたりするし(それともJavaは最近聞く言語に入らないって?)

2013-07-01 01:10:06
ぷりん大王・鰹節大臣(兼任) @phoenixstarhiro

. @egtra うわ、すみません。通知がなく気づきませんでした・・・。不勉強で恐縮ですが、現在のJITでネイティブコードより速くなるケースって結構あるものなんでしょうか? GCはメモリの回収に時間がかかるので、平均的にはマイナスだと思うのですが、いかがでしょうか?

2013-07-02 22:52:36
Shuhei Takahashi @nya3jp

JIT は実行時情報を使って最適化できるから静的コード生成より速いコードを吐けることがあるよ、という話はよく聞くしもっともだと思うけど、そういう素晴らしい最適化が出来るケースがどれだけあって、どういうアプリケーションだと有効なのか、というのは不勉強にして全然知らない。誰か教えて。

2013-07-02 22:57:03
Shuhei Takahashi @nya3jp

@phoenixstarhiro JIT するかどうかと GC を使うかどうかは直交しているのでは?

2013-07-02 22:57:44
ぷりん大王・鰹節大臣(兼任) @phoenixstarhiro

@nya3jp あ、もちろん。パフォーマンスに視点をおくと、個人的な印象では「JIT は夢語られること多いけど、現状不勉強でよくしらない(まさに nyaさんの直前のツイート)」「GCは平均的にはマイナス」。

2013-07-02 23:06:16
Shuhei Takahashi @nya3jp

@phoenixstarhiro ああ文脈を読み違えてました。なるほど。

2013-07-02 23:07:20
Dai MIKURUBE @dmikurube

@phoenixstarhiro Java の場合は平均 1.数倍 (2倍とか行かない) かつ、割とちょくちょく速くなることがある (極端に仮想関数を排除して超頑張った非人道的 C++ を相手にしなければ) という感じのような。ただしスループットで、リアルタイム性は分が悪いですね

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

GC って、メモリ管理を自動化することでプログラマの負荷軽減 & SEGV 回避、的な側面では効果があると思うんだけど、Runtime でパフォーマンスあがるのかと言われると現状疑問符だなぁ、という印象。

2013-07-02 23:08:42
Dai MIKURUBE @dmikurube

@nya3jp Java みたいな言語で JIT がよく貢献するのは仮想関数によるオーバーヘッドの除去なので (もちろん他にもあるけど) 仮想関数を使わずに設計すると泣きを見る複雑さでかつその辺に hot path があるようなアプリケーションだと割と勝てる気がする [要出典]

2013-07-02 23:11:43
Shuhei Takahashi @nya3jp

私はパフォーマンス重視なプログラムを書く機会があまりないゆとりプログラマなので GC が多少オーバーヘッドあっても許せます。だが Java お前はダメだ。

2013-07-02 23:12:10
Shuhei Takahashi @nya3jp

@dmikurube うーん、仮想関数呼び出しがボトルネックになりそうなコードって限られてきそうですね…… 全部仮想関数な Java だと死活問題なのは確かですが。

2013-07-02 23:13:12
Dai MIKURUBE @dmikurube

@nya3jp 君は WebKit (Blink) に血の涙をみる...

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

@dmikurube おっ。何かちょっと見るのに都合のいい参照先とかあったりしませんか? ちなみに c++ 側は仮想関数書かないはもとより __builtin_expect とか __builtin_prefetch とかくらいまでは普通だと思ってるのですが・・・。

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

予想外の方向から(いやむしろ予想内かっ!?)マサカリとんできたよっ!

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

@phoenixstarhiro そのレベルと比較したらまあ勝てるわけがないですw JIT関係を総覧するのにいい一次文献ってあんま無いんですよねー。私も欲しい。身近なとこでWebKitがhotなとこで仮想関数除去を超頑張ってますが、あれが人類が直に扱える複雑さの上限だと思う...

2013-07-02 23:20:07
Shuhei Takahashi @nya3jp

やっぱ Chrome ガチ勢こわいですね!

2013-07-02 23:25:04
chunjp @chunjp

仮想関数呼び出しにコスト掛かるって、modern CPUならあり得ないだろ……と書きかけて、そういえばあれは組み込み向けCPUとかでも動くんだったと思いだした

2013-07-02 23:25:17
Dai MIKURUBE @dmikurube

@phoenixstarhiro まあ職人が書いたらC++の方が速くなるのはまだ当然で、でも複雑さが上がるに連れてそれができる職人はどんどん少なくなってる、というくらいじゃないかと。アセンブラ手打ちでコンパイラに勝つのが不可能なのと同じ状況になるには、もっとブレイクスルー要りそう

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

C++ の静的な devirtualization でも LTO 効かせて頑張れば(震え声

2013-07-02 23:26:35
chunjp @chunjp

現代のリッチなCPUだと同じアドレスへの変数参照call/jmpは2回目以降は速いはず……

2013-07-02 23:26:54
Shuhei Takahashi @nya3jp

低数倍パフォーマンスを気にしない世界でまったり生きて行きたい。 #ゆとり

2013-07-02 23:28:12
Dai MIKURUBE @dmikurube

と言っても自分が JIT についてはもともと専門じゃない上に最近の状況をしっかりとは追いかけてないので、もっと最近の事情に詳しい人に登場願いたい

2013-07-02 23:28:15
1 ・・ 5 次へ