4 ms·
One thing to keep in mind when looking at geekbench is that it's lacking Vector/SIMD optimizations for RISC-V. Most current processor lack RVV support as well,
by camel-cdr 2y ago
One thing to keep in mind when looking at geekbench is that it's lacking Vector/SIMD optimizations for RISC-V. Most current processor lack RVV support as well, but it makes the comparison a bit meaningless. Geekbench also probably doesn't enable extension besides rv64gc, so no bitmanip extensions.
Let's take two very similar cores, the SiFive P550 @1.4GHz and a Cortex-A72 @1.5GHz: https://browser.geekbench.com/v6/cpu/compare/123?baseline=7469319 https://browser.geekbench.com/v6/cpu/compare/123?baseline=74...
Notice that the A72 is a lot faster in some of the benchmarks. Looking at the manual suggests that all of them are to a varying degree SIMD optimized for arm Neon: https://www.geekbench.com/doc/geekbench6-benchmark-internals.pdf https://www.geekbench.com/doc/geekbench6-benchmark-internals...
The most ISA agnostic benchmark you can compare is the clang one, as it just compiles clang, which doesn't benefit much from dedicated instructions that aren't enabled for RISC-V. Notice how there the P550 outperforms the A72.
---
That compared un-optimized code, but let's compare hand optimized ARM Neon vs hand optimized RISC-V RVV:
This time I'm comparing a Cortex-A72 with the SpacemiT X60:
* Cortex-A55: in order 1.8GHz, dual issue neon (two 128-bit execution units)
* SpacemiT X60: in order 1.6GHz. Has RVV with 256-bit vectors, but two 128-bit execution units with a weird layout:
only EX1: shift, bitwise, compare, mask-ops, merge, gather, compress
EX1&EX2: int/float arithmetic, including mul&div
The cores should be quite comparable, although the A55 is in a lot better SOC (my phone) than the X60 core and should be slightly faster, all else equal.
The hand optimized code is from simdutf and the gnuradio kernel library, which I ported both to RVV:
gnuradio kernels
A55 Neon vs X60 RVV
i16c mul: 674 vs 634 ms
i16c dot: 361 vs 415 ms
f32c conj dot: 1043 vs 900 ms
rotator2: 763 vs 918 ms
min index u32: 404 vs 156 ms
f32 interleave: 308 vs 742 ms
f32 log2: 1208 vs 789 ms
f32 sin: 2155 vs 2152 ms
f32 tan: 2962 vs 3152 ms
f32 stddev&mean: 609 vs 277 ms
f32 poly sum: 667 vs 266 ms
u8 conv k2: 10413 bs 7523 ms
simdutf: utf8 to utf16 utf16 to utf8
Neon A55 vs RVV X60 Neon A55 vs RVV X60
arabic.utf8.txt 0.25 vs 0.34 b/c 0.66 vs 0.95 b/c
chinese.utf8.txt 0.23 vs 0.28 b/c 0.51 vs 0.56 b/c
czech.utf8.txt 0.21 vs 0.35 b/c 0.67 vs 0.90 b/c
english.utf8.txt 0.81 vs 0.85 b/c 1.14 vs 1.63 b/c
esperanto.utf8.txt 0.34 vs 0.45 b/c 0.91 vs 1.12 b/c
french.utf8.txt 0.28 vs 0.35 b/c 0.86 vs 0.98 b/c
german.utf8.txt 0.35 vs 0.41 b/c 0.94 vs 1.10 b/c
greek.utf8.txt 0.24 vs 0.37 b/c 0.64 vs 1.03 b/c
hebrew.utf8.txt 0.21 vs 0.33 b/c 0.58 vs 0.92 b/c
hindi.utf8.txt 0.24 vs 0.29 b/c 0.48 vs 0.57 b/c
japanese.utf8.txt 0.23 vs 0.29 b/c 0.49 vs 0.57 b/c
korean.utf8.txt 0.21 vs 0.28 b/c 0.47 vs 0.55 b/c
persan.utf8.txt 0.23 vs 0.33 b/c 0.60 vs 0.80 b/c
portuguese.utf8.txt 0.29 vs 0.36 b/c 0.88 vs 1.02 b/c
russian.utf8.txt 0.23 vs 0.31 b/c 0.60 vs 0.84 b/c
thai.utf8.txt 0.29 vs 0.30 b/c 0.52 vs 0.60 b/c
turkish.utf8.txt 0.25 vs 0.38 b/c 0.73 vs 0.99 b/c
vietnamese.utf8.txt 0.18 vs 0.28 b/c 0.46 vs 0.54 b/c
Note: b/c is bytes/cycle, so bigger is better
As you can see the performance is very competitive between processors of a similar design point.
- goodpoint 2y agoThank you!