見出し画像

独学で考えた赤石CPUの高速化技術解説「多段階アキュムレータ」編

アキュムレータ自体は、知っている方もいるかもしれません。
蓄圧機のことを指して使うのが一般的かもしれませんが、今回はCPUの方です。
アキュムレータは、現実のCPUに採用されているものもあるらしく、
実際に僕はそれをマイクラ上の赤石CPUで再現しています。

1.既存の技術?

~アキュムレータとは~

(僕は現実のCPUについてはあまり詳しくないので、僕がアキュムレータだと思い込んでいるやつになってるかもしれません(( )
アキュムレータは、ALUの出力部と入力部をつなぐ、ただ一つの超高速な記憶装置です。
汎用レジスタレジスタのように8つや16こ並んでいるわけではなく、専用に一つだけ用意されています。
このたった一つの記憶装置の役割とは、一つ前のALUの演算結果が次の演算で必要になるような状況でレジスタより容量は小さいですが、レジスタより高速なのでその分早く次の演算を行うことができるようになっています。

アキュムレータ無しのCPU
アキュムレータ有りのCPU

~アキュムレータとの出会い~

この、アキュムレータというものを初めて知ったのは、僕と赤石仲間である371ttiが開発していた途中の赤石CPUで「1Hz駆動が可能」だと聞いたときでした。
当時の僕は、ALUとレジスタがループするのにかかる時間をできる限り短縮して、ALUが次の演算を行えるようになるまでの時間を可能な限り短縮できるように、試行錯誤を重ねてきましたが、NXREDJIVの14rt毎(約0.7Hz)が限界でした、、、
なので、1Hzは不可能に近いと思っていた時に371ttiの赤石CPUが1Hzを出せる赤石CPUだと知ったので、「1Hzなんて可能なのか…?」と、少し疑問に思いながら、その赤石CPUを見に行ったのです。

NXREDJIVと、その構造
レジスタとALUと、それをつなぐ配線の遅延の合計を極力抑えようとして、
ALUを専用に開発し直したため、少し変わった形をしている

なんと、そこにはALUの出力部と入力部を直接つないでいる配線があったのです。
僕も、高速でインクリメントされていくところが見たくて自分のALUの出力部と入力部を直接配線でつなげて仮で動かしたことはあったので、僕はそれと同じようなものだと思い、1Hzは今だけかと思いましたが、371ttiの返事はNOでした。
371ttiは、このまま進めても1Hzを出せるというので、当時はすごく驚きました。

ですが、ネットを見ていたら、どうやらそれは「アキュムレータ」というもので、すでに現実のCPUにも採用されたことがあるみたいなので、NXREDJIVの次世代となるNXREDJVで僕も真似してみることにしました。

2.赤石CPUへの搭載

~約0.7Hzの限界は、1.25Hzへ~

NXREDJVでは、アキュムレータをALUに付属させる前提で、ALUも作り直していきました。
NXREDJVは、最速で一時的ですが5Hzを出せるように作られていったため、ALUの入力AとBの両方が一時的でも5Hzでデータの通信が行えるようにする必要があり、そのためにレジスタや配線も少し特殊な構造となっていたので、それに合うようにアキュムレータが組み込まれていきました。
最初からだいぶ頑張ってみたら、なんと、アキュムレータを搭載したことによって、14rt毎が限界だと思っていた遅延は、8rt毎まで高速化されました!
約2倍の進歩!
この8rt毎というのは、1.25Hzに相当するので、約0.7Hzの壁を越えて、いっきに1Hzの大台も達成したことになりますね。

アキュムレータすごい

~高速化と大容量化~

また、アキュムレータにより、8rt毎の演算も可能になりましたが、NXREDJVのアキュムレータは1つのみのため、16rt前の演算結果が必要になる場合はレジスタから直接読み出すことになります。
ですが、レジスタから読み出す方のループにかかる時間は、NXREDJIVで14rt毎まで高速化できているので、逆に言えば2rt分の余裕があるということになります。
そのため、その2rt分を使ってレジスタを64Byteまで拡張することができました(実質的には32Byteというところが、NXREDJVの難しいところ、、)。
つまり、アキュムレータを搭載したことで、高速化を達成しただけでなく、レジスタの大容量化も同時に実現できたというわけです。

レジスタとアキュムレータによる役割分担
速度担当と容量担当


当時は、レジスタ容量を増やせば遅延が増え、その影響を受けて速度も落ちると考えていたので、この問題も軽減されたと考えることができます。
が、やはり、この場合だと64Byteから増やすことはできないわけですね、、
いや、レジスタとして考えれば、十分大容量だと思いますが、やはり限界はあったわけです。
、、、このアキュムレータでは。

3.多段階アキュムレータの可能性

~本来の姿を失ったアキュムレータ~

多段階アキュムレータが初めて採用されたのは、ほぼお蔵入りの状態となってしまっている、NXREDJVIです。
この赤石CPUは、物理的には64Byteのレジスタを搭載して、32Byteとして扱ってる変わった制御であるところは、NXREDJVと同じですが、3rt CCAをベースに新開発したALUとアキュムレータを、統合しながら開発することや、アキュムレータが入力AとBでそれぞれ別々に用意され、さらにアキュムレータを2段階とすることで、6rt毎の演算速度を達成しています。

有能になってゆくアキュムレータ

さらに、6rt前の場合はL1(キャッシュと同じで、レベル1の略です)アキュムレータから読み出し、12rt前の場合はL2アキュムレータから読み出すことで、レジスタの方は18rt以内であれば問題ないということになり、2rt分の自由度が向上したため、レジスタの配置を考え直すことで小型化されたレイアウトとなっています。
、、、アキュムレータの本来の使い方ではないと思いますが、赤石CPUでは好き勝手できるのも、いいところですね()

~刻まれる段階(レベル)~

NXREDJVIでは、L2までの二段階でしたが、10Hzを達成したNX RED VIは、NXREDJVIと同じ6rt毎ですが、三段階のアキュムレータを搭載しています。
これにより、レジスタの方から読み出すときは、24rt前となるので、NXREDJVの16rtと比べて、大幅に余裕が増大しているのがよくわかると思います。

NX RED VIの実際の回路・アキュムレータが3段階になっている


ですが、当然その分の余裕は当然無駄にはしていません。
NX RED VIはレジスタ(+キャッシュ)、I/Oポート、共有レジスタのどれにアクセスしても、6rt毎の速度を保てるように設計されていますが、そのように多くの回路に接続しているのに6rt毎を保てるというのは、多段階アキュムレータの恩恵です。
そのため、レジスタは多少遅延はかかりますがサイズ効率のいいループ式を採用することができ、BEのストラクチャーのサイズ上限である64×64×64に収めながら、高速化と大容量化をこれまでにないほどの高い次元で両立している赤石CPUとも言えます。

~ROMキャンセラーあってこそ~

以前の記事で、ROMキャンセラーと名付けた僕独自の赤石CPU高速化技術の解説をしましたが、このROMキャンセラーと呼んでいるもののおかげで、クロックを向上させても、ROMの遅延に依存せずにどんどん次の命令を読み出せるようにできます。
なので、多段階アキュムレータにより、ALUの方が高速化されても、ROMなどの別の箇所がネックにならずに、ALUとL1アキュムレータの限界までクロック周波数を引き上げることが可能になる というわけです。

4.まとめ

このように、多段階アキュムレータは、アキュムレータという既存の技術を、独自に発展させていった高速化技術とも言えます。

今後、さらにALUとL1アキュムレータを統合しながら開発していくことで、6rtよりもさらに早い速度での演算が行えるようになる見込みです。
なので、この多段階アキュムレータという独自技術は、この先も活躍していくと思います。

また、現実ではどうなのかわかりませんが、マイクラ内で多段階アキュムレータの制御回路を作って、遅延も合わせながら制御するというのも、簡単にできるものではないと思うので、この辺も僕の強みだと思ってます。


この記事が気に入ったらサポートをしてみませんか?