PS3で使われるCellの情報(無駄に長文)

ついにSCEIから公開されましたね [http://cell.scei.co.jp/index_j.html]
ドキュメント好きな人間としてはこういうのを読むとニヤニヤしてしまうものです。

PS2でPS2 Linux購入した時には、簡単なEEとVUのマニュアルが
付いてただけだったのでちょっとしょんぼりだった思い出が。
当時はこんなPDFを読んでニヤニヤしてたこともあったかなぁ(遠い目)
東芝2000年10月技報 「家庭用ゲーム機を進化させるリアルタイム三次元CG技術」

これまで
・PS1 → ねっとやろうぜ!
・PS2 → PS2Linux
・PSP → 今回
というように各プラットフォームでいろんな物を作ってきたわけですが
さて、PS3は一般ユーザーが中身を弄れる日は来るのでしょうか・・・?

ついでにこれまでの人生で触ったことのある開発環境でのコード比較をしてみる。
過去どこかのサイトで書かれていた情報を基にしています。(そのサイトは現在消滅)

[各プラットフォームでの単純な演算集]
---------------- 開始 ----------------
// C言語 (unsigned short i)
i=0x8000;
i=(i>>8)&0xff;

// Verilog
assign i[15:0] = 16'h8000;
assign x[7:0] = i[15:8] && 8'hff;

// R3000(PlayStation)
ori t0,zero,$8000
srl t0,t0,8
andi t0,t0,$ff

// VU(PlayStation2-VectorUnit)
NOP IADDIU VI01,VI00,0x7fff
NOP IADDIU VI01,VI01,1
NOP MFIR.x VF01x,VI01
ITOF4.x VF01x,VF01x IADDIU VI02,VI00,0xff
FTOI0.x VF01x,VF01x NOP
ITOF4.x VF01x,VF01x NOP
FTOI0.x VF01x,VF01x NOP
NOP MTIR.x VI01,VF01x
NOP IAND VI01,VI01,VI02

// TMSC62x
zero .L1 A0
set .S1 A0,0xf,0xf,A4
shr .S1 A4,8,A4
extu .S1 A4,24,24,A4

// 68000
move.w #$8000,d0
lsr.w #8,d0
andi.w #$ff,d0

// x86系
mov ax,8000H
mov cl,8
shr ax,cl
and ax,ffH

// Z80(番外編)
LD H,80H
LD L,00H
SRL H
RR L
SRL H
RR L
SRL H
RR L
SRL H
RR L
SRL H
RR L
SRL H
RR L
SRL H
RR L
SRL H
RR L
LD A,L
AND ffH
---------------- 終了 ----------------

全部を眺めてみた感想
・C言語
 はい。全てのコードのオリジナルですが、全く意図のないコードです。
 まぁ内容に関しては華麗にスルーしてください orz
・Verilog
 HDL言語(ハードウェア記述言語)ですね。
 これも実際はこんなコードは書かないでしょう(定数入れて終わりなので)
・R3000
 PS1のアセンブラですね。PS2やPSPにも関連しますかね。
 このコードだけレジスタへの値設定をORでやってるので
 意図的な最適化が入っているとも言えるかも・・・
・VU
 PS2のベクターユニット(VU)向けに記述するとこんな感じに。
 元々ベクタ演算に特化したものなのでITOFやFTOIみたいに
 不要な命令が入ってますな。他と比べて異彩を放っているかも。
 この辺りがVUが扱いにくいと言われる所以なのかもしれないですね。
 (実は知らないだけでもっと簡単な記述があるのかも?)
・TMSC62x
 TI社のDSPですな。さすがにこんなサンプルコードではパイプラインも組めず・・・。
 これに関しても最初のロードをZERO(内部的には同じレジスタの引き算)で置き換えてます。
 まー設定する値が0x8000だからZEROとSETが使えるという話でもあります。
 これも意図的な最適化ですね。
・68000
 MC社の68系ですな。ニーモニックが直感的で分かりやすく、
 レジスタモードやアドレッシング等含めて個人的には一番好きなアーキテクチャーです。
・x86
 Intel社の86系ですな。個人的には一番苦手なアーキテクチャーです・・・。
・Z80(番外)
 8bit演算のみを使うとこんな感じに。ゴメンナサイ無理させすぎました。orz
 これこそ意図的な最適化(汗)。HLで記述すればこんなにはなりませんね。

とまぁこんな感じにCellの登場をニヤニヤしながら待ってます(オチ無し)

#普通に最適化かけたら0x80代入して終わりですけどね!
[PR]
by maman_jv | 2005-08-26 22:00 | 日常
<< 自分メモ1 GPU対応はやっぱりかなり面倒ですな >>