J

2004 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 12 |
2008 | 01 | 02 | 04 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2014 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 06 | 07 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 |

ホーム

日記内の"morihyphen.hp.infoseek.co.jp"へのリンクは切れてます。必要な場合はお手数ですが int.main.jp へ書き換えをお願いします。

TODO: ファイル名確認を忘れないこと > 自分

twitter

 | 

2013-03-21

拡散性ミリオンアーサー 09:28

ちょぼらうにょぽみ先生の漫画(弱酸性ミリオンアーサー)が読みたくて拡散性ミリオンアーサーをやった。僕もソシャゲデビューしたわ。

僕はレベル上げゲーを理解できる脳を持ってるから、ソシャゲーとかやるの危険なんだよね、とか言ってたが、全然そんなことなかった。つまり、続けてやろうと思わなかった(といいつつ危険だから削除したが)

印象を書いておくと、ネットワーク通信が超ストレスで、なんかボタン押すごとに3-5秒ぐらい待たされるから、レベル上げゲーとしてあんまり良くないと思うんだよね。どうせ時間内の活動量(AP)に制限付いてるのだから、もっとサクサク動いていいと思うのだけど。チート対策考えると、そういうわけにもいかないのだろうかね?このへんは別のボーっと見てるだけでレベル上がる系のゲームやってみるべきなのかもしれない。もし、このネットワークストレスが、ソシャゲーの根本的な問題なのだとしたら、多分人生をソシャゲーのために無駄にするリスクは大分下がってると言える。


課金はしてない(というか2時間くらいしかやってない)。課金の倫理的な問題は、ここではあんまり考えないようにしておく。僕の理解としては、課金あんまり好きじゃないけど、自分でゲーム作ったとしたら、パズドラ超えられると思うんだよね、とかそういう感じ。


まあカードの絵はいい、ここで書かれてるけど、かっこいい+かわいい系の絵として、レベル高いと思う。まあでも画集買えばすむ。というか買ってきた。こういうのって廃人が支えてるから、周辺アイテムは、コスパよくなるはずだし大丈夫(何に対するいいわけなんだ?)。


一番感心したのが、これの内容で、

――本作の中で鎌池先生が仕事されている部分はどこなのでしょう? シナリオはもちろんですが、カードの設定のテキストなどもすべて鎌池先生が書かれているのですか?

そうです。サブストーリーもすべてですね。

これほんとだとしたら、鎌池先生尊敬するわ。ゲーム内、結構な量のテキストがあって、それもシナリオっぽい一本道のテキストじゃなくて、カードごとに文付いてる+カード間のかけあいみたいな細々としたテキストいっぱいあるんだよね。これひとりでやってるのだとしたら、すごいと思うわ。

もともと、こういうメインじゃなくて、周辺テキストで世界観表現する仕組みって、開発のボトルネックがひとりに集中しないように考えられたしくみだと思うんだよね。それをひとりでやってしまうのって何それ感すごい。

トラックバック - http://d.hatena.ne.jp/w_o/20130321

2013-03-12

Cell/B.E. 02:33

ネットワークレイテンシ縮めるにはどうすればいいか考えてたときにひょっとしたら「CBEならできんじゃね?」とか思って、つまり、NICから直接SPEのLSに入れて、SPEからNICのレジスタ叩けば、DRAMのレイテンシも存在しないTCP/IPアプリケーションが作れるのではないかと思ったんですよね。

f:id:w_o:20130312023039p:image

まあ、実験環境ないのでそう思った以上のことは無いけど…

そのついでに、どのぐらいCBEがよく考えられていたか書いてもいいかなと思ったので書いておく。

(個人的に、Cellという表記/呼びかたはなんかあまり好きではなくて、Cell/B.E.もしくは、CBEと呼ぶので、以下、CBEはそういう意味で読んでほしい)


はじめに

CBEがあんまり普及しなかったとか、半導体業界の背景とか色々あって、多分新規アーキテクチャで世界制覇目指すとかやるのはCBEが最後になる可能性があるし(狭い部分では新規アーキテクチャとかもあるだろうけど)、まあ、こんなのもあったなぁ、と語るにはいいネタだと思う。


CBEは、GPUとかのアクセラレータみたいなのをやろうとしたんでしょ?的な文脈で語られることが多いけど、そうではない。


