Ryuz's tech blog

FPGAなどの技術ブログ

1bit計算機についての妄想

はじめに

先日、Youtube でこんな動画を見かけて、そのなかで加算器などの演算器がいくつか出てきました。

youtu.be

計算機黎明期の演算資源が貴重だった時代のお話と思いますが、今のテクノロジーでやろうとしたらどうなるんだろう? という妄想をしてみたいと思います。

回路構成の想像

動画に出てくる構成は非同期かもしれませんが、今FPGAで再現するなら恐らくこんな感じじゃないかと想像しています。

回路の想像図

データがLSBファースト(つまりリトルエンディアン)で 1bit づつ送られてくれば、毎サイクル2進数の一桁ずつ計算して、繰り上がりもキャリーとして計算していけば計算できますね。

この回路は例えば現代の 64bit 加算器に比べて、キャリールックアヘッドなどの機構が不要な事を考えると、恐らく1/64 の規模で構成可能ですし、クロック周波数もかなり上げやすいんじゃないかと思います。

この1bit加算器を 64並列で動かすことで、64bit 加算器一個と同じスループットの計算機が作れないかというのが今回の妄想です。

FPGA で構成する場合

そしてもし FPGA で構成する場合、同じ入力がくる2個の3入力LUTがあれば実装できます。 例えば 手元にある KV260 (Xilinx の UltraScale+) なんかで実装しようとすると、UG574などをみることになりますが、

UG574より引用

O5 出力をうまく使えば LUT6 一個で実装できそうです。

通常 XilinxFPGA で加算器を構成する場合は、1桁ごとに 6入力 LUT を贅沢に1個使って XOR を構成し、後段の CARRY8 でキャリーチェインを構成します。

なので、この演算器を64並列にしても、やり方次第で64bit加算器と消費するLUT 数は同じになるのではないかと想像してみます。そしてクロックは恐らくより高くすることが出来ます。

考察

ポラックの法則に「1プロセッサに使うトランジスタを2倍に増やしても、性能は  \displaystyle {\sqrt {2}}\fallingdotseq 1.4 倍にしか上がらない。」というのがあります。

逆に言えば、よりトランジスタの少ないプロセッサ、究極的には「1bitプロセッサをいっぱい並べたら効率は上がるのか?」という疑問に行き着きます。

上の例でも、64サイクルかけて64bit 加算を行う加算器が64個あるのも、1サイクルで64bit加算が出来る演算器が1個あるのもスループットは同じです。

問題は、「解こうとする問題がそんなに並列化できるのか?」に尽きるのではないかと思います。

ただ、「解こうとする問題が並列化できない」のであれば、マルチコア時代のコンピュータの発展は頭打ちしてしまいます。逆に「それが何とかなるならもう1bitでいいんじゃない?」という妄想もしてしまうわけです。

上記は加算器の例でしたが、乗算器なども同じことは出来そうな気がします。そして乗算などの演算では bit数の1乗よりもおおきなオーダーでリソース消費が増えていきますのでうまくやれば 1bit 計算きの威力は高いのかもしれません。

仮に 1bit 64並列の SIMD 計算機を考えると、64サイクルあれば前の命令の LSB はとっくに計算終わってるはずなので、パイプラインハザードとかも起こりにくい気がします(笑)。

おわりに

あいも変わらず、くだらない妄想でした。

とはいえ、LSBファーストとか、リトルエンディアンの合理性を垣間見た気はします。