1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
## Benchmark results
- compile by rustc 1.69.0 (84c898d65 2023-04-16)
0. x86_64-unknown-linux- @i5-4570:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 2.965 µs | 3.379 µs | 20.278 µs | 4.901 µs |
| libc_memcpy | 3.483 µs | 3.205 µs | 20.289 µs | 5.002 µs |
| memx_memcpy | 7.016 µs | 3.332 µs | 6.527 µs | 3.232 µs |
| memx_memcpy_basic | 7.041 µs | 5.133 µs | 7.320 µs | 6.248 µs |
| memx_memcpy_sse2 | 6.864 µs | 3.125 µs | 7.006 µs | 3.331 µs |
| memx_memcpy_avx2 | 7.009 µs | 3.331 µs | 6.504 µs | 3.212 µs |
1. x86_64-unknown-linux- @Q6600:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 7.372 µs | 7.531 µs | 39.319 µs | 9.589 µs |
| libc_memcpy | 7.318 µs | 7.483 µs | 46.665 µs | 9.595 µs |
| memx_memcpy | 13.868 µs | 6.883 µs | 13.674 µs | 6.842 µs |
| memx_memcpy_basic | 13.964 µs | 10.575 µs | 13.441 µs | 13.105 µs |
| memx_memcpy_sse2 | 13.850 µs | 6.899 µs | 13.653 µs | 6.837 µs |
2. i686-unknown-linux- @Q6600:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 16.381 µs | 10.334 µs | 31.080 µs | 14.925 µs |
| libc_memcpy | 15.144 µs | 9.852 µs | 30.693 µs | 14.834 µs |
| memx_memcpy | 23.592 µs | 9.747 µs | 21.920 µs | 9.981 µs |
| memx_memcpy_basic | 18.417 µs | 24.154 µs | 20.142 µs | 24.628 µs |
| memx_memcpy_sse2 | 20.956 µs | 9.762 µs | 21.510 µs | 10.059 µs |
3. i586-unknown-linux- @Q6600:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 15.972 µs | 10.041 µs | 31.421 µs | 15.296 µs |
| libc_memcpy | 15.077 µs | 9.891 µs | 31.069 µs | 15.181 µs |
| memx_memcpy | 19.989 µs | 9.425 µs | 21.517 µs | 10.410 µs |
| memx_memcpy_basic | 20.780 µs | 25.508 µs | 22.087 µs | 25.826 µs |
- compile by rustc 1.53.0 (53cb7b09b 2021-06-17)
1. x86_64-unknown-linux-:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 138.630 us | 207.800 us | 451.910 us | 433.550 us |
| libc_memcpy | 134.360 us | 208.740 us | 452.620 us | 431.460 us |
| memx_memcpy | 176.000 us | 235.350 us | 123.370 us | 274.940 us |
| memx_memcpy_basic | 162.600 us | 256.200 us | 111.340 us | 225.810 us |
| memx_memcpy_sse2 | 170.640 us | 208.160 us | 119.570 us | 245.090 us |
2. i686-unknown-linux-:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 137.790 us | 218.910 us | 274.320 us | 357.000 us |
| libc_memcpy | 123.630 us | 206.300 us | 278.470 us | 353.410 us |
| memx_memcpy | 213.070 us | 263.990 us | 228.690 us | 359.110 us |
| memx_memcpy_basic | 164.670 us | 247.550 us | 163.570 us | 348.740 us |
| memx_memcpy_sse2 | 165.470 us | 221.280 us | 154.790 us | 292.220 us |
3. i586-unknown-linux-:
| `name` | `gnu:en` | `gnu:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 136.440 us | 248.370 us | 276.420 us | 355.800 us |
| libc_memcpy | 122.100 us | 260.420 us | 278.000 us | 358.020 us |
| memx_memcpy | 162.350 us | 300.770 us | 166.830 us | 290.480 us |
| memx_memcpy_basic | 161.060 us | 301.330 us | 165.600 us | 289.560 us |
4. armv7-linux-androideabi:
| `name` | `andr:en` | `andr:ja` | `musl:en` | `musl:ja` |
|:------------------------|------------:|------------:|------------:|------------:|
| std_memcpy | 1071.000 us | 2871.600 us | 985.590 us | 1400.000 us |
| libc_memcpy | 1042.100 us | 2949.400 us | 1058.600 us | 1550.600 us |
| memx_memcpy | 601.610 us | 1268.700 us | 402.380 us | 1148.700 us |
| memx_memcpy_basic | 525.990 us | 1086.900 us | 336.710 us | 835.900 us |
- `µs` is micro seconds
- `:en` is english haystack or short length.
- `:ja` is japanese haystack or long length.
- `gnu` is x86_64-unknown-linux-gnu
- `musl` is x86_64-unknown-linux-musl
- @i5-4570: bench on intel i5-4570 @ 3.2GHz
- @Q6600: bench on intel Q6600 @ 2.40GHz or armv7 1.5GHz