CBEは、もっと、色々な点で、深読みしすぎてる感があって、つまり、「命令セットきれー」とか、「シンプルなコアで並列化で性能グングン」とかそういうなんかよくわからんのではなくて、I/O、メモリ、リアルタイム、という点で、よく考えられており、本気で、リアルタイム組み込みからHPCまで広くカバーしようという心意気が感じられて素晴らしいので、CPUアーキテクチャ妄想とかする時は、最低限、CBEが目指したものぐらいは踏まえておくべきだと思っているので、CBEがどれだけ素晴らしいかについて書いておく。



CBEA

まず、手元に用意してほしいのが、Cell Broadband Engine(TM) アーキテクチャ(以下CBEA)という資料なのだが、

http://cell.scei.co.jp/pdf/CBE_Architecture_v102_j.pdf

これ何かというと、まあ、何の役にも立たないドキュメントで、なぜこれを日本語化した、という評価がされるぐらい、まあ、ほんとに何が書いてあるかよくわからないドキュメントなのだけど、今日のテーマは、CBEがどれだけ深読みしてつくられたか、という点なので、まさに、これを読むというテーマなんですよね。


つまり、まず、そもそも、最初のCPU(といっても、全部で2種類しかないけど)を作る時点から、将来に備えて、実装とアーキテクチャを分離しておこうという発想が他のCPUとは違う点を見せてくれますね。(多分PowerPCを作ってるIBMの文化だと思うが)

f:id:w_o:20130312023707p:image

例えば、実装とアーキテクチャが分離してないx86だと、メモリオーダリングが遠い将来においても保証されてるかどうかは誰にもわからないとか大変困ること多いですよね。その点、CBEAに準拠したと書いてあるプロセッサ(といっても全部で2種類しかないけど)なら、遠い将来においても、メモリオーダリングどこまで保証されるかがわかるようになっていて、大変助かりますね。


MMU

まず、「15.3 MFC ストレージ・デスクリプション・レジスタ(MFC_SDR)」。

今はCUDA/OpenCLが普及してしまったので、アクセラレータ用にメモリを確保するのが当たり前になってしまったけど、CBEの頃は、mallocしたポインタがそのまま(16byteアライン必要だけど)SPEで使えた。

これを支えているのが、このMFC_SDRに関する記述で…といっても、ひとこと「PowerPCストレージ・デスクリプション・レジスタ(SDR1)と同ーの機能を提供します」と書いてあるだけなのだけど、つまり、ページテーブルの構造が、PowerPC互換になっている。

これによって、LinuxとかのOSで作ったページテーブルが、そのままMFCから使えるようになっていて、malloc で確保したメモリアドレスが、SPEから使える、というわけである。

f:id:w_o:20130312024247p:image

