graalvmJVMLSに来ています。きしだのHatena今日はほぼ1日を通してコンパイラの話でした。ちなみに、普通はJavaの文脈でコンパイラというとJavaソースコードをJavaバイトコードに変換するツールを指すと思いますが、このイベントではJavaバイトコードをネイティブコードに変換する仕組みを指します。軽いまとめにしようと思ったけど、今日のWorkshopは結構おもしろかったのだけど資料も動画もなく、記憶だけが頼りなので、いまのうちにちゃんと書いておきます。JVMJITとAOTの話。このセッションはすごく面白かったので、ひとつ動画を見るならこれをおすすめします。朝ごはんを食べながら聞いてます。JITとAOTについて比較しながら話がすすみます。JIT結果をキャッシュすることについてJ9だなーと思いながら見てました。JITサーバー!!おもしろいことを考えるなーと思いました。そこまで含めた結果はこんな感じ。Imageについてのセッション。初期の想定と実際の利用が違う、という話と、今後どうするかという話でした。制約として、最適化するところを決めるのに全部のバイトコードを見る必要があるということなどがあります。初期の想定ではOracleデータベースに様々な言語を埋め込むために使うということで、コードはひとつのチームで書かれて制約に従うことができるし、プラットフォームも絞れるし、リフレクションやJNIは不要だと考えたということです。最初はTruffle推しだったんだな。実際にはマイクロサービスやコマンドラインで便利だった、と。すると初期の想定がくずれたということです。対応のひとつとして、LLVMを使うといろんなプラットフォームに対応できてiOSでも動かせる、って話。WorkshopGraalVMのネイティブイメージ生成についてのWorkshopでした。主な話題は実行時の話ではなくてコンパイルに時間がかかりすぎることでした。コード生成自体ではなく静的解析に時間がかかっているとのこと。部分コンパイルはどうか、という話には、最適化が呼び出され方で決まるところから難しいということでした。Libraryのようにjarライブラリを事前にコンパイルしておくというのも難しいとのこと。いうのを書きながら、gccのO2、O3みたいに最適化の深さを決めれるようにできないのかなと思った。機会があったら聞いてみよう。Reinhold氏からありました。Initializeをビルド時に行うか実行時に行うかを設定で書く必要があります。ビルド時にできる初期化はビルド時に行うほうが効率がよくなる一方、たとえばstart=currentTimeMillisのような処理をビルド時に行ってビルド時刻を埋め込むのは無意味なので実行時に行う必要があるからです。現在は安全側に振って実行時に行う設定になってますがこれを自動判定できないのか、ということです。難しそうで、MicronautやQuarkusではフレームワークに設定が埋め込まれているという話をしていました。あとは、Unsafeは特別対応が必要でたとえばNettyではDirectByteBufferを使っているとか、8バイトのオブジェクトハンドルが4バイトの圧縮ポインタになるのでヒープが圧縮できるとか、AppCDSはあまり助けにならないとか、コンパイルイメージのヒープは読み込み専用にできる(ので効率がよい)とか、マルチクラスローダーはIssueでモジュール構造が助けになるけどみんなモジュール使ってないとかいう話をしていました。それと、LLVMをバックエンドとして導入することについて、マルチスレッドが弱いという話とGCの問題があって、コンセプト検証の段階だけどiOSで動かすには重要という話。いう感じで、結構おもしろい話が繰り広げられていました。CLRCLRでのJITの話。興味ない人が多かったぽく、空席が結構できてました。明確には書いてないけど、前提としてGUIアプリで使うというのがあるっぽい。二回目の起動からはJIT結果を使いまわせるようにしてるという話。作ってて、いまは3世代目を作ってるということで、それぞれの世代の説明をしていました。TsaiLunch昨日のごはんが辛かったのだけど、今日は辛くなく、代わりにナスのようなものが辛かった。デザートもありますが、だいたい取り損ねる。jWarmUpAlibabaで作ってるjWarmupの話。startupどうやってウォームアップするかという話でした。質疑も結構でてましたが、よく覚えてない・・・プレゼン中は終始手元を見ながら話していましたが、質疑のときにようやく前を向いた写真がとれた。公開されてませんが、そのうち見れるようになると思います。TornadoVMJavaコードをGPUやFPGAで動かすという話。GPUデモとしてKinectデータから3Dを作るコードをGPU化するとすごく速くなるというのを見せていました。コードにはforループに@Parallelをつける感じ。するとOpenCLに変換される。Aparapiを思い出す。TwitterのChrisさんが、なんでSmatraを引き継がなかったの?って質問がでてました。あれはStreamの最適化だったからという答えだったけど、AMDがプロジェクトを止めているので引き継ぎにくいよねという話をskrbさんとしていました。あと、話の中ででなかったので、FPGAのビルド時間は問題にならないのか聞いてみたら、やはりコンパイルには2時間くらいかかるらしく、コンパイルをどのタイミングでやるかというオプションがあるらしいです。飛ばした資料を見せてくれました。あの場での質問、ドキドキした。こちらも動画は非公開になってますが、そのうち見れるようになるはず。UpdatePanamaの話。資料に子どもの写真がはさまって、みんな笑顔だった。構造体レイアウトとか。WorkshopMetropolisはJavaでJavaを実装するプロジェクトですが、Javaで実装したJITであるGraalの話で占められていました。introduction」と言って、えー自己紹介かよーって思った。そのあともいろいろ質問が出ていたりしたのだけど、席が遠いとよく聞こえなかったり、何の話をしてるのかよくわからなかった。EEの話?」という質問があって、Graalの話だったはずなので関係ないのではと思ったら「OpenJDKの話」のような返事で、つまりみんなよくわかってないからよくわからない話が繰り広げられてたんだなーという理解。そのあと、GraalにコントリビュートするならOpenJDKとGraalVMのどちらにすればいいの?という質問があって、これも結構ぐだぐだとしていたのですが、GraalVMのほうがupstreamであるということでした。それはどんな感じでsyncされるのという話になったのですが、どうもはっきり決まってない様子。だれかが、それを決めるのがWorkshopでは〜という発言をして、もっともだなと思いました。Reinhold氏が全部書きなおせばいいよと男前なことをおっしゃっていました。こんな感じで、ぐだぐだとした状況をぐだぐだと話していた感じですが、これこそWorkshopだなという感じでもありました。Dinner今日は公式ディナーの日。無限ビール!そして肉!最初は店がさわがしくて向かいの人と話せず隣のjyukutyoと話してたのですが、人が減って静かになったときに、向かいに座ってたZuluでコンパイラを開発している人と話をしました。1JVMLSに来ています。...2019-06-27GraalVMはどれだけ遅いかGraalVM流行ってますね。多くの人はGraalをAOTとして...2019-06-20NetBeansからHelidonを使うHelidonです、Helidon。3月別アーカイブリンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!nowokayさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。