From 045d0938b9ca679af6f41f9f22dd84689f7c0fdd Mon Sep 17 00:00:00 2001 From: Andrea Zoppi Date: Sun, 31 Mar 2024 19:56:29 +0200 Subject: [PATCH] Added preliminary benchmark results Signed-off-by: Andrea Zoppi --- README.md | 28 ++++++++++++++++++++++++-- doc/benchmarks/BBB_ARM-A8.csv | 11 ++++++++++ doc/benchmarks/PC_i7-6700k.csv | 11 ++++++++++ doc/benchmarks/RPi5_ARM-A76.csv | 11 ++++++++++ doc/benchmarks/benchmark-results.png | Bin 0 -> 15049 bytes doc/benchmarks/benchmark-results.xlsx | Bin 0 -> 17944 bytes 6 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 doc/benchmarks/BBB_ARM-A8.csv create mode 100644 doc/benchmarks/PC_i7-6700k.csv create mode 100644 doc/benchmarks/RPi5_ARM-A76.csv create mode 100644 doc/benchmarks/benchmark-results.png create mode 100644 doc/benchmarks/benchmark-results.xlsx diff --git a/README.md b/README.md index 5c03d97..10f9c69 100644 --- a/README.md +++ b/README.md @@ -112,9 +112,33 @@ meson compile benchmark-report ``` -### Benchmark Results +### OPL3 Benchmark Results -**TODO** +Some preliminary benchmarks were run against some very different CPUs: + +| System | OS | CPU | SIMD | Notes +|:-|:-|:-|:-|:-| +| PC | Windows 10 | i7 6700k | x86 SSE4.1 + AVX2 | Home PC | +| BeagleBone Black | Debian 11 | ARM Cortex-A8 | ARMv7 NEON | Headless | +| Raspberry Pi 5 | Debian 12 | ARM Cortex-A76 | ARMv7 NEON | Headless + Heatsink Fan | + +All the systems were updated to their latest software and OS releases. +The compiler was *GCC* for all these machines. +All the scores were played via `aymo_ymf262_play --benchmark --loops 3`, except for the *BBB* which did not loop (too slow!). + +All the systems run `--cpu-ext dummy`, which mimics the overhead of the test harness itself (mostly the score decoder), to subtract it from the actual benchmarks. +The reference implementation is *NukedOPL3*, run as `--cpu-ext none`. + +Here's a summary of the results: + +| CPU | SIMD | Ratio | DevSt | Speedup | +|:-|:-|-:|-:|-:| +| i7 6700k | x86 SSE4.1 | 0.590 | 0.026 | 1.695 | +| i7 6700k | x86 AVX2 | 0.302 | 0.013 | 3.315 | +| ARM Cortex-A8 | ARMv7 NEON | 0.575 | 0.035 | 1.740 | +| ARM Cortex-A76 | ARMv7 NEON | 0.374 | 0.010 | 2.671 | + +![Benchmark Results](./doc/benchmarks/benchmark-results.png) ## Integration diff --git a/doc/benchmarks/BBB_ARM-A8.csv b/doc/benchmarks/BBB_ARM-A8.csv new file mode 100644 index 0000000..22951fc --- /dev/null +++ b/doc/benchmarks/BBB_ARM-A8.csv @@ -0,0 +1,11 @@ +SCORE,dummy,none,arm_neon +"BeyondSN.vgm",0.235000,23.964000,12.382000 +"bmf1_1.ref",0.448000,40.540000,23.893000 +"bmf1_2.ref",0.439000,39.252000,23.368000 +"crusader.raw",0.352000,30.499000,18.735000 +"doofus.dro",0.625000,59.484000,37.468000 +"dro_v2.dro",0.820000,79.142000,45.182000 +"dystopia.ref",1.190000,111.587000,60.619000 +"GALWAY.ref",0.300000,29.206000,15.615000 +"inc.raw",0.120000,10.472000,6.296000 +"loudness.ref",0.023000,1.978000,1.179000 diff --git a/doc/benchmarks/PC_i7-6700k.csv b/doc/benchmarks/PC_i7-6700k.csv new file mode 100644 index 0000000..0c40828 --- /dev/null +++ b/doc/benchmarks/PC_i7-6700k.csv @@ -0,0 +1,11 @@ +SCORE,dummy,none,x86_avx2,x86_sse41 +"BeyondSN.vgm",0.046000,5.109000,1.453000,2.859000 +"bmf1_1.ref",0.093000,8.922000,2.812000,5.343000 +"bmf1_2.ref",0.078000,8.563000,2.688000,5.265000 +"crusader.raw",0.078000,6.859000,2.203000,4.218000 +"doofus.dro",0.125000,13.797000,4.375000,8.078000 +"dro_v2.dro",0.172000,18.312000,5.438000,10.453000 +"dystopia.ref",0.234000,24.437000,7.125000,13.656000 +"GALWAY.ref",0.047000,6.031000,1.860000,3.640000 +"inc.raw",0.031000,2.390000,0.734000,1.406000 +"loudness.ref",0.000000,0.437000,0.141000,0.281000 diff --git a/doc/benchmarks/RPi5_ARM-A76.csv b/doc/benchmarks/RPi5_ARM-A76.csv new file mode 100644 index 0000000..507469a --- /dev/null +++ b/doc/benchmarks/RPi5_ARM-A76.csv @@ -0,0 +1,11 @@ +SCORE,dummy,none,arm_neon +"BeyondSN.vgm",0.076017,7.737659,2.811513 +"bmf1_1.ref",0.146062,14.089469,5.268482 +"bmf1_2.ref",0.142800,13.359588,5.147929 +"crusader.raw",0.114323,10.722416,4.119310 +"doofus.dro",0.210133,21.032906,8.351923 +"dro_v2.dro",0.282348,27.369149,10.219190 +"dystopia.ref",0.396055,36.095204,13.373861 +"GALWAY.ref",0.096829,9.003890,3.521635 +"inc.raw",0.038078,3.576043,1.386682 +"loudness.ref",0.007435,0.682634,0.261767 diff --git a/doc/benchmarks/benchmark-results.png b/doc/benchmarks/benchmark-results.png new file mode 100644 index 0000000000000000000000000000000000000000..0e47b87cc9cb68f96c98f98fd0e24f2e99048a7f GIT binary patch literal 15049 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 z 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