ソリューション第二事業部 𠮷藤尚生
@フィックスターズ大崎本社
今日の内容は、一部を除いて
発表者個人の考えに基づきます。
共著者や会社の総意ではありません。
※いずれも英語です
この世界は
疎結合である
1.2 | 6.8 | 7.6 | 8.7 | 4.0 | 2.7 | 9.6 | 7.8 |
5.4 | 0.3 | 2.9 | 8.5 | 5.9 | 8.4 | 2.9 | 6.9 |
7.1 | 4.9 | 5.6 | 5.2 | 0.3 | 0.6 | 2.5 | 8.2 |
9.8 | 8.1 | 4.5 | 1.6 | 9.1 | 5.9 | 0.1 | 1.5 |
1.5 | 3.0 | 2.6 | 7.5 | 0.7 | 6.7 | 4.7 | 0.3 |
9.3 | 1.5 | 8.1 | 9.5 | 1.0 | 0.8 | 4.8 | 3.1 |
5.6 | 8.2 | 3.9 | 8.3 | 3.2 | 1.5 | 5.5 | 5.8 |
2.0 | 2.3 | 6.4 | 5.0 | 3.1 | 0.3 | 9.2 | 0.2 |
1.2 | 6.8 | 8.7 | 2.7 | ||||
5.4 | 0.3 | 2.9 | 8.5 | 5.9 | |||
4.9 | 5.6 | 5.2 | 0.3 | ||||
9.8 | 8.1 | 4.5 | 1.6 | 9.1 | 5.9 | 0.1 | |
3.0 | 2.6 | 7.5 | 0.7 | 4.7 | 0.3 | ||
9.3 | 9.5 | 0.8 | 4.8 | ||||
8.3 | 3.2 | 1.5 | 5.5 | 5.8 | |||
6.4 | 3.1 | 9.2 | 0.2 |
※値=各要素間の相互作用の強さ
相互作用量=要素感の重み×相手の強さ
合計=Σ要素感の重み×相手の強さ
→ \(y = Ax\)の形に直せる
疎行列・ベクトル積(SpMV)
世界を加速させるには
SpMVが速いのが良い!
※例外:重力多体問題&ニューラルネットワーク
メモリ帯域が遅すぎる
(演算速度に対して)
疎行列の表現方法
疎行列 | ELL形式 | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
値 | 列番号 | 非ゼロ数 | ||||||||||||||||||||||
26 | -1 | 1 | 26 | -1 | 1 | 0 | 1 | 3 | 3 | |||||||||||||||
-1 | 26 | -1 | 1 | -1 | 26 | -1 | 1 | 0 | 1 | 2 | 4 | 4 | ||||||||||||
-1 | 26 | -1 | 1 | -1 | 26 | -1 | 1 | 1 | 2 | 3 | 5 | 4 | ||||||||||||
1 | -1 | 26 | -1 | 1 | 1 | -1 | 26 | -1 | 1 | 0 | 2 | 3 | 4 | 6 | 5 | |||||||||
1 | -1 | 26 | -1 | 1 | 1 | -1 | 26 | -1 | 1 | 1 | 3 | 4 | 5 | 7 | 5 | |||||||||
1 | -1 | 26 | -1 | 1 | → | 1 | -1 | 26 | -1 | 1 | , | 2 | 4 | 5 | 6 | 8 | , | 5 | ||||||
1 | -1 | 26 | -1 | 1 | 1 | -1 | 26 | -1 | 1 | 3 | 5 | 6 | 7 | 9 | 5 | |||||||||
1 | -1 | 26 | -1 | 1 | 1 | -1 | 26 | -1 | 1 | 4 | 6 | 7 | 8 | 1 | 5 | |||||||||
1 | -1 | 26 | -1 | 1 | -1 | 26 | -1 | 5 | 7 | 8 | 9 | 4 | ||||||||||||
1 | -1 | 26 | -1 | 1 | -1 | 26 | -1 | 6 | 8 | 9 | 1 | 4 | ||||||||||||
1 | -1 | 26 | 1 | -1 | 26 | 7 | 9 | 1 | 3 |
右側全てを読む必要がある
SpMVで、メモリから読む量
種類 | 1要素[byte] | 個数 |
---|---|---|
値 | 8 | 合計非ゼロ数(nm) |
列番号 | 4 | 合計非ゼロ数(nm) |
非ゼロ数 | 4 | 行数(n) |
ベクトル | 8 | 行数(n) |
n:行数、m:平均非ゼロ数
∴ \(12n(m+1)\) [byte]
SpMVの演算量
\[ y_i = \underbrace{a_{i0} \times x_0 + a_{i2} \times x_2 + ...}_{m個} \]
種類 | 1行あたり[flop] | 合計[flop] |
---|---|---|
× | m | nm |
+ | m-1 | n(m-1) |
n:行数、m:平均非ゼロ数
∴ \(n(2m-1)\) [flop]
→\(6 \frac{1+1/m}{1+0.5/m}\) [byte/flop]
≒6 [byte/flop]
※平均非ゼロ数は1より十分に大きい
Q. SpMV(6[byte/flop])の計算で
PEZY最高性能(1.5[TFLOP/s])を出すには?
A. 6 × 1.5 = 9[TB/s]読む必要
種類 | TB/s |
---|---|
DDR4 | 0.025 |
GDDR5 | 0.100 |
HBM2 | 0.256 |
HMC2 | 0.480 |
SpMVに必要なのは? | 9.000 |
今の計算機でSpMVを
素直に速くするのは
無理!!
疎行列の読む
データ量を減らす手法
を提案した
HPCGベンチマークの場合
理論的には約26倍の高速化!
※実測値は約3倍
疎行列の線形一次方程式を速く解いたら勝ち
HPCGの専門家じゃないので
感想しか書いてません
(みなさん議論しましょう!)
位 | 名称 | TFLOP/s |
---|---|---|
1 | 京 | 603 |
2 | 天河2 | 580 |
3 | Oakforest-PACS | 396 |
4 | 神威太湖之光 | 371 |
5 | Cori | 355 |
京&Oakforest-PACSおめでとうございます!
位 | 名称 | アーキ | コア数 |
---|---|---|---|
1 | 京 | SPARC | 705k |
2 | 天河2 | KNC | 3120k |
3 | Oakforest-PACS | KNL | 557k |
4 | 神威太湖之光 | SW26010 | 10650k |
5 | Cori | KNL | 632k |
しかないのでは?
フィックスターズは、HPCもそれ以外でも
「高速化」が得意です。