QuESTをRISC-V上で動かす
QuESTはゲート型量子コンピュータ向けのシュミレータで、C言語で記述されていて、シンプルな記述で量子ビットの制御をシュミレーションしてくれる。自分的にQuESTの面白いのが演算をCPUだけではなく、GPUでも処理することができるように分かれていることだ。
ざっと調べてみたところ、多くのシュミレーターは演算をCPU or GPUで処理するようになっていて、GPUについては殆どのケースでCUDAが使われている。中にはOpenCLを使ったQrackのような物もある。QrackはOpenCLで行列の演算を行うため、NVIDIAに限らずIntel/AMDといったOpenCLが動作する環境でも利用できる。QuESTもGPUに流す先はCUDAになっている。
今回の我々のプロジェクトではシュミレーションにRISC-Vを利用する。実際はカスタム命令セット、量子用のレジスタを追加して使うことになるのだが、QuESTをRISC-V上で動作させてみることにする。
というのも、RISC-Vはメニーコアで数百〜千のコアで並列処理を行うことができる環境も発表されてきている。esperantoの4Kメニーコアは一時期話題にもなった。ゲート型のシュミレーション環境として、GPU(CUDA/OpenCL)のような大量のコアで動作する環境のターゲットとして、RISC-Vメニーコア上で動作させることができれば、シュミレーション環境のひとつとしてRISC-Vプラットフォームを活用することが出来るようになるというわけだ。
環境としては前回作成したRISC-Vエミュレーター環境(spike)を利用する。spikeには-pオプションでプロセッサの数をシュミレーションすることが出来る。デフォルトは1コアだが、1000コア上で動作させてみる。
git clone https://github.com/QuEST-Kit/QuEST cd QuEST # RISC toolchainでビルド出来るようパッチを当てる wget https://quantum.siprop.org/wp-content/uploads/2019/07/diff.patch_.zip unzip diff.patch_.zip patch -p1 < diff.patch # QuESTをビルドして実行 mkdir build cd build cmake .. make # 1000コア上で動作させる spike -p1000 --isa=rv32i pk demo bbl loader ------------------------------------------------------- Running QuEST tutorial: Basic circuit involving a system of 3 qubits. ------------------------------------------------------- This is our environment: QUBITS: Number of qubits is 3. Number of amps is 8. Number of amps per rank is 8. EXECUTION ENVIRONMENT: Running locally on one node Number of ranks is 1 OpenMP disabled Precision: size of qreal is 8 bytes Circuit output: Probability amplitude of |111>: 0.498751 Probability of qubit 2 being in state 1: 0.749178 Qubit 0 was measured in state 1 Qubit 2 collapsed to 1 with probability 0.998752
これは単にRISC-V向けにビルドして1000コア上で動作させただけ、といった感じだがメニーコアを生かした実装をQuEST/src/CPU, GPUの他にもRISC用のディレクトリを作って実装を入れていけば、RISC-Vメニーコアを生かしたシュミレーション環境を作ることも出来るだろう。
2件の返信
[…] Spikeへの量子系の命令セットを追加する前に少し考えることが出てきました。1. エミュレーター起動時に量子ビット数を与えられるようにする2. エミュレーター内に量子レジスタという定義を行って、量子レジスタを使った演算を行えるようにするといったものです。1については非常に簡単で、エミュレーターの起動時の引数に加えることでOKです。例えば次のような感じで。spike -q[num] pk testといった感じで、numが量子ビット数を与えてプログラムをエミュレーター上で動かします。2については悩んだ結果、調査段階で検討していたQuESTをスタティックリンクでSpikeと結合することによって、Spike内の量子レジスタの操作(hadamard/measure)を行えるようにすることにしました。ということで、– QuESTをstatic link libraryとしてビルドできるように改造– SpikeのビルドでQuESTを読み込ませて動作させるといった実装を行います。Spike内ではprocessor.h, processor.cc内に次のような実装が入ることになります。 […]
[…] ・RISC-V Quantum Extension・QuESTをRISC-V上で動かす […]