AMD/ARMがやっている、HSAのSTANDARD(http://hsafoundation.com/standards/) のところ開いてもらうと、一個、ぽろっとIOMMUの仕様がころがってるのだけど、超おおざっぱにいうと(いやかなり違うけど)、これの内容が、このMFC_SDRと対応するといってもいい。

つまり、これからはHSAだプログラミングが簡単だウォーとかいうのは、既にCBEが7年前に通った道ということである。(まあ、PCIe超えて何かやるともうちょっと面倒というのはあるけど)


リアルタイム性

SPEは、LSがあるので、リアルタイム処理に向いてる、ぐらいは皆知ってると思うが、残念ながら、その程度の理解ではCBEマスターへの道はまだまだ先は長いといってもいい。

真のCBEマスターになるには、RMT/RAGを理解する必要がある。まあ、僕も調べたことないので知らないが。CBEマスターへの道はまだまだ長い。


リアルタイム性とか考えると、「本当にキャッシュ無くなるだけでいいのか?TLBは?SLBは?バスが混雑したらどうする?」とか、考えるのは、当然の結果だと言っていい。普通のCPUを使っている人は、結局そこらへんが心配で、usecオーダーを保証できないだろう。でも、CBEなら……大丈夫!


まず、「19. キャッシュ置換管理機構」を開いてほしいのだが、この部分をよく読むと、多分キャッシュの置換について書いてあるのだと思…う…?ごめん今初めて見たが、よくわからんわ。まあ、多分そんな感じのことが書いてある。これでキャッシュの心配はしないでいい。


次に、「20. リソース配分管理」を開いてほしいのだが……えーと……ごめん今初めて見たが、何も書いてなかったわ。「詳細については、特定のインプリメンテーションに関するドキュメントを参照してください。」と、書いてあるが、CBEAのインプリメンテーションは、結局CBEとPowerXCell8iの2種類しかなかったので、「特定のインプリメンテーションに関するドキュメント」というのはつまり、Cell Broadband Engine^(TM) Programming Handbook Including the PowerXCell 8i Processorのことである(以下Handbook)。


Handbookの「8. リソース割り当て管理」を見ると、

Cell Broadband Engine Architecture(CBEA)プロセッサ1のリソース割り当て管理(RAM)機構では、管理対象リソース(メモリ・バンクおよびI/Oインタフェース)の時間の一部を要求元(PowerPC Processor Element [PPE]、Synergistic Processor Element[SPE]、またはI/Oデバイス)に割り当てることができます。

とか書いてあって、バスリソースを確保できるみたいなことが書いてありますね。こっから先は読んでないので知らん。


組み込み向けといわれるARMですら、バスリソースについては、ドキュメンテーションされてないのに、その点、CBEなら、

  • アーキテクチャレベルで、なんらかのリソース配分機構があること
  • CBE/PowerXCell8i の実装で、I/O、メモリバスについてリソース配分ができること

が、ドキュメンテーションされてるし、大変素晴らしいですね。

f:id:w_o:20130312025147p:image

メモリオーダリング

上でも書いたけど、PowerPCユーザなら、メモリオーダリングがアーキテクチャレベルで決まってるのは常識だった。


また、x86みたいに、WC/WBとかの即物的な名前が付いてるのではなくて、Guarded、Cache-inhibitという、かっこいい名前が付いてるのもPowerPCならではと言える。まあ、G/Iってそれぞれどういう効果あるのか知らないけど。


それ以外にもCBEの外側からメモリアクセスした時の挙動もちゃんと決まっていて、CBEAの「10.9 I/O アクセスのストレージ順序付け」を読むと、外部からのアクセスは、ちゃんと順序付けられることが保証されてるし、最初に書いたように、「NICから直接SPEのLSに入れて」とか、やった場合でも、全く問題無いことが保証されてるし、「10.2 メインストレージ・ドメインでのアクセス順序付け」とか読むと、「SPEからNICのレジスタ叩けば」も、大丈夫なことが保証されている気がしてくるしすばらしいですね。

IOMMU

さて最近は仮想化だなんだと言って、Intel/AMDのCPUにもIOMMUが実装されてますが、それはCBEが2006年に通った道だった。(まあfullvirtとparavirtの違いがあるので公平ではないが)


IOの外側からのアクセスもアドレス変換は、実装依存(といっても以下略)だけど、まあ、一応決まっていて、例えば、PS3だと、CBEのとなりに、GPUが付いてたけど、このGPUを使っても、ハイパーバイザのメモリを読めないようにするとかは実現されている。詳細はHandbookの11.4.1。

仮想化

これはCBE以前にPowerPCアーキテクチャで決まってる。

(あんま関係ないけど、 時々 http://d.hatena.ne.jp/w_o/20100130/1264854010 が参照されてるみたいなのだけど、これ調べながら書いてて結構読みづらいので、書きなおしたいという思いはある。特に図を入れたい)


SPU アイソレーション

コピーガードをつくりたいとか考えたとしよう。PCなら、どうやっても、実行時には命令をメモリにのせておく必要があって、「デバッガで頑張ってよく見る」という作業に勝てないのだが、でもCBEなら、大丈夫!いっぱいNDAにサインして(勝手なイメージです)、IBMかSONYかTOSHIBAにお願いすれば、SPUアイソレーションを使うことができるのだった。


詳細(の多分半分くらい。実際どうなってるかは僕もよく知らない。)は、↓に書いてあるが、

https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/AEBFE7D58B5C36E90025737200624B33/$file/CBE_Secure_SDK_Guide_v3.0.pdf


仕組みとしては、

  • 全CBEで共通のハードウェアルートキーがCPUに埋まっている
  • それを使って、プログラムをハードウェアで復号化する
  • SPUのメモリを隔離(Isolate)して、OS/ハイパーバイザからも見られないようにする

というものである。


これのよい点は、上のSecure SDK Guideの「4 The Key Hierarchy」に書いてあるが、ごくごく一部の人だけしかルートキーを知らない状態でも、破られない暗号化ができるという点で、

  1. ルートキーを知ってる人が、ソフトウェアで暗号化/復号化プログラムを書く
  2. そのソフトウェア暗号の暗号化プログラムを別の第三者にわたす
  3. ルートキーを知っている人は、ソフトウェア復号化プログラムを、ルートキーで暗号化しておく
  4. 第三者が、暗号化されたソフトウェアと、ルートキーを知ってる人が書いた復号プログラム(暗号化済み)を一緒に配布する

と、いうようにすることで、第三者とルートキーを知っている人以外が、復号化できないデータをつくれるし、第三者がヘマをやった場合でも、ルートキーを守り抜くことができる。

f:id:w_o:20130312023040p:image

具体的に言うと、PS3が完全にクラックされた場合でも、CBEのハードウェアルートキーを守れるというわけである。


実際にPS3のキーの構造がどうなってるかは、 http://www.ps3devwiki.com/wiki/Boot_Order を読むと、わかるかもしれない。まあ、ちゃんと読んでないのでよくわからんけど…


プロブレム・ステート・メモリマップド・レジスタ

GPUだと、MMIOレジスタが隠蔽されてて、ホスト/デバイス間で、細かい同期ができないのだが、CBEなら…そう、もちろんOKさ。


CBEAの「8. プロブレム・ステート・メモリマップド・レジスタ」を見てほしいのだが、

プロブレム・ステート(PS)・メモリマップド・レジスタは、プロブレム・ステートで実行中のアプリケーションがアクセスできる機構一式を定義しています。

と、書いてある。


プロブレム・ステート、というのは、PowerPC用語で、OSではない、ユーザアプリケーション用の状態のことを言うのだが、つまり、CBEでは、OSがSPEを制御する用のレジスタと、アプリケーションがSPEを制御する用のレジスタが分かれていて、ユーザ空間から、MMIOを直接叩いて(オーバーヘッド0で)、SPEと通信することが可能である。


表8-1に一覧があるが、知っておくと便利(?)なのが、

  • メールボックス
  • シグナル

の、ふたつで、

メールボックスは、32bit値をやりとりする時に、シグナルは、1bit値を送信する時に便利だった記憶がある。


PPE側は、メモリポーリングするか、OSの力を借りて(オーバーヘッドがそこそこある)割り込み付きのメールボックスを使うしかなくて、やや無駄があるが、SPE側は、メールボックスが空の時にメールボックスへアクセスすると、ブロックするようにできていて、電力やバスを無駄遣いしないようにできている。また、データが来たら割り込みを入れるとかもできる。レイテンシは詳細データ手元に無いけど、メモリポーリングより、わずかにオーバーヘッドがあるくらいだったと思う。


これを使うことで、無駄無く効率良く、PPE/SPE間、SPE/SPE間の細粒度同期が実現できるしすばらしい。

f:id:w_o:20130312030000p:image


割り込み

まあ割り込みはちょっと手抜きだな。最低限、SPEに外部割り込みが入れられるようにして、その上で割り込み時間保証とかやっとくべきだった。


まとめ

アーキテクチャ素晴らしいからといって普及するわけではない。


CPUつくりたいという人は、CBEA 10回ぐらい読んで、その機能が何を実現してるかとか考えるべきだと思いますね。

odawaraodawara 2013/03/13 04:01 > つまり、NICから直接SPEのLSに入れて、SPEからNICのレジスタ叩けば、DRAMのレイテンシも存在しない
ネットワーク処理向けの専用プロセッサを用意したらいいんじゃね的アプローチじゃダメなんでしょうかね?
考え方としては、iモード時代のベースバンドプロセッサ+アプリケーションプロセッサみたいな単純なオフローディングで、
これでリアルタイムOS側でNICをコントロールすれば、とりあえずDRAMのレイテンシは削れる(リアルタイムOS向けのCPUはL1のみで動作させてやればOK)んじゃないですかね?ARM+SH構成のSH-Mobileなら近いこと出来そう。
(バス混んだときどうなるの?とかは知らない。プロセッサの周波数的にCBEは有利なのは理解出来る)
結論としては、バス構成と割り込みコントローラを自作出来るんならなんでもありじゃね?ということで。

個人的にはちょっと古いですが、アットマークテクノ製SUZAKU-S(SZ130-U00)を使ったMicroblaze*2のAMP構成で片方がリアルタイム、もう片方で非リアルタイムみたいなことをやるのがこれからの時代だと当時は思ってました。
http://suzaku.atmark-techno.com/series/suzaku-s
まあLinuxとかCPUの性能が上がっちゃってあんまり必要なくなっちゃったけど。

今時の機材で自作してみたいんであればザイリンクスのZynq辺りを使って
http://japan.xilinx.com/products/silicon-devices/soc/index.htm
http://japan.xilinx.com/products/boards_kits/zynq-7000.htm
わりと簡単に自作出来そうですけど。

http://japan.xilinx.com/products/boards-and-kits/EK-Z7-ZC706-G.htm
$2495もあればIPがいろいろ付いてきて便利みたいですよ。GigEのRGMIIも乗ってるし、まさに用途には適合するかと。

CBEももう終わりならOpenSPARCみたいに公開してくれたら面白いのにね。

w_ow_o 2013/03/13 06:16 >リアルタイムOS向けのCPUはL1のみで動作させてやればOK
なのかどうかが、実装依存でよくわからんので、CBE使えばいいんではないかと思った次第。
というのは、L1に乗ってるアドレスに対して、外部I/OがDMAで、データを書きこんだときの挙動ってよくわからないし、結構めんどくさそうなので、大体のCPUが、キャッシュフラッシュする実装になってる気がするんですよね。それかDMA領域はキャッシュ不可にしないといけないとか。
それに比べて、SPUのLSなら、LSに物理アドレス割り当てられてるので、LSに直接書き込む実装になってるはず。

> 今時の機材で自作してみたいんであればザイリンクスのZynq辺りを使って
もともとの話が、「CPUなんて遅すぎ!これからはFPGA!!」みたいな話に対する反論用のデータを取ろうと思ってたので、Zynqを使うという結論にしてはいけないんですよ。多分。

w_ow_o 2013/03/13 06:57 いやこんなのがあった。
http://cloud.watch.impress.co.jp/img/clw/docs/516/386/html/xeon_10.png.html

もうIntelのLLCはメインメモリで、DRAMはスワップ領域と呼ぶべきだな。

odawaraodawara 2013/03/13 09:27 たしかにL1の実装はマジメに見てみないとわからんな。
ただDMA使わないでもいいんじゃないかって気がするけど。専用と割り切って無駄にCPUパワー使ってポーリングでも…

> もともとの話が、「CPUなんて遅すぎ!これからはFPGA!!」
これよく言うけど、じゃあZynqはCPUなん?FPGAなん?ってことになってしまうので、不毛だなぁといつも思う。

あと、x86系はバスの階層が深いからレイテンシ的には不利なイメージがあるんだけど、usecまで追い込んだことが無いのでよくわからないですね。
その辺マイコン系ならだいたいバスにNICがぶら下がってる構造になるから理屈だと有利なはずで(動作周波数としては不利か)、SHとかならたぶん理論値のクロックが計算出る気がする。
http://japan.renesas.com/products/mpumcu/superh/shether/index.jsp
ほんでSHとネットワークと言えばSH-Ether。データシートにネットワーク割り込み後の動作くらいは書いてるんじゃないかな。。。
http://japan.renesas.com/products/mpumcu/superh/shether/sh7652/index.jsp
とかだとEthernetコントローラ用の専用DMACとか乗ってるので、優位性は結構あると思うんですよねぇ(想像)

w_ow_o 2013/03/15 02:59 > ただDMA使わないでもいいんじゃないかって気がするけど。専用と割り切って無駄にCPUパワー使ってポーリングでも…
やはりそうか。intel 82574lならメインメモリ使わないでできるらしいんだよね
http://www.intel.com/content/dam/doc/datasheet/82574l-gbe-controller-datasheet.pdf の11.0(使うなと書いてるけど)
なので誰か試すときは82574で試すべき(他力本願)

> じゃあZynqはCPUなん?FPGAなん?
いやVerilog書いてコンパイル半日とかやったら負けっすよ!(ぜんぜん知らないけど)

トラックバック - http://d.hatena.ne.jp/w_o/20130312
 |