もしも… javaでヘテロジニアスコアが使えたら…

18
もしも… Javaでヘテロジニアスコア 使えたら… 2011/11/09 末永 恭正@YaSuenag

Upload: yasumasa-suenaga

Post on 21-Jul-2015

657 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: もしも… Javaでヘテロジニアスコアが使えたら…

もしも…Javaでヘテロジニアスコアが使えたら…

2011/11/09

末永 恭正( @YaSuenag )

Page 2: もしも… Javaでヘテロジニアスコアが使えたら…

自己紹介

• 末永 恭正 ( @YaSuenag )

• NTT OSSセンタ勤務

– Javaの障害解析なんかやってます

– たま~にOpenJDKのパッチ書いてます

• 主にJavaとlibcの間を漂う人間

• 基本、サンデープログラマー

– ObjectPascal(Delphi)大好き

– アセンブラも結構好き

すえなが やすまさ

Page 3: もしも… Javaでヘテロジニアスコアが使えたら…

Sumatraの

ゴール

Page 4: もしも… Javaでヘテロジニアスコアが使えたら…

Sumatraのゴールhttp://openjdk.java.net/projects/sumatra/

第一目標: GPU・APUでパワーアップ!

• GPU上で動作するコードの生成• ランタイムサポート Lambda APIサポート など

• GCのGPU上での実行

Page 5: もしも… Javaでヘテロジニアスコアが使えたら…

[email protected]

※ 2012/11/09現在

Page 6: もしも… Javaでヘテロジニアスコアが使えたら…

とっても単純な解

Xeon Phiに対応する

• Pentiumから派生したコアを搭載• 移植性が高い

– Linuxが動作するらしい– GCCやGDBが用意されているらしい

http://newsroom.intel.com/docs/DOC-2851

Page 7: もしも… Javaでヘテロジニアスコアが使えたら…

でも…

AMD & Oracleだから

• OpenCLベースでやるそうです

– 特定のハードウェアに依存させないみたいです

http://www.amd.com/us/press-releases/Pages/amd-oracle-openjdk-2012oct1.aspx

Page 8: もしも… Javaでヘテロジニアスコアが使えたら…

妄想してみる

~コード生成編~

Page 9: もしも… Javaでヘテロジニアスコアが使えたら…

コード生成

• JITへの適用

– スタブの用意

• 配列のcopyやfillがこのパターン

• ヘテロジニアスコアで実行可能なものにする

– ループunrollの適用範囲が広がる?

Page 10: もしも… Javaでヘテロジニアスコアが使えたら…

例えば…

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

ループ展開&

並列計算!

Page 11: もしも… Javaでヘテロジニアスコアが使えたら…

妄想してみる

~ランタイム編~

Page 12: もしも… Javaでヘテロジニアスコアが使えたら…

ランタイムサポート

• API– ForkJoinTaskの継承?

– 専用のスレッドプール?

• 暗黙的な利用– ソート、線形探索、ハッシュ計算、etc…

• JNI?

• スタブ?

– Lambda• Streams#parallel()(の先)を拡張?

Page 13: もしも… Javaでヘテロジニアスコアが使えたら…

懸念

1. カーネルのコンパイルはどうするよ?

– Offline Binary Kernel Generationなるものがあるらしい• http://developer.amd.com/Resources/documentation/Know

ledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=115

• 動的な機械語生成の部分にこのエッセンスを組み込む?

2. そもそも、フクザツな処理はできないのでは?

– Ideal Graph構築時ならなんとかなる?

Page 14: もしも… Javaでヘテロジニアスコアが使えたら…
Page 15: もしも… Javaでヘテロジニアスコアが使えたら…

妄想してみる

~ GC 編~

Page 16: もしも… Javaでヘテロジニアスコアが使えたら…

GC

• これが一番厄介だと予想

• メモリ転送、どうするよ!?

http://www.nvidia.co.jp/object/product-quadro-6000-jp.html

Page 17: もしも… Javaでヘテロジニアスコアが使えたら…

GCWorker

#1Worker

#2Worker

#n・・・

Javaヒープ

1. デバイスメモリ以上のヒープサイズではどうする?– JVM初期化時にOpenCLを利用できそうか判断する?

– G1みたいに、リージョン単位で制御できればOK?

2. そもそも、メモリ転送コストは?– CPUのみで処理した方が速いケースもある?

Page 18: もしも… Javaでヘテロジニアスコアが使えたら…

http://ms.toyota.co.jp/jp/wec/racereport/fuji_photo.html

MAKE THE FUTURE JAVAwith

Heterogeneous Multi-Core