子供達、Field Progra... gate array (FPGA) って知っているか。正式名称がよくわからないし知ってもよくわからないやつだ。論理回路を書き換えることができるIntegrated Chip (IC) のことだ。最近の若者は、CPUばかり使ってプログラミングが世界を記述すると信じているように見える。尖ってくると「ふん、オブジェクトの連中は、関数の美しさを分かってない」とか、エリートになると「GPU・・・・GPUだよ!GPUがないと前に進めないんだよぉぉおお!!!」とかなるけど(そんなことはないだろう)、その向こうにはFPGAがあるんだ。
このFPGAは最初まっさらだ。オブジェクトや関数みたいなオーパーツは動かない。演算器を作って、データを運ぶ経路を自ら設計する。めんどうな一方、特定の処理に特化した回路を作れる。例えば、区画Aで偏微分を計算し、区画Bで乱数を供給するということも可能だ。CPUだと、偏微分計算の片手間で乱数を生成しなくてはならないから気が散って仕方がない。CPUの気が散るわけがないと思ったそこの君、そうじゃないんだこれが。計算機は処理内容の切り替えがあると文字通り気が散って遅くなるんだ。市販のCPUは気が散ってもすぐに戻れるように、あまり集中しすぎないつくりになっている。しかし実際には、同じ処理を繰り返すと分かっていれば、もっと速くできる。具体的には、回路をバケツリレー式にして回路規模を大きくすることなく動作周波数を上げる設計が可能なのだ。このマジカルな方法をパイプラインという。しかしパイプラインは条件分岐に弱い。
ここで私みたいな数理モデルの専門屋が回路設計を行う意味が出てくる。条件分岐が発生しないアルゴリズムと数理モデルを作れば良いのだ。FPGAなら、50段級のパイプラインを、しかも乱数用と偏微分用と両方独立に用意できる。Pythonには無力だが。「でも結局、モンテカルロ法って遅いですよね?」と決定論者たちに馬鹿にされずに済む。
FPGAで回路を作っていると、市販のCPUというのがいかによくできているか思い知らされる。気まぐれにメモリからデータを取ってこようと、それを予測して先に持ってきてくれる。原理的に非効率なはずが、もしもしへ搭載するために省電力に作られている。しかし最近のCPUは、画像処理(波動方程式)に特化している。君たちが動画ばかり見ているからだ。この流行りに合わせて画像処理ふうのアルゴリズムを考えるのではなく、私はアルゴリズムやモデルを、実用可能としつつももう少し自由に考えたいのだ。多様性ってやつだよ。