ToDo:
https://tl.hateblo.jp/entry/2021/04/30/154411
HPC ぽい話も(にわかほど語りたがるというし)ちょっと書いてみたかったけど、発散しそうだったから、やめたのだった
HPC、とりあえず、スケールしない部分が足をひっぱらない程度にはバカパラに近くなってないと、なんともならないというのがあると思う。そこはなんか問題いじったりしてでもバカパラにするし、できないならスパコン使う必要とか無い、ということになるんだと思う
次は DRAM からの移動なりインターコネクトなりのバンド幅足りないとお話にならないので、計算戦略やデータの持ち方とかでなんとかして、そこまで行くとSIMD、パイプライン、スーパースカラ的なのをやっていく、みたいな印象を持っている。なんというか、クラウドとかのバカパラマルチスレッド的なのと、いわゆるアセンブリでチューニング的なやつの両方必要な感じだなあ、と
その二つに加えて、ヘテロなスレッドが協調動作してる系のやつ、くらいで雑に並列性ぽいものは分類できるのかな、と思った。つまり
くらいに分類できると考える
1 は DRAM や IO 待ちで律速しがちで、用途的にもレイテンシ重視が多め。 DRAM や IO 待つとこまでいければ良いので、 2,3 をやってもしょうがないみたいなケースも多いが 2 も併用したりもよくする。 1+2 がタスクキュー。「並列プログラミングは難しい」と言う時に思い浮かべるのは、僕はコレ
2 は message passing に主題として書いたやつ。高速化的には最も簡単でバグらなくて素晴らしい
3 は message passing 書いてる最中に書こうかなあ、と思ったけどやめたやつ。普通あまり並列プログラミングと言わない気もするんだけど、並列計算ではある。コアの性能をしぼり出すというソフトウェアの観点からも、電力や回路面積などのリソースをどこに割り当てるかというハードウェアからの観点からも、関連した話題ではあると思う。そのへんで言うと A14 のスーパースカラすごい広いのとかも、これバランス悪い気がするんだけどどうなんだろう……とか思うけどどうなんだろう: https://www.anandtech.com/show/16226/apple-silicon-m1-a14-deep-dive/2
スマホや chrome はおおむね 1 、 jpeg のデコードは 3 (2も使ったりする?)、 HPC は(たぶんおおむね) 2 と 3 、クラウドは 1 and/or 2 、 GEMM は 2 と 3 。ディープラーニングだと GEMM に加えてデータローダとかはちょっと 1 ぽさあるので、割と全部あるかもしれない。あと inter-op のモデルパラレルは 1 ぽさがある
あと、 1 と特に 2 はノードまたぐか否かとかで割と雰囲気が変わるとかあるかもしれない
(10:39)
前 | 2021年 5月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。