ARM GPU Cores
によると、Mali GPU には "Shader Core" というのが 10 個くらい入っている。Mali-G72 は最大で 32 core までいけるらしいが、そういうのはデスクトップとか用なのでしょう。 この Shader Core が CUDA でいう SM 相当で、世代に名前がついている。
上のリンクによると Valhall という世代は "processing unit" が、2 つ, Bifrost 世代は 3 つ入っている。この "processing unit" が CUDA でいう "CUDA Core" 相当だと思えばよさそう。Utgard という世代は vertex unit と fragment unit がわかれており、unified shader architecture になってない。
Bifrost というやつは 16fp が 8 個 SIMD できると書いてある。この計算と3 つ processing unit があるという事実の関係はよくわからない。
そしてこいつらは SM みたいに thread を oversubscribe して latency tolerance をたかめる、みたいなことはどれくらいしてくれるのだろうね。
そういえば Apple の M1 Ultra は 64 core GPU で、てきとうにぐぐった記事によるとベンチマークのスコアは RTX 3090 に対し 2x+ 遅くらいである。RTX 3090 はこの Wikipedia ページによると SM が 82 個で、各 SM に 128 CUDA Core くらいある。
RTX の SM 82 個と M1 Ultra の 64 core は comparable である。とすると Apple GPU の各コアの processing unit みたいなやつは 128 を半分くらいにして 64 個くらいはいってるのかな?(こんな雑な計算していいのかな?)
- Rosenzweig – Dissecting the Apple M1 GPU, part III
- Max M1 silicon compute threadgroup… | Apple Developer Forums
ここでは M1 (無印) GPU は "the M1 GPU supports 24576 = 1024 * 24 simultaneous threads" と言っているが、ハードウェアが並列実行できる SIMD の幅はよくわからない。それは開示されていない、という理解でよさそう。
一歩さがって CUDA Core per SM の数をプログラマが意識する必要があるのかというと・・・無いな。重要なのは SM が持てる thread の数, thread block の数, register の数とかで、これは M1/Metal でもクエリできるっぽい。
つまり SM あたりの CUDA Core の数というのは基本的にマーケティング用の数字盛り上げツール、マニアのトリビアであって、特に有用ではないのだろうな。
とはいえ上の 64 という processing unit per GPU Core の概算はさすがに一桁くらい違いそうな気がする。だって ARM の GPU は 3? 8? とかなわけです。そして M1 も Axx もそういうコア単位のデザインは共有してると思われるわけです。8-20 倍ということはないだろうさすがに。
まとめると
- ARM の GPU は随分遅そうである。そしてメモリアクセスの隠蔽とかがどうなってるのかはさっぱりわからない。レジスタの数もなにもかもわからない。
- Apple M1 の GPU もよくわからない。ただ Metal のおかげでいくらかは性能をクエリできる。レジスタもいっぱいあるので NVIDIA GPU 的な latency tolerance は期待できる。
- Apple の M1 Ultra がなぜ RTX 3090 と同じ桁くらい速いのかはよくわからない。
NVIDIA はプロプリエタリなりに情報が色々オープンで偉かった。AMD とか Intel とか調べてないけどどれくらいアーキテクチャを開示してるのだろうね。