diary2013-03-12Cell/B.E.ネットワークレイテンシ縮めるにはどうすればいいか考えてたときにひょっとしたら「CBEならできんじゃね?」とか思って、つまり、NICから直接SPEのLSに入れて、SPEからNICのレジスタ叩けば、DRAMのレイテンシも存在しないTCP/IPアプリケーションが作れるのではないかと思ったんですよね。実験環境ないのでそう思った以上のことは無いけど...そのついでに、どのぐらいCBEがよく考えられていたか書いてもいいかなと思ったので書いておく。(個人的に、Cellという表記/呼びかたはなんかあまり好きではなくて、Cell/B.E.もしくは、CBEと呼ぶので、以下、CBEはそういう意味で読んでほしい)はじめにCBEがあんまり普及しなかったとか、半導体業界の背景とか色々あって、多分新規アーキテクチャで世界制覇目指すとかやるのはCBEが最後になる可能性があるし(狭い部分では新規アーキテクチャとかもあるだろうけど)、まあ、こんなのもあったなぁ、と語るにはいいネタだと思う。CBEは、GPUとかのアクセラレータみたいなのをやろうとしたんでしょ?的な文脈で語られることが多いけど、そうではない。CBEは、もっと、色々な点で、深読みしすぎてる感があって、つまり、「命令セットきれー」とか、「シンプルなコアで並列化で性能グングン」とかそういうなんかよくわからんのではなくて、I/O、メモリ、リアルタイム、という点で、よく考えられており、本気で、リアルタイム組み込みからHPCまで広くカバーしようという心意気が感じられて素晴らしいので、CPUアーキテクチャ妄想とかする時は、最低限、CBEが目指したものぐらいは踏まえておくべきだと思っているので、CBEがどれだけ素晴らしいかについて書いておく。アーキテクチャ(以下CBEA)という資料なのだが、http://cell.scei.co.jp/pdf/CBE_Architecture_v102_j.pdfこれ何かというと、まあ、何の役にも立たないドキュメントで、なぜこれを日本語化した、という評価がされるぐらい、まあ、ほんとに何が書いてあるかよくわからないドキュメントなのだけど、今日のテーマは、CBEがどれだけ深読みしてつくられたか、という点なので、まさに、これを読むというテーマなんですよね。そもそも、最初のCPU(といっても、全部で2種類しかないけど)を作る時点から、将来に備えて、実装とアーキテクチャを分離しておこうという発想が他のCPUとは違う点を見せてくれますね。(多分PowerPCを作ってるIBMの文化だと思うが)例えば、実装とアーキテクチャが分離してないx86だと、メモリオーダリングが遠い将来においても保証されてるかどうかは誰にもわからないとか大変困ること多いですよね。その点、CBEAに準拠したと書いてあるプロセッサ(といっても全部で2種類しかないけど)なら、遠い将来においても、メモリオーダリングどこまで保証されるかがわかるようになっていて、大変助かりますね。ストレージ・デスクリプション・レジスタ(MFC_SDR)」。今はCUDA/OpenCLが普及してしまったので、アクセラレータ用にメモリを確保するのが当たり前になってしまったけど、CBEの頃は、mallocしたポインタがそのまま(16byteアライン必要だけど)SPEで使えた。これを支えているのが、このMFC_SDRに関する記述で...といっても、ひとこと「PowerPCストレージ・デスクリプション・レジスタ(SDR1)と同ーの機能を提供します」と書いてあるだけなのだけど、つまり、ページテーブルの構造が、PowerPC互換になっている。確保したメモリアドレスが、SPEから使える、というわけである。ところ開いてもらうと、一個、ぽろっとIOMMUの仕様がころがってるのだけど、超おおざっぱにいうと(いやかなり違うけど)、これの内容が、このMFC_SDRと対応するといってもいい。これからはHSAだプログラミングが簡単だウォーとかいうのは、既にCBEが7年前に通った道ということである。(まあ、PCIe超えて何かやるともうちょっと面倒というのはあるけど)リアルタイム性SPEは、LSがあるので、リアルタイム処理に向いてる、ぐらいは皆知ってると思うが、残念ながら、その程度の理解ではCBEマスターへの道はまだまだ先は長いといってもいい。真のCBEマスターになるには、RMT/RAGを理解する必要がある。僕も調べたことないので知らないが。CBEマスターへの道はまだまだ長い。リアルタイム性とか考えると、「本当にキャッシュ無くなるだけでいいのか?TLBは?SLBは?バスが混雑したらどうする?」とか、考えるのは、当然の結果だと言っていい。普通のCPUを使っている人は、結局そこらへんが心配で、usecオーダーを保証できないだろう。キャッシュ置換管理機構」を開いてほしいのだが、この部分をよく読むと、多分キャッシュの置換について書いてあるのだと思...う...?ごめん今初めて見たが、よくわからんわ。そんな感じのことが書いてある。これでキャッシュの心配はしないでいい。リソース配分管理」を開いてほしいのだが......えーと......ごめん今初めて見たが、何も書いてなかったわ。「詳細については、特定のインプリメンテーションに関するドキュメントを参照してください。Processorのことである(以下Handbook)。Element[SPE]、またはI/Oデバイス)に割り当てることができます。書いてあって、バスリソースを確保できるみたいなことが書いてありますね。こっから先は読んでないので知らん。実装で、I/O、メモリバスについてリソース配分ができることが、ドキュメンテーションされてるし、大変素晴らしいですね。メモリオーダリング上でも書いたけど、PowerPCユーザなら、メモリオーダリングがアーキテクチャレベルで決まってるのは常識だった。x86みたいに、WC/WBとかの即物的な名前が付いてるのではなくて、Guarded、Cache-inhibitという、かっこいい名前が付いてるのもPowerPCならではと言える。G/Iってそれぞれどういう効果あるのか知らないけど。メインストレージ・ドメインでのアクセス順序付け」とか読むと、「SPEからNICのレジスタ叩けば」も、大丈夫なことが保証されている気がしてくるしすばらしいですね。IOMMUさて最近は仮想化だなんだと言って、Intel/AMDのCPUにもIOMMUが実装されてますが、それはCBEが2006年に通った道だった。(まあfullvirtとparavirtの違いがあるので公平ではないが)IOの外側からのアクセスもアドレス変換は、実装依存(といっても以下略)だけど、まあ、一応決まっていて、例えば、PS3だと、CBEのとなりに、GPUが付いてたけど、このGPUを使っても、ハイパーバイザのメモリを読めないようにするとかは実現されている。詳細はHandbookの11.4.1。仮想化これはCBE以前にPowerPCアーキテクチャで決まってる。参照されてるみたいなのだけど、これ調べながら書いてて結構読みづらいので、書きなおしたいという思いはある。アイソレーションコピーガードをつくりたいとか考えたとしよう。PCなら、どうやっても、実行時には命令をメモリにのせておく必要があって、「デバッガで頑張ってよく見る」という作業に勝てないのだが、でもCBEなら、大丈夫!いっぱいNDAにサインして(勝手なイメージです)、IBMかSONYかTOSHIBAにお願いすれば、SPUアイソレーションを使うことができるのだった。詳細(の多分半分くらい。実際どうなってるかは僕もよく知らない。全CBEで共通のハードウェアルートキーがCPUに埋まっているそれを使って、プログラムをハードウェアで復号化するSPUのメモリを隔離(Isolate)して、OS/ハイパーバイザからも見られないようにするというものである。Hierarchy」に書いてあるが、ごくごく一部の人だけしかルートキーを知らない状態でも、破られない暗号化ができるという点で、ルートキーを知ってる人が、ソフトウェアで暗号化/復号化プログラムを書くそのソフトウェア暗号の暗号化プログラムを別の第三者にわたすルートキーを知っている人は、ソフトウェア復号化プログラムを、ルートキーで暗号化しておく第三者が、暗号化されたソフトウェアと、ルートキーを知ってる人が書いた復号プログラム(暗号化済み)を一緒に配布すると、いうようにすることで、第三者とルートキーを知っている人以外が、復号化できないデータをつくれるし、第三者がヘマをやった場合でも、ルートキーを守り抜くことができる。具体的に言うと、PS3が完全にクラックされた場合でも、CBEのハードウェアルートキーを守れるというわけである。読むと、わかるかもしれない。読んでないのでよくわからんけど...プロブレム・ステート・メモリマップド・レジスタGPUだと、MMIOレジスタが隠蔽されてて、ホスト/デバイス間で、細かい同期ができないのだが、CBEなら...そう、もちろんOKさ。プロブレム・ステート・メモリマップド・レジスタ」を見てほしいのだが、プロブレム・ステート(PS)・メモリマップド・レジスタは、プロブレム・ステートで実行中のアプリケーションがアクセスできる機構一式を定義しています。プロブレム・ステート、というのは、PowerPC用語で、OSではない、ユーザアプリケーション用の状態のことを言うのだが、つまり、CBEでは、OSがSPEを制御する用のレジスタと、アプリケーションがSPEを制御する用のレジスタが分かれていて、ユーザ空間から、MMIOを直接叩いて(オーバーヘッド0で)、SPEと通信することが可能である。表8-1に一覧があるが、知っておくと便利(?)なのが、メールボックスシグナルの、ふたつで、メールボックスは、32bit値をやりとりする時に、シグナルは、1bit値を送信する時に便利だった記憶がある。PPE側は、メモリポーリングするか、OSの力を借りて(オーバーヘッドがそこそこある)割り込み付きのメールボックスを使うしかなくて、やや無駄があるが、SPE側は、メールボックスが空の時にメールボックスへアクセスすると、ブロックするようにできていて、電力やバスを無駄遣いしないようにできている。データが来たら割り込みを入れるとかもできる。レイテンシは詳細データ手元に無いけど、メモリポーリングより、わずかにオーバーヘッドがあるくらいだったと思う。これを使うことで、無駄無く効率良く、PPE/SPE間、SPE/SPE間の細粒度同期が実現できるしすばらしい。割り込みまあ割り込みはちょっと手抜きだな。最低限、SPEに外部割り込みが入れられるようにして、その上で割り込み時間保証とかやっとくべきだった。まとめアーキテクチャ素晴らしいからといって普及するわけではない。10回ぐらい読んで、その機能が何を実現してるかとか考えるべきだと思いますね。あればレジスタに乗る。最近の変態アーキテクチャとしては...2011-06-11またメモリオーダリングについて考えて時間を無駄にしたメモリオーダリングについて言えることは、「余計なこと考えな...2010-08-01ターゲットをARMとx86限定にしたとき、バックエンドはどう拡張できるか妄想するだけならおもしろそうだな。変換おぷたん月別アーカイブはてなブログをはじめよう!w_oさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。