Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

13,053 views

Published on

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

Published in: Data & Analytics
  • Be the first to comment

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

  1. 1. #jubatus_hackathon http://connpass.com/event/8233/ jubatusによるアセンブリ 実行速度の自動チューニング @nushio & @kumagi
  2. 2. mission: スーパーコンピュータで走る プログラムを自動的に早くする。
  3. 3. その1:融合加乗算(fmadd)を使う 1クロックあたり2演算! a b c fmadd a*b+c
  4. 4. その2:命令を一杯詰め込む before after fmadd ←クロック add mul fmadd add mul fmadd add mul fmadd add mul fmadd add mul fmadd fmadd 各命令にはレイテンシがある ため、毎クロック演算機を無 駄なく使うためには、依存関 係のない演算を次々に投入 せねばならない。
  5. 5. その3:キャッシュを使う 演算機 キャッシュ • 主メモリは大容量だが、ア クセスに時間がかかる。 • 比較的小さなキャッシュに 頻繁に使うデータは置き、 なるべくキャッシュミスせ ずに使いまわす必要があ る。 メモリ
  6. 6. チューニング対象: 各命令について・・・ fmadd add fmadd • 命令実行の 優先度? • キャッシュに 残す優先 度?
  7. 7. • 優先度0.11 • 優先度0.30 • 優先度0.97 • 優先度0.79 • 優先度0.56 • 優先度0.25 • 優先度0.84 • 優先度0.23 • ・・・ 1万行くらいのアセンブリ CPUエミュレータ 実行結果: 49881クロックです • アセンブリの各行に対し 命令実行の優先度と、 キャッシュに残す優先度 を指定すると、実行過程 をシミュレートし、所要時 間を見積もってくれるエ ミュレータを作った。
  8. 8. CPUエミュレータ クロック数 (成績) • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ • ランダムに生成した優先度リス トとクロック数の組が沢山あれ ば、・・・ Regression • Jubatusにより未知の優先度リストに 対してもクロック数が推定できる!
  9. 9. CPUエミュレータ クロック数 (成績) • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ でも・・・ Regression 本当にやりたいのはこっち。 (良いクロック数を出すプログラムを探す) 逆問題?難しい?
  10. 10. CPUエミュレータ クロック数 (成績) • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ ×重み ×重み ×重み ×重み ×重み ×重み ・・・・ Regression 内部状態は jubadumpツールで 覗けます! Jubatusの線形回帰分析機は、 入力ベクトルと内部の重みの内積で出力を推定している。 重みが大きい成分ほど、クロックを大きくするのに貢献している(悪影響)。
  11. 11. CPUエミュレータ クロック数 (成績) • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ ×重み ×重み ×重み ×重み ×重み ×重み ・・・・ ×‐1= Regression • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ 重みに-1を掛け算。 若干の正規化を施したのち優先度として採用!
  12. 12. CPUエミュレータ クロック数 (成績) • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ ×重み ×重み ×重み ×重み ×重み ×重み ・・・・ ×-1= (&正規化) Regression • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • 優先度 • ・・・ プログラム生成 追加 まさにオンライン学習!
  13. 13. ランダム生成と対決! Random Jubatus (最速) クロック数 70000~ 26919 35000~ 27768 テスト回数5000 50 コア数64コア1コア 所要時間3時間くらい1時間くらい
  14. 14. 実行完了までのクロック数 (←小さいほど良い) 生成したプログラムの数 Random Jubatus
  15. 15. Jubatus makes it faster, faster! Jubatusなら素早く、速くなる! Jubatusの手軽さはやっぱり凄かった! 皆様ありがとうございました!

×