Benchmarks in LiteX/Rocket on FPGA boards

benchmark-linux-litex-rocket

Luffcaでは、ベンチマークのCoreMarkを使って、前回の記事で紹介した64-bit Rocket ChipのマルチコアSoCの性能を計測しました。
Qmtech社のWukongボードとDigilent社のNexys Videoの2つのFPGAボード上でCoreMarkを実行しました。
WukongボードとNexys VideoのSoCは、それぞれデュアルコアとクワッドコアです。
また、OSはLinuxを用いています。

CoreMark on Wukong board

Wukongボード用のSoCは、デュアルコアの64-bit Rocket Chipです。
下の表が、ベンチマークの結果を表しています。

スレッド数 CoreMark CoreMark/MHz CoreMark/MHz
/Thread
1 107.0 2.14 2.14
2 208.8 4.18 2.09

シングルスレッドのCoreMark/MHzは、2.14です。
RocketのCoreMark/MHzは2.32として知られているので、シングルスレッドの結果(OS: Linux、-O2オプション)は、92%の性能になっています。
ちなみに、オプションを-O2から-O3 -funroll-loopsに変更したプログラムでは、95%の性能が得られています。
また、2スレッドのCoreMark/MHzは、4.18です。
シングルスレッドと比較した2スレッドのスコアは、1.95倍となっていることから、デュアルコアの効果が得られていることが分かります。

下記は、2スレッドのCoreMarkを実行した時の出力を示しています。

2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 19151
Total time (secs): 19.151000
Iterations/Sec : 208.866378
Iterations : 4000
Compiler version : GCC10.2.0
Compiler flags : -O2 -DMULTITHREAD=2 -DUSE_PTHREAD -pthread -DPERFORMANCE_RUN=1 -lrt
Parallel PThreads : 2
Memory location : Please put data memory location here
(e.g. code in flash, data on heap etc)
seedcrc : 0xe9f5
[0]crclist : 0xe714
[1]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[1]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[1]crcstate : 0x8e3a
[0]crcfinal : 0x4983
[1]crcfinal : 0x4983
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 208.866378 / GCC10.2.0 -O2 -DMULTITHREAD=2 -DUSE_PTHREAD -pthread -DPERFORMANCE_RUN=1 -lrt / Heap / 2:PThreads

CoreMark on Nexys Video

Nexys Video用のSoCは、クワッドコアの64-bit Rocket Chipです。
上のアイキャッチ画像と下の表が、ベンチマークの結果を表しています。

スレッド数 CoreMark CoreMark/MHz CoreMark/MHz
/Thread
1 106.2 2.12 2.12
2 210.1 4.20 2.10
3 311.6 6.23 2.08
4 415.4 8.31 2.08

シングルスレッドのCoreMark/MHzは2.12で、Wukongボード上の結果とほぼ同じ値です。
また、4スレッドのCoreMark/MHzは、8.31です。
シングルスレッドと比較した4スレッドのスコアは、3.91倍となっています。
なお、マルチスレッドのCoreMark/MHz/Threadは、2.08〜2.10を維持しており、4スレッドまで、ボトルネックとなるような要素はないようです。

下記は、4スレッドのCoreMarkを実行した時の出力を示しています。

2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 19258
Total time (secs): 19.258000
Iterations/Sec : 415.411777
Iterations : 8000
Compiler version : GCC10.2.0
Compiler flags : -O2 -DMULTITHREAD=4 -DUSE_PTHREAD -pthread -DPERFORMANCE_RUN=1 -lrt
Parallel PThreads : 4
Memory location : Please put data memory location here
(e.g. code in flash, data on heap etc)
seedcrc : 0xe9f5
[0]crclist : 0xe714
[1]crclist : 0xe714
[2]crclist : 0xe714
[3]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[1]crcmatrix : 0x1fd7
[2]crcmatrix : 0x1fd7
[3]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[1]crcstate : 0x8e3a
[2]crcstate : 0x8e3a
[3]crcstate : 0x8e3a
[0]crcfinal : 0x4983
[1]crcfinal : 0x4983
[2]crcfinal : 0x4983
[3]crcfinal : 0x4983
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 415.411777 / GCC10.2.0 -O2 -DMULTITHREAD=4 -DUSE_PTHREAD -pthread -DPERFORMANCE_RUN=1 -lrt / Heap / 4:PThreads

まとめ

Luffcaでは、ベンチマークのCoreMarkを使って、前回の記事で紹介した64-bit Rocket ChipのマルチコアSoCの性能を計測しました。
Wukongボード上のデュアルコアSoCとNexys Video上のクアッドコアSoCは、それぞれシングルスレッドの1.95倍と3.91倍の性能が得られることが分かりました。