RISC-V spike vs QuEST

quantum computing

RISC-V spike vs QuEST

RISC-V SpikeのエミュレーターにはQuESTを組み込んで、量子系の命令セットをカスタムとして用意した。そこで気になるのが、QuEST(on x86)で普通に書いたプログラムとRISC-V Spike with QuESTを通して動かしたとき、どっちが早いのか?という単純な疑問になる。

単純に考えると、どっちも終端しているのはQuESTなんだし結果は一緒では?と思うかも知れない。いくらRISC-V ISAで動作するQuESTとx86上で動作するといっても…それほど違わないだろうと。自分もやってみるまでそうだった。ただ、実際の結果は全く違うものになった。

■ 環境とソースコード

  • 環境
    VirtualBox 6.0.12 on Windows 10
    OS : Ubuntu 18.04
    CPU : 6vcpu(Intel Core i7-8750, 2.2GHz)
    MEM : 16Gbyte(DDR4 2400MHz)
    HD : 512GB PCIe M.2 SSD
– RISC-V Spike quantum custom instruction set source code.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    int ret1 = 0;
    int i = 0;

    // call qooh
    for (i = 0; i < 10000000; i++) {
        asm volatile(
        "qooh.k  qa0,qt1,qzero,1;"
        "qmeas.k  %0,qt1,qzero,1;"
        :"=r"(ret1)
        :
        );
    }
    printf("%d\n", ret1);

    return 0;
}
- QuEST source code.
#include <stdio.h>
#include "QuEST.h"

int main (int narg, char *varg[]) {

    QuESTEnv env = createQuESTEnv();
    Qureg qubits = createQureg(4, env);
    initZeroState(qubits);


    for (int i = 0; i < 10000000; i++) {
      hadamard(qubits, 0);
      int outcome = measure(qubits, 0);
    }

    destroyQureg(qubits, env); 
    destroyQuESTEnv(env);

    return 0;
}

以上の環境で計測してみる。マシン環境はVirtualBox上のUbuntuで至って普通のマシン環境になる。量子側のコードは4qbit、hadamardして計測を1000万回繰り返すだけのこちらもシンプルな処理になる。

■ 計測結果

それぞれプログラムを10回実行したときの値は以下の通り。単位は秒で。

SpikeQuEST
14.63246.638
24.53845.148
34.58944.374
44.78845.510
54.86744.584
64.47845.333
74.41844.209
84.45844.406
94.45644.755
104.45644.572
avg4.56844.952

■ 考察

なぜ、このような結果になったのか?RISC-V Spikeエミュレーターに搭載したQuESTの方が10倍も高速に動作するという結果になった。
いくらISAの違いといってもこの差はさすがに無いだろう...ということで、この原因について考えてみたところ、それぞれの動作の違いが大きい。これはプログラムを動かしているときの統計情報を見てみると分かりやすい。

■ Quest 動作状況

CPU負荷
                CPU     %user     %nice   %system   %iowait    %steal     %idle
06:50:17 PM     all      0.64      0.00      0.00      0.00      0.00     99.36
06:50:18 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:19 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:20 PM     all     99.00      0.00      1.00      0.00      0.00      0.00
06:50:21 PM     all     99.00      0.00      1.00      0.00      0.00      0.00
06:50:22 PM     all     99.67      0.00      0.33      0.00      0.00      0.00
06:50:23 PM     all     99.67      0.00      0.33      0.00      0.00      0.00
06:50:24 PM     all     99.33      0.00      0.50      0.00      0.00      0.17
06:50:25 PM     all     99.16      0.00      0.50      0.00      0.00      0.34
06:50:26 PM     all     98.84      0.00      1.16      0.00      0.00      0.00
06:50:27 PM     all    100.00      0.00      0.00      0.00      0.00      0.00
06:50:28 PM     all     99.00      0.00      0.50      0.00      0.00      0.50
06:50:29 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:30 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:31 PM     all     99.50      0.00      0.33      0.00      0.00      0.17
06:50:32 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:33 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:34 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:35 PM     all     99.00      0.00      1.00      0.00      0.00      0.00
06:50:36 PM     all     99.17      0.00      0.83      0.00      0.00      0.00
06:50:37 PM     all     99.00      0.00      1.00      0.00      0.00      0.00
06:50:38 PM     all     98.82      0.00      1.01      0.00      0.00      0.17
06:50:39 PM     all     98.32      0.00      0.67      0.00      0.00      1.01
06:50:40 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:41 PM     all     99.33      0.00      0.50      0.00      0.00      0.17
06:50:42 PM     all     98.66      0.00      1.34      0.00      0.00      0.00
06:50:43 PM     all     99.33      0.00      0.50      0.00      0.00      0.17
06:50:44 PM     all     98.50      0.00      1.17      0.00      0.00      0.33
06:50:45 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:46 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:47 PM     all     99.67      0.00      0.33      0.00      0.00      0.00
06:50:48 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:49 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:50 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:51 PM     all     99.67      0.00      0.33      0.00      0.00      0.00
06:50:52 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:53 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:54 PM     all     99.67      0.00      0.33      0.00      0.00      0.00
06:50:55 PM     all     99.50      0.00      0.50      0.00      0.00      0.00
06:50:56 PM     all     99.33      0.00      0.67      0.00      0.00      0.00
06:50:57 PM     all     99.00      0.00      1.00      0.00      0.00      0.00
06:50:58 PM     all     99.00      0.00      0.83      0.00      0.00      0.17
06:50:59 PM     all     99.67      0.00      0.33      0.00      0.00      0.00
06:51:00 PM     all     98.49      0.00      1.18      0.00      0.00      0.34
06:51:01 PM     all     53.83      0.00      0.33      0.00      0.00     45.83
06:51:02 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
メモリ利用状況
            kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
