Upload
yasumasa-suenaga
View
664
Download
1
Embed Size (px)
Citation preview
もしも…Javaでヘテロジニアスコアが使えたら…
2011/11/09
末永 恭正( @YaSuenag )
自己紹介
• 末永 恭正 ( @YaSuenag )
• NTT OSSセンタ勤務
– Javaの障害解析なんかやってます
– たま~にOpenJDKのパッチ書いてます
• 主にJavaとlibcの間を漂う人間
• 基本、サンデープログラマー
– ObjectPascal(Delphi)大好き
– アセンブラも結構好き
すえなが やすまさ
Sumatraの
ゴール
Sumatraのゴールhttp://openjdk.java.net/projects/sumatra/
第一目標: GPU・APUでパワーアップ!
• GPU上で動作するコードの生成• ランタイムサポート Lambda APIサポート など
• GCのGPU上での実行
※ 2012/11/09現在
とっても単純な解
Xeon Phiに対応する
• Pentiumから派生したコアを搭載• 移植性が高い
– Linuxが動作するらしい– GCCやGDBが用意されているらしい
http://newsroom.intel.com/docs/DOC-2851
でも…
AMD & Oracleだから
• OpenCLベースでやるそうです
– 特定のハードウェアに依存させないみたいです
http://www.amd.com/us/press-releases/Pages/amd-oracle-openjdk-2012oct1.aspx
妄想してみる
~コード生成編~
コード生成
• JITへの適用
– スタブの用意
• 配列のcopyやfillがこのパターン
• ヘテロジニアスコアで実行可能なものにする
– ループunrollの適用範囲が広がる?
例えば…
public void discountPrices(int discount){
int[] prices = this.getPrices();
for(int idx = 0; idx < prices.length; idx++){
prices[idx] -= discount;
}
this.setPrices(prices);
}
配列内の価格をすべて一定額値引きしてみるメソッド ※イメージです
movq xmm0, discount
pshufd xmm1, xmm0, 0
xor ecx, ecx
LOOP_BEGIN:
movdqu xmm0, [prices + ecx]
psubd xmm0, xmm1
movdqu [prices + ecx], xmm0
add ecx, 16
cmp ecx, max_idx
jl LOOP_BEGIN
movq xmm0, discount
pshufd xmm1, xmm0, 0
movdqu xmm0, [prices]
psubd xmm0, xmm1
movdqu [prices], xmm0
movq xmm0, discount
pshufd xmm1, xmm0, 0
movdqu xmm0, [prices + 16]
psubd xmm0, xmm1
movdqu [prices + 16], xmm0
movq xmm0, discount
pshufd xmm1, xmm0, 0
movdqu xmm0, [prices + 32]
psubd xmm0, xmm1
movdqu [prices + 32], xmm0
ループ展開&
並列計算!
妄想してみる
~ランタイム編~
ランタイムサポート
• API– ForkJoinTaskの継承?
– 専用のスレッドプール?
• 暗黙的な利用– ソート、線形探索、ハッシュ計算、etc…
• JNI?
• スタブ?
– Lambda• Streams#parallel()(の先)を拡張?
懸念
1. カーネルのコンパイルはどうするよ?
– Offline Binary Kernel Generationなるものがあるらしい• http://developer.amd.com/Resources/documentation/Know
ledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=115
• 動的な機械語生成の部分にこのエッセンスを組み込む?
2. そもそも、フクザツな処理はできないのでは?
– Ideal Graph構築時ならなんとかなる?
妄想してみる
~ GC 編~
GC
• これが一番厄介だと予想
• メモリ転送、どうするよ!?
http://www.nvidia.co.jp/object/product-quadro-6000-jp.html
GCWorker
#1Worker
#2Worker
#n・・・
Javaヒープ
1. デバイスメモリ以上のヒープサイズではどうする?– JVM初期化時にOpenCLを利用できそうか判断する?
– G1みたいに、リージョン単位で制御できればOK?
2. そもそも、メモリ転送コストは?– CPUのみで処理した方が速いケースもある?
http://ms.toyota.co.jp/jp/wec/racereport/fuji_photo.html
MAKE THE FUTURE JAVAwith
Heterogeneous Multi-Core