前節では、処理一般における3つの並列性について説明した。どのアプリケーションでもこれら3つの並列性は多少なりとも存在するが、アプリケーションごとにどの並列性を持つことを特徴とするかは異なる。ここでは、各種画像処理がどのような並列性を持つかを説明する。
ISPにおいて顕著なのはデータ並列性である。画素ごとに依存を持たない処理が非常に多い。前節で紹介したフィルタ系処理が、そうした処理の代表的な例だ。また、データ並列幅(SIMD幅)に関しても制限がない処理が多い。それらの処理は、原理的には1フレームの画素すべてをデータ並列に扱うことも可能である(ただし、ハードウエア量の制約から、実際にはデータ並列幅は制限される)。従って、ISPおよびそれに類する処理をターゲットとしたプロセッサでは、データ並列幅が100を超えるものも多い。
ISPにも命令並列性やスレッド並列性は存在する。だが、ほかと比較してデータ並列性が非常に高いと言える。
ビデオコーデックで特徴的なのは、スレッド並列性である。先述したように、MPEG-2やH.264では、例えば16×16画素サイズのマクロブロックや、(同じ符号化タイプの)複数のマクロブロックから成るスライスを処理単位とする。マクロブロック間には依存関係があるため、スライス単位で処理ごとにスレッド並列処理されることが多い。
一方、MPEG-2での処理の最小単位は8×8ブロック、H.264での最小処理単位は4×4ブロックである。そのため、ISPのように大きなデータ並列度はない。
なおH.264には、デブロッキングフィルタと呼ばれる処理量の多いフィルタがある。同フィルタの場合、ISPで用いられるフィルタよりも細かい制御を要し、データ依存性があるので、フィルタとはいえどもデータ並列性で性能を稼ぐのは難しい。そのため、スレッド並列と命令並列により性能を稼ぐことが必要となる。
画像認識の処理では、データ並列性、命令並列性、スレッド並列性がバランス良く用いられる。画像認識で行っている処理は、次の3つに分類される*6)。
1つ目の画像前処理/特徴抽出には、各種フィルタ処理やノイズ除去など、ISP処理と類似した処理が多く含まれる。演算量は多いものの、高いデータ並列性を利用できる。
2つ目の識別処理/統計量計算については、データ並列性はあるものの、処理対象領域とデータ並列幅が可変であることが多い。そのため、大きな固定幅でのデータ並列処理は難しい。そこで、短いデータ並列幅によるデータ並列性と命令並列性を組み合わせた並列処理、または短いデータ並列性、命令並列性にスレッド並列性を組み合わせた並列処理を行うのが有効である。
3つ目の推論/判断については、演算量は少ないものの並列化が難しい。この部分は(信号処理に用いるCPUコアとは別の)制御用CPUコアなどで処理を行うことが多い。
ここまで、画像処理における並列性について述べてきた。実際のアプリケーションでは、こうした並列性の特徴を理解して実装を行う必要がある。また、市販の画像処理専用プロセッサには、そのアーキテクチャに依存して、いずれも各種の処理に対する得手不得手がある。すなわち、自分が開発しているアプリケーションに適したプロセッサを選ぶことが重要だ。そこで続いては、ここ数年に発表された各社の画像処理専用プロセッサが、アプリケーションに対応してどのようなアーキテクチャを持っているのかを概観する。
表1は、国内の半導体メーカー各社から最近発表された画像処理専用プロセッサについてまとめたものである。この表では、特に並列構造を中心にアーキテクチャ上の特徴を示している。
イメージセンサー、DSC、DVCなどのISPに対する適用が報告されているプロセッサとして、「MXコア」(ルネサス テクノロジ)、「C-ViA」(東芝)、「FIESTA」(ソニー)がある。
ルネサスが2006年に発表したMXコアは、2048個の2ビットPE(Processing Element)をSIMD並列に配置したSIMDアレイプロセッサコアである。先に示した図3では、並列度を16ビット演算で換算した並列度としているため、2ビット構成のPEを持つMXコアの並列度は低くなっている点に注意されたい。2048個のPE間の接続関係としては、一定の距離にあるPE間で同時にデータ転送が可能となっており、FFT(高速フーリエ変換)のバタフライ演算などを効率良く行えるようになっている。
東芝が2009年に発表したC-ViAは、SIMD/VLIW型のプロセッサコアである。カスケード接続された10個の演算器から構成されるVLIW型PEを128個、SIMD並列に配置している。
2008年にソニーが発表したFIESTAは、4コアのマルチコアプロセッサである。各コアは1命令で4つの算術演算を実行できるVLIW型PEを64個、SIMD並列に配置したものとなっている。FIESTAには、SIMD並列化すると面積が巨大化するLUT(Look Up Table)や除算器などの専用回路を、各PEで共有する枠組みが用意されている。
ISPをターゲットとするこれらのプロセッサに共通するのは、高いSIMD並列度(64〜2048)を有すことである。これは、ISPの高いデータ並列性に対応している。
ビデオコーデックは、専用ハードウエアアクセラレータで処理することが多い。ただこの分野にも、ビデオコーデックをソフトウエアで実現するプロセッサがある。代表的な例が東芝の「Venezia-EX」である。これは、信号処理を行うMPE(Media Processing Engine)を8個備えるマルチコアプロセッサだ。各MPEは、東芝のコンフィギュラブルプロセッサ「MeP(Media Embedded Processor)」と64ビットのSIMDパイプラインを2本備えるVLIW型コプロセッサ「IVC2」から構成されている。ビデオコーデックで特徴的なのはスレッド並列性であるが、VeneziaではV-Kernelというカーネルにより、8コアを使ったスレッド並列性を実現している。
このように、ビデオコーデック向けプロセッサはスレッド並列性に対応したアーキテクチャを採用している。
画像認識については、代表的なものとしてNECエレクトロニクスの車載向けプロセッサ「IMAPCARシリーズ」が挙げられる。2009年夏に発表された「IMAPCAR2」が最新版である。
IMAPCAR2は16ビットの5ウェイVLIW型PEを128個、SIMD並列に配置したリニアプロセッサアレイ(LPA)に、制御用CPUを加えた構成となっている。IMAPCAR2で新たに加わった特徴として、4個のPEを1つのコアとし、MIMD処理を行うモードが追加されたことが挙げられる。これにより、画像認識処理におけるデータ並列性、命令並列性、スレッド並列性をよりバランス良く利用することができる。また、先述したように、画像認識の前処理に関しては高いデータ並列性があるため、ISPで用いられる高いSIMD並列性を持つプロセッサコアとの親和性が高いことも注目すべき点である。
ここまで、各種画像処理の特徴と、それに対応するプロセッサについて概観してきた。最後に、組み込み向け画像処理専用プロセッサの具体例として、筆者らが開発したISP向けプロセッサC-ViAのアーキテクチャを紹介する。これを通して、ISP向けプロセッサは、アーキテクチャにどのような特徴を持つべきなのかをご確認いただきたい。
その上で、ソフトウエア開発環境にも触れることにする。ここでソフトウエア開発環境を取り上げるのは、それがプロセッサに処理を実装する際の作業効率、作業工数に大きな影響を与えるからだ。すなわち、ソフトウエア開発環境は、実際のSoC(System on Chip)開発において非常に重要な要素となる。
前節でも紹介したとおり、C-ViAはSIMD/VLIW型プロセッサコアであり、10個のカスケード接続された演算器から構成されるVLIW型PEが128個、並列に配置されている。C-ViAのPEの構成は、図7に示したようになっている。
C-ViAはPE内にパイプラインとして3ステージに分割された10個の演算器を備え、それら10個の演算器を1命令で制御するVLIW型プロセッサである。命令並列性の説明で、図5の(G)と(C)と(D)がプロセッサによっては命令並列性を持つ場合があると述べたが、C-ViAがその1つの例だ。実際、図7のPEにおいて、EX0ステージのALUツリーで3つの加算を1命令中で指定することにより同時に実行できる。PE内における10個の演算器の構成は、ターゲットとする処理であるISPにおける演算の種類の比率、頻出する演算パターンを解析し、ISP向けに最適化したものだ。その結果、図8に示すようにISPの処理で頻出するフィルタ系演算パターンや分岐系の処理パターンでも、効率良く1命令で実行することが可能となっている。
図9は、典型的な一連のISP処理における単位面積当たりの性能について表したものである。前節で説明したVeneziaの信号処理プロセッサコアであるMPEとC-ViAとを比較している。グラフの縦軸は各プロセッサの(65nmのCMOSプロセスにおける)単位面積当たりのMOPS値(1MOPSは1秒当たりに100万処理演算の能力)だ。コスト面で要求の厳しい組み込みプロセッサでは、コストパフォーマンスが重要である。そのため、ここでは単位面積当たりの性能を比較している。
例えばゲインコントロールの処理では、C-ViAがMPEの4倍の数値を示している。このことは、同処理において、C-ViAの単位面積当たりで1秒間に処理する画素数がMPEの4倍であることを意味している。言い方を変えると、同一の性能を実現するには、MPEを使った場合、C-ViAを使う場合に比べて4倍のチップ面積が必要になるということだ。ターゲットとした典型的なISPの各処理において、単位面積当たりで、C-ViAはMPEの4〜13倍、処理全体では約10倍の性能を実現している。これは、ISPに最適化されたC-ViAのPE構成によるところが大きい。
なお、C-ViAの特徴として、PE構成以外に、ISPに特化したメモリーの使い方をサポートする専用メモリーコントローラを備えていることも挙げられる。この専用メモリーコントローラにより、使用するメモリー量を容易に削減することができる。それだけでなく、複雑なアドレス計算も性能を落とすことなく実現することが可能となっている。
C-ViAのソフトウエア開発環境は、「C-ViA Cコンパイラ」、GUI(Graphical User Interface)デバッガ、ソフトウエアシミュレータから構成されている。ここでは、その中でも特徴的なC-ViA Cコンパイラについて説明を行う。同コンパイラは、C-ViA用に拡張したC言語(C-ViA C言語)で記述されたソースコード(リスト1)を入力とし、C-ViAの多数の演算器への命令列を出力する。
先に、「画像処理専用プロセッサの実力を最大限引き出すためには、高い並列度を使いこなすことがポイントになる」と述べた。例えば、C-ViAでは10個の演算器が非対称に接続されており(図7)、より多くの演算器を並列動作させるためには、10個の演算器の組み合わせという非常に大きな探索空間の中から、最も効率的に演算器を稼働させることが可能な命令列を探索しなければならない。しかし、探索範囲が非常に大きいため、従来のコンパイラ技術では最適な命令列を現実的な時間内に生成することが難しく、コンパイル後に、部分的に人手によってアセンブリ言語によるコードの最適化を行ったりする必要があった。このような最適化手法は、大きな探索空間の中から人手で最適解を探し出していることと本質的に等価であるため、多大な労力を要すると同時に難易度の高い作業でもある。
C-ViA Cコンパイラでは、このような広い探索空間を効率的に探索する工夫を施すことにより、演算効率の良い、ほぼ最適解に近い命令列を現実的な時間内に探索することができる。実際、ソーベルフィルタやガウシアンフィルタなどの各種フィルタ、SAD(Sum of Absolute Differences)演算、画素補間処理など、40種類程度の基本的な画像処理について、人手でアセンブラを最適化したものに匹敵する性能のコードを出力することができた。このように、C-ViA Cコンパイラを使えば、従来のような人手による作業を行わなくて済むので、高い並列度を使いこなすソフトウエアの開発効率を向上することができるのである。
以上、本稿では、組み込み用画像処理専用プロセッサについて、さまざまな画像処理の並列性とプロセッサアーキテクチャの並列性の関係を中心に解説した。画像処理技術の広がり、進化とともに、このような専用プロセッサの活躍の場も増えてくると考えられる。組み込み画像処理システム、または組み込み画像処理SoC設計において、画像処理アルゴリズムの特性に適したアーキテクチャを持つ専用プロセッサを選択することは、コストパフォーマンスを向上させるためにも、今後より重要になってくるであろう。
Copyright © ITmedia, Inc. All Rights Reserved.