FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-Vオープンソースコア Rocket-Chip, BOOMv1, BOOMv2 のサイクル性能比較

RISC-V Day Tokyo 2017お疲れさまでした。 私は午前中から適当なことを喋って、特にお金をもらっているわけでもないのにRISC-V Foundationとか、SiFiveのIPについてべた褒めをしてしまったのだった。

あとで何人かには聞かれたのだが、講演で使った資料にはバックアップスライドがあって、各種オープンソースコアのサイクル数ベンチマークを取った資料がある。 これは独自に取得したベンチマーク結果で、その正しさは未知数なのだが、参考までに公開してみよう。

比較したのは、

使用したのはriscv-testsのbenchmarksテストセットで、ログに表示される命令数とサイクル数を取得して一覧にしている。

Inst-Count Rocket-Cycle Inst-Count(BOOM) BOOM v1-Cycle BOOM v2-Cycle
dhrystone.riscv 198654 250623 200129 200129 154647
median.riscv 4159 5758 4259 7637 9956
mm.riscv 25199 29396 25287 17482 17044
mt-matmul - 42520 - 15948 16295
mt-vvadd.riscv - 23836 - 8846 7049
mt-vvadd.riscv - 21482 - 7637 6049
multiply.riscv 24298 28567 21003 18371 20044
qsort.riscv 125723 204247 124233 205474 254778
rsort.riscv 173305 227307 171284 112700 101057
spmv.riscv 33924 59877 32535 27991 28583
towers.riscv 6170 6338 6623 4607 5415
vvadd.riscv 2420 2496 2519 2040 2014

グラフにしてみるとこんな感じ。Rocket-Chipを1.0にして、そのサイクル数の比率を測定している。縦軸が大きいほど性能が良い。

f:id:msyksphinz:20171219232449p:plain

BOOMはRocket-Chipに比べて、それなりに性能が出ている。ただし、BOOMv1はBOOMv2よりもサイクル性能が良さそうな気がする。

vaddのような単純なパタンではBOOMは性能が出ているが、これはBOOMが、faddの単純ループのレイテンシを隠蔽できるからであり、それ以外ではそこまで大きな差が現れる訳ではない。

  • riscv-tests/benchmarks/mt-vvadd/vvadd.c
//--------------------------------------------------------------------------
// vvadd function

void __attribute__((noinline)) vvadd(int coreid, int ncores, size_t n, const data_t* x, const data_t* y, data_t* z)
{
   size_t i;

   // interleave accesses
   for (i = coreid; i < n; i+=ncores)
   {
      z[i] = x[i] + y[i];
   }
}

ただし、qsortとmedianでは、BOOMv2はBOOMv1よりも遅いどころか、Rocket-Chipよりも遅いんだよなあ。このへんはアプリケーションの特性によるかもしれない。