jubatusによるアセンブリ実行速度の自動チューニング

15
jubatus にににににににに ににににににににににににに @nushio & @kumagi #jubatus_hackathon http://connpass.com/event/8233/

Upload: takayuki-muranushi

Post on 25-Jun-2015

9.182 views

Category:

Data & Analytics


0 download

DESCRIPTION

Jubatusの回帰分析を使って、 アセンブリプログラムのエミュレートされた実行速度を自動チューニングしてみました。

TRANSCRIPT

Page 1: Jubatusによるアセンブリ実行速度の自動チューニング

jubatusによるアセンブリ実行速度の自動チューニング

@nushio & @kumagi

#jubatus_hackathon http://connpass.com/event/8233/

Page 2: Jubatusによるアセンブリ実行速度の自動チューニング

mission:スーパーコンピュータで走る

プログラムを自動的に早くする。

Page 3: Jubatusによるアセンブリ実行速度の自動チューニング

その1:融合加乗算 (fmadd)を使う1クロックあたり 2演算!

fmadd

a b c

a*b+c

Page 4: Jubatusによるアセンブリ実行速度の自動チューニング

fmadd

←クロック

add

mul

fmadd

add

mul

fmadd

add

mul

fmadd

add

mul

fmadd

add

mul

fmadd

fmadd

その2:命令を一杯詰め込む

before after

各命令にはレイテンシがあるため、毎クロック演算機を無駄なく使うためには、依存関係のない演算を次々に投入せねばならない。

Page 5: Jubatusによるアセンブリ実行速度の自動チューニング

その3:キャッシュを使う演算機

キャッシュ

メモリ

• 主メモリは大容量だが、アクセスに時間がかかる。

• 比較的小さなキャッシュに頻繁に使うデータは置き、なるべくキャッシュミスせずに使いまわす必要がある。

Page 6: Jubatusによるアセンブリ実行速度の自動チューニング

チューニング対象:各命令について・・・

•命令実行の優先度?•キャッシュに残す優先度?

fmadd

add fmadd

Page 7: Jubatusによるアセンブリ実行速度の自動チューニング

CPUエミュレータ

実行結果:

49881 クロックです

• 優先度 0.11• 優先度 0.30• 優先度 0.97• 優先度 0.79• 優先度 0.56• 優先度 0.25• 優先度 0.84• 優先度 0.23• ・・・

1万行くらいのアセンブリ

• アセンブリの各行に対し命令実行の優先度と、キャッシュに残す優先度を指定すると、実行過程をシミュレートし、所要時間を見積もってくれるエミュレータを作った。

Page 8: Jubatusによるアセンブリ実行速度の自動チューニング

CPUエミュレータ

クロック数(成績)

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

Regression

• ランダムに生成した優先度リストとクロック数の組が沢山あれば、・・・

• Jubatusにより未知の優先度リストに対してもクロック数が推定できる!

Page 9: Jubatusによるアセンブリ実行速度の自動チューニング

CPUエミュレータ

クロック数(成績)

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

Regression

でも・・・

本当にやりたいのはこっち。(良いクロック数を出すプログラムを探

す)逆問題?難しい?

Page 10: Jubatusによるアセンブリ実行速度の自動チューニング

CPUエミュレータ

クロック数(成績)

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

Regression

×重み×重み×重み×重み×重み×重み・・・・

Jubatusの線形回帰分析機は、入力ベクトルと内部の重みの内積で出力を推定している。

重みが大きい成分ほど、クロックを大きくするのに貢献している(悪影響)。

内部状態はjubadumpツールで覗けます!

Page 11: Jubatusによるアセンブリ実行速度の自動チューニング

CPUエミュレータ

クロック数(成績)

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

Regression

×重み×重み×重み×重み×重み×重み・・・・

× 1=‐

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

重みに -1を掛け算。若干の正規化を施したのち優先度として採用!

Page 12: Jubatusによるアセンブリ実行速度の自動チューニング

CPUエミュレータ

クロック数(成績)

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

Regression

×重み×重み×重み×重み×重み×重み・・・・

×-1=

• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• 優先度• ・・・

プログラム生成

追加まさにオンライン学習!

(&正規化 )

Page 13: Jubatusによるアセンブリ実行速度の自動チューニング

ランダム生成と対決!Random Jubatus

(最速)クロック数

70000~26919

35000~27768

テスト回数

5000 50

コア数 64コア 1コア所要時間 3時間くら

い1時間くらい

Page 14: Jubatusによるアセンブリ実行速度の自動チューニング

実行完了までのクロック数

(←小さいほど良い)

生成したプログラムの数

Random

Jubatus

Page 15: Jubatusによるアセンブリ実行速度の自動チューニング

Jubatusmakes it faster,

faster!

Jubatusの手軽さはやっぱり凄かった!皆様ありがとうございました!

Jubatusなら素早く、速くなる!