そもそも「FPGA」って何なんですか? (2)

前回、CPU はレシピを見ながら調理し、FPGA はレシピを覚えて調理する、という喩えで違いを説明しました。

第2回では、もう少し詳しく CPU と FPGA の動作の違いを見ていきます。そして「なぜ FPGA を働かせるのが難しい」のかに迫ってみたいと思います。

まずは進化の歴史から

本題に入る前に、CPU と FPGA の進歩の歴史について見ていきます。

CPU の進化の方向性

CPU の歴史は、コンピュータの歴史そのものと言っても良いほど劇的な進化を遂げてきました。世界初のマイクロプロセッサであるインテル社の4004の発表が1971年ですから、それから50年もの間、絶え間ない進化を続けてきたわけです。では、それは「どんな進化」だったのでしょうか?

CPU も FPGA も同じ半導体デバイス (LSI、大規模集積回路) の仲間です。半導体デバイスの進歩は、よく世間では微細化が進んで「〇〇nmのトランジスタが…」とか、プロセッサの動作周波数が「〇〇GHz」に高速化したとか言いますが、これが何を意味するかは、ほとんどの人にはわかりません。専門家でも進歩を実感できる人は少ないのです。でも、基本的には、微細化は「同じ面積に入るものを増やすこと」ですし高速化は「同じことをする時間を短くすること」です。半導体の歴史は、50年もの間、この2つをやり続けています。

では、CPU はどのように進化して来たのでしょうか?それは、ひたすらスーパーマンを育ててきたのです。CPU は速く動くようになったのだけではなく、色々な機能が追加され、出来ることが大幅に増えました。半導体の高速化によって、スーパーマンは速く動けるようになったし、微細化によって多くの機能を取り込むことができました。

CPU の進化の方向性

FPGA の進化の方向性

一方、FPGA はどうかというと、CPU の歴史と同じように1970年代にその原型が登場し、今日までの50年間、進化し続けています。しかし、その方向性は、CPU と少し違います。CPU がスーパーマンを育ててきたのに対し、FPGA は「中の人」の数と種類を増やしてきました。同じように半導体技術の進歩を活用しているのですが、その方向性が違うのです。「中の人」って何?っという疑問には、あとで説明します。半導体の高速化は、「中の人」も速く動けるようになりました。同じく、微細化によって、「中の人」がたくさん入るようになったのです。

FPGA の進化の方向性

この違いが、「CPU はレシピを見ながら調理し、FPGA はレシピを覚えて調理する」という特徴になってきます。

それぞれの処理方法を見ていきましょう

CPU はスーパーマンなので何でもできます。「調理」も適切な指示 (プログラム) があれば、素早くやってしまいます。しかし、ある瞬間は一つのことしかしていません。

一方、FPGA の方は、「中の人」は難しいことはできません。さらに、一つのことしかできませんが、一度、覚えてしまえば、一生懸命働いてくれる小人さんです。その小人さんが、中にはたくさん入っています。さて、この小人さんをまとめて働いていただいて、「調理」をさせるにはどうしたらいいでしょうか?

それは、小人さん一人一人に役割を与え、流れ作業で「調理」するのです。つまり、食材を運ぶ小人さんから、切る係の小人さんに渡し、それを焼く掛かりの小人さんに繋げる、という具合です。ここで暇な小人さんが居らず、みんなが力を合わせて働けばすごいことができますが、野菜を切ったけど送り先がないとか、焼きたいけど焼くものがないとか、連携がうまくいかないと仕事がはかどりません。つまり、小人さん同士をどう連携させて、無理なく無駄なく「調理」を進める方法を見つけるのに時間が掛かるのです。

やり方は違えど、目指すものを同じ

では、FPGA がダメかというと、そうではありません。CPU は一度に一つのことしかできませんでしたが、FPGA の中には小人さんがたくさん居り、彼らは同時に働いてくれます。さらに、その小人さんの数が半端なく多いため、超並列で処理ができるのです。これは、CPU では真似できません。まぁ、CPU も最近は、スーパーマンの能力が向上できなくなってきて、CPU の中に複数のスーパーマンを入れるようになってきましたが…。今後、もっともっと増えていくと思います。

