
マイクラ 世界初(かもしれない)機能を搭載したレッドストーンCPU!?〜CRED V〜
〜前置き〜
「世界初(かもしれない)機能を搭載したレッドストーンCPU!?」というタイトルのインパクトにつられてきた方が、ほとんどだと思います。
まぁ、僕だったら確実に食いつきます()
それで、その機能とは、
「粗粒度マルチスレッディング」
「マルチROMシステム」
の二つです。
この二つがどういうのもなのかは、一旦置いといて、まずはレッドストーンCPUを見てみましょう。
赤石CPU CRED Vの全貌

こちらが、そのレッドストーンCPUです。名前はCRED Vと名づけています。CREDはC(challenge)のCとレッドストーンのREDを合わせていて、最後のVは CRED系の第5世代CPU という意味です。
だいぶカラフルですが、実はそれぞれの役割ごとに色を分けて作っています。

青緑色のコンクリートで作られたALU(演算装置)。
加減算、インクリメント、デクリメント、xnor、xor、and、or、論理右シフト、右ローテートを実行可能です。

黒色のコンクリートで作られたアキュムレーター。
専用の制御回路が用意されており、この回路のおかげで1hzでの演算が可能になっています。

橙色のコンクリートで作られたレジスタ。
合計容量は16Byteで、ALUとデータのやり取りを行なっています。
左端のリピーターロックが大量に使われている箇所が、粗粒度マルチスレッディングの専用記憶装置となっていて、CRED Vから初めて搭載されました。

緑色のコンクリートで作られたキャッシュメモリ。
合計容量は16Byteで、メモリやI/O、ALUとデータのやり取りを行なっています。
こちらも、左端のリピーターロックは専用記憶回路になっています。

黄緑色のコンクリートで作られたメモリー。
シリアルRAMと呼んでいるすこし特殊な構造のRAMで、
キャッシュメモリとシリアル通信をしています。
容量は32Byte(8Byte×4)。

赤紫色のコンクリートで作られたI/Oポート。
インプット・アウトプットそれぞれ8ポートずつで、メモリー同様にキャッシュメモリとシリアル通信をしています。

灰色のコンクリートで作られたROM。
ここに命令が保存されていて、ここから命令を読み出して実行しています。
合計容量は128Byte(32Byte×4)。
このCPUにはROMが4つ搭載されています。

空色のコンクリートで作られたPC(プログラムカウンター)。
ROMから命令が読み出されるごとにここのカウンターが作動して、次読み出す命令をROMに伝達します。

灰色のコンクリートで作られたクロック回路。
ここのクロック回路の信号によって、各回路の動作タイミングを合わせています。

この辺のテラコッタや赤色のコンクリートの回路は、制御回路で、ここで読み出した命令のデコードなどを行なっています。
それでは、(たぶん)世界初の目玉機能である、粗粒度マルチスレッディングに触れていこうと思います。
世界初!?
レッドストーンCPUで
粗粒度マルチスレッディング!!
CRED Vの目玉機能、その一つは粗粒度マルチスレッディングだと思います。
この粗粒度マルチスレッディングとは、CPUの処理を高速化するための技術で、これを採用することでマルチスレッド性能が向上します!
ちなみに、CPUが実行する命令はいくつもありますが、その中には処理に時間のかかるものや、すぐ処理が完了する命令があります特に条件分岐命令は処理に時間のかかる命令の代名詞で、それは演算結果によって次に実行する命令が変化する。という命令ですこの命令は、他の命令と比べて時間がかかることが多いですが、実はその中にはALU(演算装置)が持っている演算能力を十分に発揮できていない時間があり、その時間も有効活用できれば、CPUの性能向上に繋がるというわけです。