06:49:17 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:18 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:19 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:20 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:21 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:22 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:23 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:24 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:25 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:26 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:27 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:28 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:29 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:30 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:31 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:32 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:33 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:34 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:35 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:36 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:38 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:39 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:40 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:41 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:42 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:43 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:44 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:45 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:46 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:47 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:48 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:49 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:50 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:51 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:52 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:53 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:54 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:55 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:56 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:57 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:58 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:49:59 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:50:00 PM  14417472  15906772   2007632     12.22    216628   1441552    432404      2.11   1194476    519416         0
06:50:01 PM  14416672  15905972   2008432     12.23    216636   1441544    432404      2.11   1195456    519416         0
06:50:02 PM  14412824  15902200   2012280     12.25    216644   1441560    419328      2.05   1197688    519336       272
06:50:03 PM  14412980  15902356   2012124     12.25    216644   1441560    419328      2.05   1197588    519332       272
06:50:04 PM  14412980  15902356   2012124     12.25    216644   1441560    419328      2.05   1197588    519332       272
06:50:05 PM  14412980  15902356   2012124     12.25    216644   1441560    419328      2.05   1197588    519332       272
06:50:06 PM  14412948  15902324   2012156     12.25    216644   1441560    419328      2.05   1197588    519332         0
06:50:07 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332        48
06:50:08 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332        48
06:50:09 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332        48
06:50:10 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332        48
06:50:11 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332        48
06:50:12 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332         0
06:50:14 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332         0
06:50:15 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332         0
06:50:16 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332         0
06:50:17 PM  14412808  15902184   2012296     12.25    216652   1441560    419328      2.05   1197944    519332         0
06:50:18 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:19 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:20 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:21 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:22 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:23 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:24 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:25 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:26 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:27 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:28 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:29 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:30 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:31 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:32 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:33 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:34 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:35 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:36 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:37 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:38 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:39 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:40 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:41 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:42 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:43 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:44 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:45 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:46 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:47 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:48 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:49 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:50 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:51 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:52 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:53 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:54 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:55 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:56 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:57 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:58 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:50:59 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:51:00 PM  14412808  15902184   2012296     12.25    216652   1441560    459672      2.25   1198084    519332         0
06:51:01 PM  14413004  15902380   2012100     12.25    216652   1441560    426492      2.09   1198084    519332         0
06:51:02 PM  14413056  15902432   2012048     12.25    216652   1441560    426492      2.09   1197912    519332         0

■ Spike動作状況

CPU負荷
                CPU     %user     %nice   %system   %iowait    %steal     %idle
06:58:17 PM     all      8.50      0.00      0.17      0.00      0.00     91.33
06:58:18 PM     all     16.56      0.00      0.00      0.00      0.00     83.44
06:58:20 PM     all     16.69      0.00      0.00      0.00      0.00     83.31
06:58:21 PM     all     16.78      0.00      0.00      0.00      0.00     83.22
06:58:22 PM     all     14.10      0.00      0.17      0.00      0.00     85.74
06:58:23 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
メモリ利用状況
            kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
06:58:16 PM  14417320  15907024   2007784     12.22    216724   1441780    415376      2.03   1195372    518948        20
06:58:17 PM  14417320  15907024   2007784     12.22    216724   1441780    415376      2.03   1195372    518948        20
06:58:18 PM  14416064  15905768   2009040     12.23    216724   1441780   2518140     12.31   1196712    518948        20
06:58:19 PM  14416072  15905776   2009032     12.23    216724   1441780   2518140     12.31   1196712    518948        20
06:58:20 PM  14416072  15905776   2009032     12.23    216724   1441780   2518140     12.31   1196712    518948        20
06:58:21 PM  14416072  15905776   2009032     12.23    216724   1441780   2518140     12.31   1196712    518948        20
06:58:22 PM  14417052  15906756   2008052     12.23    216724   1441780    419560      2.05   1195536    518948        20
06:58:23 PM  14417052  15906756   2008052     12.23    216724   1441780    419560      2.05   1195536    518948        20

RISC-V Spikeの方はメモリを起動時に大量に確保して、CPUはあまり使わなくても良い。逆にQuEST単体の方はメモリをあまり利用しないで、CPUを大量に(6vCPU全て)使い切っている。


また、Spikeの方は起動時にエミュレーター上にメモリを確保するため、起動時に2Gbyteのメモリを確保してQuESTの処理が全てオンメモリで動作する。逆にQuEST単体の方は、処理中でも57Kbyte程度のメモリしか確保しないで動作している。つまりメモリについての扱いの差が如実に結果に反映されたと考えられる。

また結果として、今回実装したRISC-V Spike with QuESTの環境を利用すると、QuESTを利用した量子演算が10倍早く行えるということを意味している(うまく実装できて良かった)。

■ おまけ

折角なので手持ちのRISC-V 64bit dual core K210(400-600MHz)を搭載した、Sipeed Maix M1w DockでもQuESTを動作させてパフォーマンスを見ることにした。

実機はこんな感じのもの

ビルドにはPlatformIOを利用して、kendryte210 SDKを使ってビルドをする。ソースコードはここにPIOのプロジェクトをtar.gzで固めて置いてある。ソースコードの中身は上記の"QuEST source code."と一緒で動く。
実際に1000万回繰り返してみた結果は...7分14秒でした。
CNN向けアクセラレータ KPUの方に処理をオフロードしてあげれば、もしかして高速に動作するかもしれない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です