なぜ FPGA を働かせるのが難しい?

ここから先は、専門用語が出てきます。適当に読み飛ばしても結構です。

最新の CPU は、コア数が64個、スレッド数が128というのがあります。これは、同時に2つのことができるスーパーマンが64人も入った CPU と思ってください。おぉ、すごいとお思いでしょう。しかし、最新の FPGA は、900万ロジックセルなものが出てきています。先程の話では、900万人の小人さんです。どうです、こっちもすごいでしょ。もちろん、単純な比較はできません。

CPU も最近は数の勝負になっています

CPU は、それでも何をやっているのかはわかりやすい方ですが、FPGA に至っては、900万人の小人さんで何が出来るかわかる人は居ません。実際は、900万人全員を働かせることはできませんし、遊んでいる奴や繋がっていない奴が沢山います。つまり、ここで言いたいのは、900万人を繋げて働かせるのが、どのぐらい大変かという話です。日本一正社員の多いトヨタ自動車でも従業員数は36万人ですから、推して知るべしですね。ちなみに世界一従業員が多いのはウォルマート (米) で230万人だそうです。

さて、900万人に一人ずつ役割を与えるのは大変です。時間もかかりますし、間違えそうですね。そこでグループを作ります。ある仕事は10人でやるとか、別の仕事は100人でやるとかです。このお仕事グループを繋げて、大きな仕事が完成すれば OK です。でも、10人、100人程度では、グループとしては小さすぎます。そこで、グループのグループを作って大きくします。そうすると、大きなグループには1000人の小人さんとか、1万人の小人さんが所属して働くことができます。これを階層化と言いますね。人間社会でも同じで、会社組織や学校は、こういう形態で仕事や勉強をしています。つまり、FPGA を動かすためには、900万人の社員のいる会社の社長さんにならないといけないのです。これは、スーパーな従業員が100人ぐらいのスーパーマーケットとは比較にならないほど複雑な仕事になります。でも、どっちもすごく仕事が出来そうな気がします。

つながらないと仕事になりません

中学のときに順列というのを習ったと思います。例えば、A、B、C の3つの並べ方 (順列) は6通りですね。これは 3!=3×2×1=6 だからです。この「3つ」というのが増えるとすぐに膨大な数になります。10人の順列は、10!=3,628,800通りになります。つまり、試してみないと良いか悪いかが判らない場合、全部を試してみるのですが、その数が多いと全部を試すのにめちゃくちゃ時間が掛かります。お仕事が多いと一番良い順番を見つけ出すというのはすごく時間が掛かるのです。FPGA の「お仕事グループ」のつなぎ方も一番良い順番を見つけ出さなければなりませんでした。これを組合せ最適化問題と言います。これを解くのに時間が掛かってしまうのです。

ちょっと難しい話になってしまいましたが、この「FPGA に仕事をさせる」仕組みについては、あとの回で詳しく説明します (たぶん)。

まとめ

今回のまとめです。

今回は、CPU と FPGA について、50年間の進歩の方向性の違いから「なぜ FPGA を働かせるのが難しい」のかについて説明しました。CPU はスーパーマンを育ててきたのに対して、FPGA は従業員の多い大企業を育ててきたのです。その結果、FPGA を働かせるのが難しくなってしまいました。その理由は、簡単に言うと大会社の社長さんように多くの社員を効率よく無駄なく働かせるのは難しいからです。しかし、それが出来ている大企業があるように、FPGA でもちゃんとやり方があります。そのあたりの話を次回にしたいと思います。お楽しみに!

熊本大学 大学院先端科学研究部 飯田全広

※ 主に Peggy und Marco Lachmann-Anke による Pixabay からの画像を使用しました。

タイトルとURLをコピーしました