水色の線は通常演算時、黄緑の線はメモリアクセス、
赤の線は条件分岐
水色の通常演算の命令を実行した場合は、必要な工程も少なく、短い時間で次の命令を実行出来ていますが、黄緑のメモリアクセスや赤の条件分岐の命令を実行した場合は、必要な工程が多く、次の命令を読み出せるまでに時間がかかっています。
そこで、CRED Vが採用したのが、条件分岐命令を読み出した場合は、すぐに別のプログラムに切り替える
というものです。
これだけだと、分かりづらいと思うので、図で説明します。

本来なら、条件分岐命令を実行すると、この図のようにALUの演算性能を無駄にしてしまっている時間があります。
そこで、このようにします。

点線が別のプログラムの命令
上のグラフがプログラム1で、下のグラフがプログラム2
プログラム1では、条件分岐命令(赤の線)が完了するまで次はどの命令を読み出せばいいのかわからないので、代わりにプログラム2の方を実行させます。
プログラムの切り替えに黄色線の処理が必要だったり、メモリアクセスの場合はCRED Vの構造の関係でどうしようもなかったりと、完全に解消されるわけではありませんが、こうすれば、無駄な時間を短縮させることができます。
ちなみに、プログラム1とプログラム2ではレジスタなどは共有しておらず、CRED Vの場合はレジスタの情報を一時退避用の記憶装置と入れ替えており、これで他のプログラムとレジスタの情報がごっちゃにならないようにしています。

ただ、本来条件分岐命令が完了されれば、次実行するのはプログラム1のはずが、プログラム2になっているので、プログラム1を実行する速度は低下する場合があります。
なので、あくまでALUの持つ演算装置をどうすれば使い切れるかを考えてたどり着いたものであって、1つのプログラムをどれだけ早く完了させられるかを重視した設計ではありません。

ちなみに、この方法は僕が自分で考えてた時に思いついた方法で、その後に「粗粒度マルチスレッディング」というよく似た高速化技術をネット見てた時にみつけたので、それで呼んでいます。
粗粒度マルチスレッディングと相性抜群!?
独自開発の「マルチROMシステム」!!
CRED Vのもう一つの目玉機能は、このマルチROMシステムだと思います。
このマルチROMシステムとは、僕が名づけた名前で、僕が独自に開発したシステムです。
このシステムは、その名の通り命令を保存するROMをいくつか搭載(CRED Vの場合は4つ)していて、実行するROMを動的に変化させることで、さまざまなシュチュエーションに対応できるシステムです。
4つ以上のROMを搭載したレッドストーンCPUは少なくとも僕は聞いたことがないので、これも世界初だと思ってます。
(ちなみに、NXREDJIVやNXREDJVという僕の別CPUはROMを2つ搭載していて、マルチROMシステムに含めるか悩みましたが、同じ役割のROMが二つあるのでマルチROMシステムに含めました)
CRED Vのは、ROMを4つ搭載していて、命令によって実行するROMを切り替えています。
ちなみに、CRED VのマルチROMシステムでは、二つのグループに分かれていて、レジスタとキャッシュメモリはグループ毎に共有していて、I/Oポートとメモリーは全ROMで共有しています。

具体的には、メモリアクセスとI/Oポートの命令を実行した際は、それぞれのグループ内で実行するROMを変更します(グループ内では、レジスタも共有しているのでレジスタの情報が別プログラム用のに切り替わることはありません)そして、条件分岐命令を実行した場合に、まずは今実行していたグループ内で、実行するROMを切り替えます。
そして、そのあと実行するグループも変更します。
この時、レジスタ内の情報も別プログラム用の記憶装置と入れ替えます(キャッシュメモリもレジスタと一緒に入れ替えています)CRED Vの4つのROMは、こんな風に制御されています。
ちなみに、グループ内で実行するROMは、グループ毎に別々で管理されていて、例えば4つのROM全てに条件分岐命令による命令の繰り返しがあった場合、この制御のおかげで、全てのROMのプログラムを実行できるようになり、一部のROMのみが実行されてしまう状況を回避できるようになっています。
さらに、CRED VではROMをこのように制御していますが、例えば、1つのROMのプログラムを優先させて、他のROMのプログラムは、優先されるROMの無駄な時間に一瞬だけ実行し、優先されるROMの次実行する準備が整ったらすぐそのROMに実行権を移すような制御にすれば、優先されるROMのプログラムを実行する速度はこれまでと変わらず、さらに追加で別のサブプログラムも実行することが可能になります。

