RISC-V Day Tokyo 2017お疲れさまでした。 私は午前中から適当なことを喋って、特にお金をもらっているわけでもないのにRISC-V Foundationとか、SiFiveのIPについてべた褒めをしてしまったのだった。
あとで何人かには聞かれたのだが、講演で使った資料にはバックアップスライドがあって、各種オープンソースコアのサイクル数ベンチマークを取った資料がある。 これは独自に取得したベンチマーク結果で、その正しさは未知数なのだが、参考までに公開してみよう。
比較したのは、
- UCB Rocket-Chip (https://github.com/freechipsproject/rocket-chip/commit/09160d0cd59cf74366541270a225985812277343)
- UCB BOOMv1 (https://github.com/freechipsproject/rocket-chip/commit/0904e6930401be7ac06f99ff988e9fd585d81180)
- UCB BOOMv2 (https://github.com/freechipsproject/rocket-chip/commit/21cce2cd9a90630910f02bb0c936ca99b3a429f0, boom subrepository を tag v2.0.1に置き換え)
使用したのは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にして、そのサイクル数の比率を測定している。縦軸が大きいほど性能が良い。
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よりも遅いんだよなあ。このへんはアプリケーションの特性によるかもしれない。