ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

SIMDプロセッサの開発環境が無料公開

SIMD

コンピュータアーキテクチャの教科書には、SIMD(Single Instruction Multiple Data)のアーキテクチャが必ずでてきます。理屈は分かるのですが実際にどのようなプロセッサなのかイメージがわかない人もいると思います。今回は、リコーのSIMDプロセッサRiシリーズの開発環境が無料で公開されたので紹介してみます。

リコー製品(複合機)に組み込まれている現行プロセッサであること、資料が全て日本語であること、無料で動作シミュレーションができること、等を考えるとSIMDの勉強にはもってこいだと思います。コンピュータアーキテクチャを勉強している方は、いろいろとチャレンジしてみてはどうでしょうか。

SIMDアーキテクチャ

x86のSSE(Streaming SIMD Extensions)は、その名の通り追加命令という形でSIMDを実行しており、メインの命令体系はあくまでSISDです。RiシリーズはメインのプロセッサがSIMDで、サブ的な位置づけとして16bitの汎用プロセッサが付いています。CELLのSPEとPPEの関係に近い物があります。CELLとは違い、複合機に特化した形で機能のシェイプアップが行われています。

メインの演算単位は16bit、メモリ空間も16bitです。ただし、命令長は32bit固定という面白いアーキテクチャです。SIMDの並列度は352個あり、一つのAddを実行すると352個のAddが実行されます。画像処理で言うと352ピクセルの処理が同時に終わることになります。実際にはSIMDの端っこの方は、上手く使うのが難しいのですが、そこには深入りしません。ほとんどの命令が条件付き実行であり、演算の前に値のシフトが実行可能など、若干ARMの雰囲気を感じます。レジスタの大きさよりも命令長の方が大きいため、条件付きで16bit即値演算+レジスタへのライトが1命令で出来ます。

レジスタリネーミング、アウトオブオーダーなどはありません。ジャンプ命令は遅延スロットを1つ持っています。Riシリーズの特徴として、レジスタへのライトに遅延スロットがあります。あるレジスタへ値を書き込むとき、次の命令では新しい値が書き込まれずに、次の命令から書き込みが有効になります。その1命令の間に、依存性の無い別の命令を実行させることができます。

SIMDだけで処理できない問題(データの反転等)は、SIMDコアの外に専用のハードウェアを持っています。

アセンブラ

演算はアキュムレータを中心に行われるため、通常のアセンブラに比べると、オペランドが一つ少なくなります。
Add R20
で、352個のR20と、352個のアキュムレータの値が加算され、352個アキュムレータの値が更新されます。
ADD R20:L1:Z1
で、自分からみて隣のレジスタを1bitシフトした値を、アキュムレータから引いて、アキュムレータの値を更新します。自分から見て隣という表現は、Excelの相対位置指定のような感じです。Riシリーズは、相対位置で左右3個までのレジスタにアクセスできます。

演算前のシフトですが、アキュムレータに対する処理は左シフト、アキュムレータからレジスタに値を戻すときは右シフトになるのが面白いところです。画像処理をする場合、係数で足して行くときはn倍の事が多く、最後足し込んだ値を戻すときは正規化のために1/nする処理が多いためこうなっています。

乗算器もそれほど性能が良くなくて、基本的にはシフトして足し合わせることになります。これも画像処理を考えたときに2〜255の範囲で乗算をすることが多く、その範囲であればシフト+加算の方が効率が良いためです。Riシリーズはシフトして加算が1CLKで出来るので、例えば9倍であればアキュムレータに値を持ってくる、8倍して足すの2CLKで実行できます。この2CLKで352個の9倍が完了しています。

遅延スロットとnop

先ほど、レジスタへのライトに遅延スロットがあると書きました。ストールしてしまえばすむことなのですが、Riシリーズではあえて遅延スロットにしています。これにはSIMD特有の事情があります。

SIMDの場合、一命令で複数の演算が出来ます。Riチップの場合は352個の並列度を持っています。もし、nopを一つ入れた場合どうなるでしょうか。それは、352個のnopが実行されることになります。SIMDの世界では「SIMDの1クロックは血の一滴」理論が使われおり、1clkでも無駄になるならそこは別の事をさせようとする発想になります。そういう事情もあって、レジスタへのライト命令は1CLK後に反映されますが、その間は別の命令を実行できるようになっています。

ダウンロード

資料、開発環境、サンプルのダウンロードはこちらから。
http://www.ricoh.co.jp/LSI/product_assp/ri/tool/library/download/ri20_dl.html

最後に

Riチップを使った画像処理ライブラリも公開されているので、興味のある人は見てみると面白いでしょう。脳内ソースによると、今回の開発ツール公開の裏側にはFPGAの無料開発環境に対抗したという事情があるようです。学生の方々で、我こそはと思う人はSIMDの世界に飛び込んでみてはどうでしょうか。
個人的にはこのプロセッサの画像処理以外の使い道に興味があり、Riシリーズで画像処理をしたら負けだと思っています。

おそらくダウンロードしただけではさっぱり動かないと思いますが、続きを書くかどうかは反響次第です。