2010年05月19日

MXU命令メモ

Jz47xx の XBURST アーキテクチャには、MXU 命令という マルチメディア用の命令セットがある。

これが使えるのと使えないのでは、画像や動画のデコード性能が随分違うはずだと思うので、ググってみた。

どうも QI のメーリングリストの情報が 一番整理されているようだ。



どうもこれが ingenic が公開しているすべてらしく、どういう 命令があるのか 一覧すら公開されていない。

命令の 一部の名前は分かったので、それでググってみると ..


がヒットした。

dingoowiki.com の方を見ると 一覧と MXU 命令を 使うために すべきことの情報がある。

gp32x.com には、よくわからない 一覧になっているが、mxu_as (という awk スクリプト)を解析して どのように変換しているかの情報になっているらしい。

これらの情報をみても、それぞれの MXU 命令がどういう動作をするのかはっきりとは理解できない。

定義を理解するには、jz_mxu.h を見るのが一番のように思う。

jz_mxu.h には、命令に 1:1 に対応したマクロが定義されている。MXU を使う場合は、asm 命令を使用するが、MXU なしだとそれに相当する C コードにする。

これをみれば、どうやって使うのかは分かる。あとは、mxu_as 。これは、jz-crosstools-src.tar.bz2 に含まれているらしいのだが ... 66MB もある。このなかの misc/mxu_as だけを見れば良い。

とりあえず、mxu_as と jz_mxu.h を 以下に置いておく。


さて、まずは、mxu_user_guide_EN.pdfDevelopment:MXUをあわせて 見てみる。


  • 60 の SIMD 命令セットがある。(SIMD 命令は全部で 60なのはマニュアルに書いてあった)
  • xr0 - xr16 の 17 個の XMU レジスタがある。それぞれは 32bit 。
  • xr0 は、zero レジスタで 常に 0 。xr16 は コントロールレジスタ。
  • XMU 命令を使うためには xr16 の bit0 を 1 にしなくてはならない。

    • mxu-instructions-listの方は 58命令分しか解析していない。足りないのは、D16ABS , S32ABS 。

    • Jz4755 などで拡張された SIMD2 命令セットは、114 命令 (差分 54命令)だが、どうも mxu_as に拡張部分も定義されているようだ。
      jz_mxu.h には、SIMD(無印) の分しか定義されておらず、分かるのは拡張された命令の名前だけ。



ということらしい。

で? 60 個もあるという 命令はどんなものなのだろう? 

まずは、Development:MXU を見ると

  • ロード・ストア 10 種類
  • 加減算 12 種類
  • 乗算 9 種類
  • その他の算術演算 11 種類
  • シフト・シャッフル命令 16 種類

60 種類にはなっておらず 合計 58 種類が記載されている。でもよくよく見ると モードがいくつかあるようで、別々の命令として考えると種類は爆発的に増える。

それはともかく、いったいどれぐらい加速されるのだろう。あまりSIMD 命令は知らないのだが、1 命令での結果の数でカウントしてみることにする。

加減算系統だと、Q16 とか Q8 とかがあって たぶん 最大 4 つ。32bit でも D32 とかあるから 加速されるようだ。

乗算系だと D16 とか Q8 があるから 一応最大 4 つ。ただし、乗加算もあるから x2 と考えると 8つ。

1 クロックで実行できるものなのかどうか不明だが、一応 通常命令より 8 倍ぐらい高速化できるものだという風に思うことにしよう。



ところで、簡易アセンブラしかないような状況というのは分かったが、Linux での対応はどんな感じなのだろう?

見てみたのだが、どうも MXU レジスタのセーブ・リストアするようなところはないように思う。

たぶん、MXU 命令を使うプロセスを 1 つに制限しないと誤動作する。PMP だし 普通はそんな心配はいらないわけだが、うっかりするとまずいかも。

posted by すz at 23:56| Comment(0) | TrackBack(0) | Jz47xx(CPU)
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス: [必須入力]

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/38304175
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック