PFN が MN-Core 2の資料を公開し始めたので、うちもなんかやってみることにします。とりあえず MN-Core ってなんなん?って話からか。
なお、当社のサイト内の情報は独自に公になっている資料から構築したものなので、不正確な情報が含まれている可能性があります。他社に問い合わせとかしないでね。
MN-Core
「条件分岐のない完全SIMD動作をするシンプルなアーキテクチャ」でL2B, L1B, MAB(Matrix Arithmetic Block) という「階層的な構造」の中に「行列演算器(MAU、Matrix Arithmetic Unit)を持」っているのが特徴です。
L2B とか L1B とか言う言葉があって、一瞬 B はバッファか?と思いますが、White Paper をみると Level-1 Broadcast Block でありその中のメモリが L1 Broadcast Memory(L1BM) となっています。キャッシュとは違うのね。
MN-Core の 1 と 2
MN-Core には第1世代と今回、情報が公開になった MN-Core 2があります。第1世代は4ダイ1パッケージということで1つのパッケージの中にダイが4つ入った図が公開されています。
その絵を引用するのも気が引けるので、見たことも触ったこともないなりに絵を描いてみます(特に意味はありません。描いただけ)。
MN-Core 1 ではパッケージに16個の L2B ということは、ダイに 4個の L2B、L1B は L2B の中に8つ、L1B の中に 16 個の MAB、MAB の中に PE が4つ入っています。ウェブサイトにあるように「ダイにつき512個、計2048個の行列演算ブロックが集積」ということになります。PE 単位だと 2048 * 4 で 8192。
MN-Core 2 では
• 1 つの L2B は 8 個の L1B (Level 1 Block) を子として持つ • 1 つの L1B は 16 個の MAB (Matrix Arithmetic Block、行列演算ブロック) を子として持つ • 1 つの MAB は 4 個の PE を子として持ち、また 1 つの MAU (Matrix Arithmetic Unit、行列演算ユニット) を持つ
となりボードあたり(パッケージあたりと同じでしょう)、行列演算ブロック(MAB)は1024で、PEは4096個となります。
絵を見ると、実際の配置と同じかどうかはともかくとして、4つのダイが1つのパッケージに"均等"に並んでいたり、ブロック・メモリを囲んでブロックがあったり、MAU を囲んで PE があったりと、レイアウトのイメージが断片的に見えてきます。絵に描いたところを見ると開発のポイントだったのかな?
昔、i860 とか 68040 とかのマルチプロセッサーで(話題が古い!!)ボード上のチップの配置を均等にしていたのを思いだします。
メモリ階層
「メモリ空間が独立しているということ」をみると演算のための ALU に情報をたどり着かせようと思うとメモリ転送が必要なことがわかります。
イメージしやすいように図にしてみました。この図は1年くらい前にウェブとかを漁って描いた図です(アニメーション gif になってます)。当時は詳しい情報がわからなくて、プライベート・メモリに転送するように描いてあります。今となってはこのプライベート・メモリは正確には LM0 や LM1 であり、レジスタは GRF0 や GRF1 であり、レジスタにも直接転送できることがわかっているので、ちょっと不正確ですね。MAB の構造や MAU も抜けてますね。イメージということで。
ということで、今後も HPC に関して MN-Core や CUDA、OpenCL も含めてちょっと深堀していきます。