マルチプロセッサで実現したH.264ビデオ・デコーダ ――コンフィギャラブル・プロセッサのユーザ定義命令とオンチップ・バスを活用

東原朋成

tag: 組み込み

技術解説 2006年8月31日

● ユーザ定義のステートと命令で制御フローを高速化

 XtensaがMMXなどのマルチメディア拡張命令を備えたプロセッサと大きく異なる点の一つは,制御フローを拡張命令で高速化できることです.CABACを例に示します.図12には,条件分岐やループが多数見られます.演算そのものは単純ですが,SIMDタイプの演算は不適格であるため,演算の並列度を上げて処理能力を高めるというMMX型のアプローチはとれません.条件が多いということは,プロセッサ・パイプラインにハザードを生じやすく,やっかいです.

 Xtensaはユーザ定義のステート(状態)を設計できます.通常,プロセッサは,プログラム・カウンタをはじめ,GPR(general purpose register)のほかにいくつものステートを記憶しています.Xtensaでは,プロセッサが最初から持つステートのほかに,ユーザが独自のステートを定義できます.ユーザ定義のステートは,ユーザ定義の命令で参照・更新できます.ステートはダイレクトに参照されるので,GPRを参照する際に必要なオペランド・フィールドは不要です.つまり,命令語は自由にステートを使えます.もちろんステートもハードウェア・モジュールですから,むやみにステートを定義するとコスト面に影響します.

 CABAC用の命令を設計するにあたり,ユーザ定義のステートを活用しました.ステートを用いてCABACフローの条件分岐とループをすべて1命令に収めたのです.ステート・マシンをソフトウェアの命令語にしたことになります.ステートはCABACに特化したものではありません.実際,筆者らの設計では同じステートはCAVLC(CABACと並ぶもう一つの圧縮手法)などを取り扱う命令語でも使用しています.

zu12_01.gif

図12 CABACデコード・フローの一部(2)
膨大なデータをプロセッサ-メモリ間で移動,または二つのプロセッサで共有する必要がある.DMAを用いることで,外部メモリを介さずにデータ移動が行える.また演算を並列化できる.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日