※イメージ
黄色線のプログラム切り替えの回数が増えたりと、総合的な性能は低下する可能性もありますが、プログラム1の命令が処理される割合は上がるため、結果的にプログラム1を早く処理できる制御になります。
さらに、CRED Vの段階では、別々のROMが4つある状況ですが、これはもともと大きな容量のROMを4分割している状況とも考えることができ、これは逆に大容量のROM1つに対し、PC(プログラムカウンター)をいくつか用意することで、1つのROMで擬似的に4つのROMがあるかのように制御することも可能ですし、更に言えば他のプログラムが占めるROMの容量が小さければ、別のプログラムがその分のROM容量も有効活用できるようになり、スペース効率も向上する可能性があるということになります。

このように、マルチROMシステムの活用法はこれだけではなく、まだまだポテンシャルを秘めているシステムなのです。
さらに、マルチROMシステムは、状況に応じて実行するROMを切り替えるシステムなので、条件分岐命令などを実行した時に、別プログラムに切り替えるような粗粒度マルチスレッディングとは、相性がいいのです。
〜まとめ〜
CRED Vは、マルチ性能を向上させる「粗粒度マルチスレッディング」とさまざまな場面に対応可能な独自システム「マルチROMシステム」の組み合わせによる、これまでにない手法によって高速化された世界初のレッドストーンCPUという感じです。
すごいロマンあるでしょ()
ちなみに、脳内設計し始めてから完成まで、2ヶ月くらいかかりました。
ちなみに、16×9のディスプレイをI/Oポート経由で接続してテスト動作させた時、僕の中では最小のCPU CRED IVと比較しても若干遅く、僕の中では最速のCPU NXREDJV(Java版)と比較して2倍以上の差をつけられてCRED Vが敗北しました()。
まぁ、まだ粗粒度マルチスレッディングやマルチROMシステムの回路が初めてだったり、あと実はメモリ・I/O系のあたりに欠陥を抱えていたりするので、そこを改善していければ、、と思っています。
あと、有料エリア内にはなっちゃいますが、初めて回路をダウンロードできるようにしてみたいと思います。
CRED Vのダウンロードはこちら
(このエリア内には、CRED Vのワールドデータ・ストラクチャーデータ・命令セットの画像・解説、プログラミングのやり方があります。)
注意:こちらでダウンロードできるCRED VはMinecraftのBEで作られています。
なので、JEでは使えません。
また、Switchなどのゲーム機だと、利用できない可能性が高いです(PCやスマホなどのBEでは利用できると思います)。
こちらからCRED Vのダウンロード(ワールドエクスポートと、ストラクチャーのエクスポート)が可能ですが、
CRED Vは僕が一人で作った赤石CPUなので、もしかしたら不具合などが残っている可能性があります。
(もちろん、動作テストはやっていますが、可能性はあります)
CRED Vに不具合が残っていた場合、原因がわからずに修正されない可能性もあります。
(マイクラのアプデで仕様が変わったり、バグが追加()されたりして動かなくなる可能性もあります)
また、だいぶ個性の強い赤石CPUなので、プログラミングは相当難しいです。
まぁ、プログラミングして動かさなくても、粗粒度マルチスレッディングとマルチROMシステムとROMキャンセラーを搭載した赤石CPUとして、回路を鑑賞する楽しみ方もあります。
これらによって、ダウンロードしたファイルが使えなかったり、プログラミングさせて自分で動作させることができなかった場合でも、払い戻しなどは行いませんので、ご了承ください。
ここから先は
¥ 1,000
この記事が気に入ったらチップで応援してみませんか?