リコンフ8策:あなたの実装を研究にするためにF

リコンフ8策:FPGAで実装をしたあなたに

あなたは、FPGA上にハードウェアをかなり苦労した末、実装して、PCのソフトウェアに比べて 5倍高速に動かすことに成功しました。 この経験をリコンフィギャラブルシステム研究会で発表すれば、高く評価をして もらい、励ましと実装上のアドバイスをもらうことができます。ところがあなたは、世の中の 風が大変冷たいのに気づくでしょう。「実装しただけでオリジナリティがないじゃないか」 「ハードウェアで実装したんだからソフトウェアに比べて速くなるに決まっている」 「こんなの研究じゃないよね」 とか言われ、修士論文や博士論文の発表会では他の分野の先生に 猛烈にいじめられてしまいます。あなたの挙げた成果と その意義は、他の分野の研究者に比べて決して劣るわけではないのですが、 この言われようはどうでしょう? それは、リコンフィギャラブルシステムの分野が若くて定着していないことが一つの原因です。 どちらかというと、このようなことを言う方の頭が固陋で時代遅れといえましょう。 とはいえ、ちょっとだけ工夫することによってこの いわれのない非難を免れることができます。これがリコンフ8策です。あなたが研究を進める 時にこの8策を使ってください。必ずやあなたの実装の研究としての価値が高まるでしょう。

リコンフ8策

その1:対象アプリ毎に作り込め。プリプロセッサでハードウェアを生成せよ。

あなたの実装したアプリケーションが、様々な解法やデータ構造を使ったりするのならば、 それぞれの対象問題毎に専用のハードウェアを生成するようなプリプロセッサを作りましょう。 アプリケーションに対応して、パラメータだけ変えて生成させてもいいですし、ユーザに解法を選ばせて もいいです。あるいは言語やGUIを作ってしまうのも楽しいです。対象毎にHDLを吐き出して FPGAで動作することのできるシステムを作れば、これは文句なしにオリジナリティのある 研究です。全てができるシステムを作るよりも、高速かつ低コストに 実現できますし、書き換え可能であるという利点を存分に発揮できます。

その2:精度を絞り込め。その精度は本当に必要か?

コンピュータは8×2のべき乗で世の中を表現する機械といっていいです。コンピュータの 表す数は8,16、32、64にほぼ決められています。ここにリコンフィギャラブルシステムの つけめがあります。リコンフィギャラブルシステムでは自由に桁数を設定できます。場合によっては 使っているシステムの一部で桁数を短くしたり、伸ばしたりできます。IEEE標準の浮動小数点 演算ではなく、固定小数で十分な場合もあります。これにより普通の ソフトウェアでは得られないような高速性や高精度が実現できます。アルゴリズムの それぞれのステップで精度検定を行うことによって、あなたの研究にオリジナリティと付加価値を 呼び込むことができます。逆に非常に長い桁の精度が必要な場合、これもまたチャンスです。 ソフトウェア実行に比べて格段の性能向上が得られます。 ぼんやりソフトウェアを実装しないで、それぞれのステップで考えてください。 その精度は適切なのか?と。

その3:シストリックアルゴリズム、データフロー制御を使え。

リコンフィギャラブルシステムでの性能向上は並列性の利用に掛かっています。 単純なSIMD、パイプラインの利用はもちろんですが、これは普通のCPUでも使っているので インパクトは小さいです。むしろシストリックアルゴリズム、 データフロー制御を使いましょう。この二つは、リコンフィギャラブルシステムとASIC実装以外では まず使われない上、頭の古い人も名前は知っているので 効果が大きいです。I/O性能がさほど要求されない点も優れています。 各レベル、各ステップで組み合わせて使って ください。性能を上げると共に、対象アプリケーションに対する ハードウェアアルゴリズムの提案である、と主張することができます。その1と組み合わせ、 対象に対応する並列処理システムを生成できればさらに研究価値が高まります。

その4:内蔵RAMの同時アクセスを使え。

FPGAの利点の一つは、内蔵RAMを多数同時にアクセスできる点で、弱点は、その容量が 限定されていて、仮想化されていない点にあります。限定量のデータを分散して内蔵RAMに 格納して、これを同時処理する形ができれば劇的に効率が上がります。もちろん、これは その3の並列処理との組み合わせという点でも重要です。

その5:スタンドアローンシステムを作れ。

FPGA上での実装を行う場合、シナリオを明確にしておかなければならないです。 一番印象が悪いのは市販のボードをPCにつないで、処理の一部だけをFPGAの上に載せることです。 この場合、PCの処理を加速しなければならず、比較対象がGPUなどのアクセラレータになってしまい、 勝ち目が薄いです。対象アプリが組込みシステムで使えるのならば、一連の処理を全てFPGAの上に 載せましょう。あるいは載せることにしましょう。ホストにはPCを使わず、ソフトプロセッサ (あるいはハードコア)を使いましょう。 全てFPGAボード上で行うことで、ソフトウェアとハードウェアの分担など、 研究的な興味も一段と高まります。強力なPC上のソフトウェアとの 比較ではなく、ソフトプロセッサ上の ソフトウェアで全部処理した場合や、組み込みプロセッサ、DSPに対する 加速をアピールすることができます。

その6:消費電力を測れ。

対象した実装が組込み領域ではなく、高性能科学技術計算となり、 比較相手がGPUの場合、正直言って性能では勝ち目が薄いです。 この場合でも、電力効率で勝負することができます。電力を測りましょう。設計ツールでの 評価でもよいですし、ボード上の電流を測ってもいいです。GPUに対して1桁は勝つことができ、 エネルギー効率で勝負すれば、性能で多少負けても十分圧勝できます。 スーパーコンピューティングで消費電力を減らしても意味がないのではないか?と言われたら、 最近のスパコンの設計でいかに電力削減が重要かという解説をじっくりしてあげてください。

その7:部分再構成を使え。

マニアックな実装手法であった部分再構成もようやくツールに組み込まれ、普通に使える ようになってきました。必要に応じて部分的にモジュールを入れ替える技術は、これを 使うだけで魅力的な研究となります。まず、活用が可能なのは、主として組み込みで スタンドアローンの環境です。限定されたハードウェアで必要に応じて構成を変化させることが できます。次に高性能計算の分野でも、モジュール化された巨大なアプリケーションを 実装する場合には効果があります。ただし、あまり小さなモジュールで使っても 効果が少ないので、設計の最初からこの方法を使うことに決め、 なるべく大きな部分を部分再構成領域に取る設計が重要です。

その8:ASICでのハードウェア実装と比較せよ。

ソフトウェアをハード化したのだから5倍程度速くなるのは当たり前、という人は 現在のIntel系のCPUがFPGAと違った特殊なプロセスで実装されていて、猛烈に 電力を食う代わりに、周波数からして1桁速いという事実を理解してくれません。しかし、同時に こういうやからは、ちょっと前のASICより最近のFPGAの方が高速ということも 理解していないため、この点を利用することができます。ハードウェアをFPGA上に工夫して 実装した場合、チップ系の論文を探して 過去のASICで同様のハードウェアアルゴリズムが実現されていたら、それと比較 しましょう。もちろんプロセスや実装された年を明記して公平に記述するのはもちろん ですが、それでも多くの場合、あなたの優れた実装をアピールすることができます。

RECONF