CPU、GPU、DSP、そしてFPGA

前のエントリでのコメントへの返信として書いたものを、エントリとしてもあげておきます。
それぞれのデバイスの使い分けのイメージです。


タイトルこそあおってますが、実際にCPUが完全に駆逐されるとは思っておらず、少なくともアプリケーションに関してはCPUを使った逐次処理で実行するのが向いていると思います。つまり、大部分のコードはCPUで動くことになると思います。


また、これは単にイメージなのですが、ストックデータに対する処理、たとえば画像処理は、セルごとにメモリの割り当てられたGPGPUが強いだろうなと推測してます。


FPGAが必要になるのは、レイテンシを最小化させたい処理で、ディスクやネットワークなどのI/O部分に、中継としてデータ処理をさせる用途ではないかと考えています。いま流れてるデータにだけ注目するのであれば、メモリは多く必要ありません。
多数のSSDFPGAつないで、MapReduceをするときにMap処理をFPGAで行ったものがCPUに届くとか、ネットワークにFPGAをつないで、HTTPの「GET /index.html」というヘッダーが処理されたものがCPUに届くとか。つまり、データの整形処理ですね。


データに対する処理が単一であればDSPが向いているようです。データ処理を行ったあとで、さらに別の処理が必要になる場合に、DSPは弱いようです。JPEGや音声処理などでは、データに対して単一の処理を行えばいいので向いていますが、アプリケーションのデータ処理ではデータを加工したあとで集計したりと、少し向かない気がします。


Webアプリケーションや業務アプリケーションでのアプリケーション処理では、CPU速度がボトルネックになっておらず、GPGPUで処理できる単純多量処理も少なく、DSPで処理する単一処理でもなく、問題はI/O時点でのデータ処理となってきています。
そこで、FPGAが現状の問題点を解決する上での有効な手段となりうるのではないか、と、そういう感じです。