MicroProcessor Forum 2007レポート 画像処理向けReconfigurable Processor
会期:5月21日~23日(現地時間) 会場:米カリフォルニア州サンノゼ Reconfigurable Processorは、定期的に話題に上るものである。MPFでもさまざまな製品が何度となく紹介されているし、量産状態に入ったものでも、有名どころでは東芝のMePとか(関連記事参照)米ElixentのET1などがあるし、NECも2002年にDRP(Dynamic Reconfigurable Processor)と呼ばれるReconfigurable Processorを発表、2002年のMPFでも講演を行なっている。 実はこのReconfigurable Processorのマーケットでそれなりに知名度が高いのが、日本のIPFlexである。さらに今回は米Stretchも新アーキテクチャをここに持ってきており、Session 4(Video & Graphics Multicore Architecture)で並んで講演が行なわれた。そんなわけでこの2つをまとめてご紹介したい。 ●IPFlex DAPDNA-IMX さて、最初の講演はIPFlexの佐藤友美氏によるDAPDNA-IMXの紹介である。内容に入る前に、簡単に製品の説明をしておく。 IPFlexは佐藤氏が独自のReconfigurable Processorを作るために作った会社、といっても過言ではない。もともとDAP(Digital Application Processor)と呼ばれる32bit RISCコアとDNA(Distributed Network Architecture)と呼ばれるReconfigurable Processor Array Elementを組み合わせたものがDAPDNAという製品になるわけだ。 このDAPDNAシリーズ、最初の製品は2002年に出荷を開始したDAPDNA-HPで、これに続き2004年には性能を強化したDAPDNA-IIをリリースしている。これに続くのが、2006年にサンプル出荷を開始したDAPDNA-IMSで、これはDAPDNA-IIを画像に特化処理に特化した形で内部を変更した、いわば派生型である。 今回発表されたDAPDNA-IMXは、このDAPDNA-IMSの後継製品に相当する。画像処理に特化、というのは扱えるデータ幅を最大16bitに限ったことを指す。もちろんフルカラーの演算であれば、フルカラーだと24bitとかαチャンネルを入れて32bitという数字になるわけだが、DAPDNAがターゲットとしているマーケットは画像処理などであり、なので8~12bit/pixelのモノクロ映像とか、カラー映像でもRGBではなくYUVで、そのYだけを扱うといった具合だ。最近のCPUとはまたちょっと違った世界の話であり、こうしたケースでは32bitをフルに使う事はほとんどない。むしろ16bitにして演算コアを小型化し、その分コアの数を増やしたほうが並列度が上がる、というわけだ。2005年におけるロードマップでは、次のようになっていた。 ・DAPDNA-II: 90nmプロセス、166MHz駆動、376個のPE(Processor Element) 実際今回発表されたDAPDNA-IMXを見るとプロセスこそ90nmのままであるが、DAPは266MHz駆動のものがデュアル、DNAは955個ものPEが266MHzで動くという事になっており、おおむねロードマップが守られている事がわかる。 最後にReconfigurableについて。DNAは、PEが複数個で形成され、これが個別に動作することで演算を行なうが、このPE同士をどうつなぐか、PEに何をさせるか、といった事を瞬時に切り替えられるのがReconfigurableたるゆえんである。 DAPDNA-2の場合、Configuration Memoryと呼ばれる構成情報を4バンク分持っており、これを切り替える事により1クロックでDNAの動作が切り替えられる仕組みだ。 さて前提知識はこんなところで十分だろう。今回発表されたDAPDNA-IMXは、従来と同様に富士通の90nmプロセスで製造される(図2)。消費電力などは発表されていないが、かつてのDAPDNA-IIも数Wのオーダーだったことを考えると、劇的に大きくなってはいないと思われる。 DAPそのものは相変わらず5段のパイプラインを持つRISCの模様だ。全体の内部構成は図3のような具合で、BSUが128bit/266MHzとかなり広帯域になっているのがわかる。従来のDAPDNA-IIと比較すると、DAP側にあったDirect I/O(DAPDNA同士を接続する外部インターフェイス)が省かれているのが特徴的だ。
図4がDAPDNA-IMXの内部構成である。中央に巨大なDNAの塊が用意され、周辺I/OやDAPは周囲に追いやられている。DNAが16のセグメントに分かれているのは、さすがに955ものPEをまとめて接続するのは組み合わせが膨大になりすぎるから、という話である。これは単に実装のみならず、これを利用してのアプリケーションの設計にも大きく影響してくる。 そこでこれを16のセグメントに分け、かつセグメント同士をつなぐInterconnectを別に用意する形になっている。これにより設計の複雑さがだいぶ軽減され、後述するDataflowベースのツールでも取り扱える範囲に収まっている。 各セグメントの中は図5のような具合だ。PEはALU/Delay/Memoryの3種類が用意され、各々の役割を交換することはできない。この3種類の組み合わせ方を自由に変えて、必要な処理を行なうというわけだ。そのPEの内訳を示したのが図6である。さまざまなPEが混在する形で配されているのがわかる。 これを使う場合、(先に触れたように)まず各セグメントの構成をDNAにロードしてやり、ついでデータをロードする必要がある。これを担うのがDAPであるが、転送そのものはDNAのもつLDBが行なう形になる(図7)。 さて、こんな形でDNAを動かすとどの程度高速か、という事に疑問に対する答えの1つがこの図8の数字だ。DAPを使うと0.33秒ほどかかる処理が、DNAでは1.5msほどで完了する。実に285倍ものスピード、ということになるが、何しろDAPそのものがそれほど高速とは言えないコアだから、実力としてはやや疑問が残らざるを得ない。
そこで、もう少し一般的なコアを使っての比較を行なったのが図9、10である。DAPDNA-2が最初に説明した、2004年に登場したもので、右端が今回のDAPDNA-IMXでのスコアになる。いくつかの画像処理を行なった結果であるが、汎用プロセッサと比較して100倍以上高速な結果になる場合もあることが示されており、またDAPDNA-2と比較してもPEの数を増やしたこともあってか、大きく性能向上が図れるケースがあることが示された。
次に示されたのはこのDNAのプログラミング方法。以前DAPDNA-IIの時にはDNA Designerと呼ばれるGUIエディタとMATLIB/Simulinkを使ってのDesign/Buildがサポートされているという話だったが、今回はこれに関しては触れられず、もう少しコンサバティブな方法が紹介された。 これはDataflow-Cと呼ばれる、同社が独自に提供するコンパイラである。DAPの側にはDAP Compilerが提供されており、まずはこれでDAP側のプログラムを普通に作成する。これと平行してDNA側のプログラムをDataflow-Cで開発、その結果をマージする形でプログラムが完成する(図11)という仕組みだ。そもそもDNA自体が、データの流れを記述する形でプログラミングするというスキームを採用しており(図12)、Dataflow-Cは名前の通りこのデータの流れを記述できるような仕組みを取り入れたものになっていると考えれば良い。
このDataflow、たとえばJPEGやMPEGでおなじみIQuantize→Inverse Scan→IDCTという流れを見てみると実に興味深い(図14)。あちこちに律速段階ができるのは仕方ないとして(これはもともとのアルゴリズムに起因するから避けられない)、IDCTは猛烈に高速化できそうな一方、IQuantizeとかInverse Scanではそれほど大きな期待ができないことがわかる。先に図9でJPEGのデコードがそれほど高速でない結果が示されたが、これを見れば理解しやすい。 ところでこのプログラミングを、先のDataflow-CなどによるDFCデザインツールを使った場合と、ハンドオプティマイズした場合を比較したのが図14だ。性能に関しては明らかにハンドオプティマイズをした方が高速化可能だし、PEも効率的に利用できる。それはいいのだが、開発期間を比較すると倍では利かない、というあたりがこの手のデバイスのプログラミングの難しさを物語っている。佐藤氏はこれをトレードオフだと語っていたが、実際まさしくわかりやすいトレードオフの関係にあると言える。 ついで佐藤氏は「Reconfigurable Processorは死んだなどとよく言われるが」などと前置きしながら、実際のアプリケーションへの展開例を挙げ、商用製品に次第に入り込みつつあることを示した(図15,16)。最後に設計上のチャレンジとして4つの項目を挙げて、同氏の講演は終わった(図17~20)。 ●Stretch S6 Family IPFlex同様に、Reconfigurable Processorを提供しているのが米Stretchだ。 Stretchは、MPFで第2世代の製品となるS6 Familyのアーキテクチャを発表した(図21)。さてそのStretchの考え方も、IPFlexとよく似ている。特定の処理を高速化するのに、CPU+DSPという組み合わせが効果的というのは、ARMやMIPSなどがこぞってDSPコアを標準化していることからもよくわかる。これに加えてDSPだけを集積化するという組み合わせ(FreescaleのMSC8144などこの最たるものだろう)もありえるし、あるいはDSPにFPGAを組み合わせて高速化するなんていうアプローチにも可能性があるのは、IntelがFPGAにFSB Licensingを提供し始めたことでも理解できると思う。ただ、どのアプローチにも当然一長一短があるわけで、使い分けが難しい事になる。こうしたものを全てカバーするのがReconfigurable、というわけだ(図22)。
そのReconfigurableだが、ターゲットアプリケーションが異なると当然扱うべきデータが変わってくる。従来のStretchのS5はビデオ処理に加えてWiMAXなどの信号処理用途に使われる汎用のものであったが、S6はビデオ処理などに特化したものになったという(図23)。 そのS6 Familyの内容という事になるが、基本構成は図24に示す通りだ。汎用プロセッサとしてはXtensa LXを採用し、この中にISEFという形でReconfigurable Processorを搭載する。更に、これとは別に特定用途向けアクセラレータを搭載し、これらと強力な周辺I/Oを統合する形になる。
このCPUにXtensaとかARCのARC 600/700といったコアを採用するのは、この手の製品ではおなじみの手法で、むしろIPFlexのようにスクラッチでCPUを起こすほうが例外と言える。VLIWの命令セットとは言え、開発ツール類もtensilicaから提供されるから、使う上で何か問題になるという事は考えにくい。 そのCPUの内部構成は図25のようになっている。命令デコードまでのパイプラインは完全にCPUとISEF(Instruction Set Extension Fabric)IIと共用する形で、構造的にはARMにおけるNEON Technologyに近い。そのISEFIIはというと、これもこれでちょっと面白い(図25)。“Primary Uni-Directional Data Flow”とある通り、Feedback Pathなどはまるで考えていないことがわかる。 ただ、必要ならALU側に戻してFeedbackをかけることはできるだろうし、その際のペナルティそのものはIPFlexより小さい(何しろ同じ実行パイプラインの中にある)。また速度を上げるためにさまざまなテクニックが施されている事がわかる。 具体的な構造は図26に示す通りだが、こちらも全体を複数のブロックに分けているあたりはIPFlexにも通じる。面白いのはMultiplier。単体では8bit×16bitのみで、これをカスケード接続することで最大32bit×32bitまでの演算ができる、という仕組みだ。恐らく8bit×16bitというのは各Pixelに係数を掛けるような単純な処理用で、もう少し桁数と精度が必要な面倒な作業の場合にはカスケードで繋ぐといった使い方になるのだろうが、その数がそれほど多くない(全体で64個しかない)というあたりが、逆にCompute Arrayの機能そのものがそれほど高くないことをうかがわせる。 結果として、Reconfigurable Processor Arrayのみで完結できる処理はそれほど多くない事が想像される。それを補うのが、Special Acceleratorだ(図27)。Motion EstimationとかEntropy Encodingなど普通ならReconfigurable Processorに向いているはずの用途にすら専用アクセラレータが用意されているあたりからも、これが伺える。もっともここに関しては、ソフトウェアに関する見通しからくる割り切りもあるようだ(図28)。 「2カ月以内に(ソフトウェアの記述を済ませて)動かせるようにする」というコンセプトがこれを物語っている。これはIPFlexの時にも出てきた議論であり、TATの短縮というReconfigurable Processorの巨大な課題に対する1つのアプローチというか、割り切りなのだろう。このあたりは、開発工程にも見て取れる(図29)。 ALU+FPU+Reconfigurable+AcceleratorなんてVLIW命令セットをハンドアセンブルするのは論外だろうし、それとは別にReconfigurableへのプログラム(VLIWに含まれるのは、あくまでISEFII全体へのリクエストであって、各エレメントで何を実行するかは別にロードするのだろう)を記述する必要もある。そこで、普通にC/C++で命令をまとめて記述し、それを自動変換して実行環境を作るツールのみが提供される。当然こういうケースで最適化を狙うのは非常に難しいわけだが、逆にアクセラレータなどをうまく使えば最適化が不十分でも狙った性能を得られる、という割り切りがここから見て取れる。 もっとも、それでも必要な性能は得られるとしている。図31はH.264のエンコードの性能比較である。S6単体ではせいぜいHDのH.264 Baseline Profileが1本リアルタイムでエンコードできる程度でしかない(図30)。面白いのは、図31では、その性能よりも、レイテンシや消費電力の低さを主にアピールしていることだ。 しかし、絶対性能そのものはそれほど高くないわけで、これをどう解決するか、というと、AIMを使ってS6シリーズを接続するというマルチチップ構成である(図32)。つまり数で勝負というわけだ。実際複数のプロセッサを接続した場合でも、データの流れはハードウェアで自動的に管理される。最大32プロセッサまでをサポートするが、これは「UMA方式を取る場合、32プロセッサがレイテンシの限界」という話であった。面白いのは、データのルーティングはハードウェア側で全てオフロードすることで、プログラムはDestinationだけ指定して送り出せば、勝手にルーティングしてくれるとの話だった(図33)。実際には、たとえば図34のような形でマルチプロセッサ構成をとるが、この際にうまく処理負荷が分散され、効果的に動作するという話だった。 処理能力を活かすためには、当然I/O性能も引き上げる必要がある。このために、Quad Data Port(図35)を持つほか、High-Speed Peripheral/Low-Speed Peripheralや(図36)、強力なDMAコントローラもてんこ盛り(図37)となっている。 こうしてみると、IPFlexのDAPDNA-IMXとStretch Inc.のS6 Familyは、共にReconfigurableと言いながら、設計方針がまるで違うことがわかる。 DAPDNAはいわばReconfigurable至上主義。全ての処理をReconfigurableで済ますことを念頭に、それに必要なサポートを周囲のロジックで行なうという方針だし、最適化すればマルチチップなど必要はないといわんばかりの割り切りも、ある種の清々しさを感じる。S6にとってReconfigurableはいわば添え物。一種のアクセラレータと看做している風すらある。これを補うためにその他のアクセラレータやMulti-Chip構成を用意している。当然用途は限られる(本当にVideoのEncode以外には使えない)が、その用途には低コスト(特にソフトウェア開発コストの低減)でソリューションを提供できる。どちらが良いという話ではないが、強いて言えばDAPDNAはいかにも日本的なプロセッサ、S6 Familyはいかにもアメリカ的なプロセッサだと感じた2つの講演だった。 □Microprocessor Forum 2007のホームページ(英文) (2007年5月29日) [Reported by 大原雄介]
【PC Watchホームページ】
|