Running Test Programs on Gemmini Simulators

systolic-array

Luffcaでは、RISC-V SoCデザインフレームワークであるChipyardの環境構築を行うと共に、DNNアクセラレータのGemminiのシミュレータを作成し、テストプログラムのgemmini-rocc-testsを実行しました。

Chipyard

Chipyardは、UCB(カリフォルニア大学バークレイ校)が開発を進めているアジャイルRISC-V SoCデザインフレームワークです。
Chipyardには、RocketやBOOMなどのRISC-V CPU、アクセラレータなどが含まれています。

Gemmini

Gemminiは、Chipyardに含まれるRTLジェネレータの一つで、シストリックアレイ方式のDNNアクセラレータを生成することができます。
また、RISC-V CPUのRocketまたはBOOMとGemminiを組み合わせることによって、SoCを構成できます。

Gemmini Simulator

Gemminiには、いくつかのシミュレータがあります。今回は、以下のシミュレータを作成しました。

  • Spike: Functional Simulator
  • Verilator: Cycle-Accurate Simulator

なお、ファンクショナル・シミュレータのSpikeには、Gemmini用の拡張が追加されています。

Running Test Programs on Spike

以下は、Spikeを用いてResNet-50を実行したときの様子です。

$ cd $CHIPYARD_ROOT/generators/gemmini
$ ./scripts/run-spike.sh resnet50
...
Prediction: 75 (score: 45)
Prediction: 900 (score: 43)
Prediction: 641 (score: 40)
Prediction: 897 (score: 57)

Total cycles: 4958105 (100%)
Matmul cycles: 695733 (14%)
Im2col cycles: 0 (0%)
Conv cycles: 1769030 (35%)
Pooling cycles: 0 (0%)
Depthwise convolution cycles: 0 (0%)
Res add cycles: 2398040 (48%)
Other cycles: 95302 (1%)
PASS

Running Test Programs on Verilator

以下は、Verilatorを用いてconv_first_layerを実行したときの様子です。

$ cd $CHIPYARD_ROOT/generators/gemmini
$ ./scripts/run-verilator.sh conv_first_layer
This emulator compiled with JTAG Remote Bitbang client. To enable, use +jtag_rbb_enable=1.
Listening on port 33079
[UART] UART0 is here (stdin/stdout).
Output dimension: 9

Randomize inputs...
Randomize weights...
Randomize bias...
CPU conv...
CPU conv took 2238789 cycles
Flatten weights...
Gemmini conv...
Gemmini conv took 1796 cycles

まとめ

Luffcaでは、Chipyardの環境構築を行うと共に、DNNアクセラレータのGemminiのシミュレータを作成し、テストプログラムのgemmini-rocc-testsを実行しました。