はじめに
先日、Youtube でこんな動画を見かけて、そのなかで加算器などの演算器がいくつか出てきました。
計算機黎明期の演算資源が貴重だった時代のお話と思いますが、今のテクノロジーでやろうとしたらどうなるんだろう? という妄想をしてみたいと思います。
回路構成の想像
動画に出てくる構成は非同期かもしれませんが、今FPGAで再現するなら恐らくこんな感じじゃないかと想像しています。

データがLSBファースト(つまりリトルエンディアン)で 1bit づつ送られてくれば、毎サイクル2進数の一桁ずつ計算して、繰り上がりもキャリーとして計算していけば計算できますね。
この回路は例えば現代の 64bit 加算器に比べて、キャリールックアヘッドなどの機構が不要な事を考えると、恐らく1/64 の規模で構成可能ですし、クロック周波数もかなり上げやすいんじゃないかと思います。
この1bit加算器を 64並列で動かすことで、64bit 加算器一個と同じスループットの計算機が作れないかというのが今回の妄想です。
FPGA で構成する場合
そしてもし FPGA で構成する場合、同じ入力がくる2個の3入力LUTがあれば実装できます。 例えば 手元にある KV260 (Xilinx の UltraScale+) なんかで実装しようとすると、UG574などをみることになりますが、

O5 出力をうまく使えば LUT6 一個で実装できそうです。
通常 Xilinx の FPGA で加算器を構成する場合は、1桁ごとに 6入力 LUT を贅沢に1個使って XOR を構成し、後段の CARRY8 でキャリーチェインを構成します。
なので、この演算器を64並列にしても、やり方次第で64bit加算器と消費するLUT 数は同じになるのではないかと想像してみます。そしてクロックは恐らくより高くすることが出来ます。
考察
ポラックの法則に「1プロセッサに使うトランジスタを2倍に増やしても、性能は 倍にしか上がらない。」というのがあります。
逆に言えば、よりトランジスタの少ないプロセッサ、究極的には「1bitプロセッサをいっぱい並べたら効率は上がるのか?」という疑問に行き着きます。
上の例でも、64サイクルかけて64bit 加算を行う加算器が64個あるのも、1サイクルで64bit加算が出来る演算器が1個あるのもスループットは同じです。
問題は、「解こうとする問題がそんなに並列化できるのか?」に尽きるのではないかと思います。
ただ、「解こうとする問題が並列化できない」のであれば、マルチコア時代のコンピュータの発展は頭打ちしてしまいます。逆に「それが何とかなるならもう1bitでいいんじゃない?」という妄想もしてしまうわけです。
上記は加算器の例でしたが、乗算器なども同じことは出来そうな気がします。そして乗算などの演算では bit数の1乗よりもおおきなオーダーでリソース消費が増えていきますのでうまくやれば 1bit 計算きの威力は高いのかもしれません。
仮に 1bit 64並列の SIMD 計算機を考えると、64サイクルあれば前の命令の LSB はとっくに計算終わってるはずなので、パイプラインハザードとかも起こりにくい気がします(笑)。
おわりに
あいも変わらず、くだらない妄想でした。
とはいえ、LSBファーストとか、リトルエンディアンの合理性を垣間見た気はします。
