皆さんはFPGAという言葉を聞いたことがあるでしょうか。FPGAは「Field Programmable Gate Array」の略です。日本語にすると「現場で(Field)プログラミングできる(Programmable)回路チップ(Gate Array)」ということになります。内部の回路を後から書き換えられるLSIチップなのです。

 FPGAの大きな利点の一つは、通常のLSIよりも開発費用が安く済み、開発から製造までの期間が短い点です。周辺ハードウエアが整っていれば、チップ回路を設計して実際に動かすまでに、長くても数時間しかかかりません。

写真●FPGAでMSXパソコンを再現した「1chipMSX」。中央に見えるのがFPGA
写真●FPGAでMSXパソコンを再現した「1chipMSX」。中央に見えるのがFPGA
[画像のクリックで拡大表示]

 FPGAは実際にはどのように使われているのでしょうか。データ処理向けの使い方を主に見ていきましょう。

金融計算

 FPGAでのデータ処理を積極的に取り入れていることが目立つのは、金融業界です。現在の金融取引では、売買を自動的に行うアルゴリズム取引が広まっています。

 アルゴリズム取引では、ミリ秒での遅延が大きな損失につながります。例えば、米国の調査会社であるTABB Groupの2008年の調査によると、アルゴリズム取引が5ミリ秒遅れると、ライバルよりも約1%利益が少なくなるそうです。10ミリ秒の遅れでは利益の減少幅は10%まで拡大し、100ミリ秒の遅延では利益はゼロになってしまうとのことでした。現在では、条件はもっと熾烈になっているかもしれません。

 ここまで時間に厳しい処理では、CPUやGPUなどのプロセサは向きません。入力から出力までの遅れが大きいからです。

 日経平均を例に挙げてみましょう。日経平均の計算では225銘柄の株価の平均を取る必要があります。日経平均は公式にも発表されますが、それを待っていては取引に乗り遅れてしまいます。そこで自力で計算を行うわけですが、こうした計算をCPUで高速に行うには、多くのCPUで並列処理を行う必要があります。そうした場合でも、ネットワーク処理は通常は1個のCPUで行います。例えば、このCPUから225個のCPUに処理を分配し、それらすべての処理が終わるのを待ち受け、ネットワークに結果を出力するといった処理の流れになります。

 この場合、処理の分配や待ち受けで無駄に時間を使ってしまいます。CPUでは「処理に何クロックかかるか」「CPU間でのデータのやり取りに何クロックかかるか」を正確に知ることはできないので、終了待ち処理が必要になるからです。GPUでも同じような無駄が発生します。

 一方、FPGAであれば、225個の単純な計算回路を用意することは難しくありません。ネットワークで受け取ったデータをそのたびにそれらの計算回路に送り、計算が終わればすぐに結果をネットワークに送信できます。FPGAでは、処理に何クロックかかるかを正確に設計できます。このため、最後の結果が入力されてから、処理に必要なクロック分待てば、すべての結果をそろえられます。

 ただし、金融取引のアルゴリズムは頻繁に調整することが必要です。FPGAの回路の書き換えに時間がかかり、その間の取引ができなくなると、せっかくFPGAで処理を高速化した意味がありません。そこで、金融取引用のFPGAハードウエアでは、新しい回路を書き込んでいる間は古い回路を動かしておき、新しい回路が動き出してから数ナノ秒で切り替えを行うといった仕組みを持つものもあります。