Skip to content

Commit 54d35a9

Browse files
committed
adding qualcomm results
1 parent b08ab44 commit 54d35a9

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,22 @@ faster than the standard library.
162162
| Russian-Lipsum | 3.3 | 0.95 | 3.5 x |
163163

164164

165+
On a Qualcomm 8cx gen3 (Windows Dev Kit 2023), we get roughly the same relative performance
166+
boost as the Neoverse V1.
167+
168+
| data set | SimdUnicode speed (GB/s) | .NET speed (GB/s) | speed up |
169+
|:----------------|:-----------|:--------------------------|:-------------------|
170+
| Twitter.json | 15 | 10 | 1.5 x |
171+
| Arabic-Lipsum | 4.0 | 2.3 | 1.7 x |
172+
| Chinese-Lipsum | 4.0 | 2.9 | 1.4 x |
173+
| Emoji-Lipsum | 4.0 | 0.9 | 4.4 x |
174+
| Hebrew-Lipsum | 4.0 | 2.3 | 1.7 x |
175+
| Hindi-Lipsum | 4.0 | 1.9 | 2.1 x |
176+
| Japanese-Lipsum | 4.0 | 2.7  | 1.5 x |
177+
| Korean-Lipsum | 4.0 | 1.5 | 2.7 x |
178+
| Latin-Lipsum | 50 | 20 | 2.5 x |
179+
| Russian-Lipsum | 4.0 | 1.2 | 3.3 x |
180+
165181
One difficulty with ARM processors is that they have varied SIMD/NEON performance. For example, Neoverse N1 processors, not to be confused with the Neoverse V1 design used by AWS Graviton 3, have weak SIMD performance. Of course, one can pick and choose which approach is best and it is not necessary to apply SimdUnicode is all cases. We expect good performance on recent ARM-based Qualcomm processors.
166182

167183
## Building the library

src/UTF8.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1388,7 +1388,7 @@ private unsafe static (int utfadjust, int scalaradjust) calculateErrorPathadjust
13881388
prevIncomplete = Vector128<byte>.Zero;
13891389
// Often, we have a lot of ASCII characters in a row.
13901390
int localasciirun = 16;
1391-
if (processedLength + localasciirun + 64 <= inputLength)
1391+
if (processedLength + localasciirun + 16 <= inputLength)
13921392
{
13931393
Vector128<byte> block = AdvSimd.LoadVector128(pInputBuffer + processedLength + localasciirun);
13941394
if (AdvSimd.Arm64.MaxAcross(Vector128.AsUInt32(AdvSimd.And(block, v80))).ToScalar() == 0)

0 commit comments

Comments
 (0)