## x86_64 (aka x64)

### Laptop: 11th Gen Intel i7-1185G7 (8) @ 4.800GHz

scalar_random_long_f16  time:   [67.045 µs 67.090 µs 67.143 µs]
sse_random_long_f16     time:   [10.120 µs 10.126 µs 10.134 µs]
avx2_random_long_f16    time:   [7.3271 µs 7.3303 µs 7.3339 µs]
avx512_random_long_f16  time:   [4.0125 µs 4.0166 µs 4.0206 µs]
impl_random_long_f16    time:   [3.9800 µs 3.9820 µs 3.9842 µs]

scalar_random_long_f32  time:   [57.434 µs 57.514 µs 57.616 µs]
sse_random_long_f32     time:   [38.284 µs 38.312 µs 38.351 µs]
avx_random_long_f32     time:   [24.109 µs 24.131 µs 24.159 µs]
avx512_random_long_f32  time:   [7.8858 µs 7.8868 µs 7.8879 µs]
impl_random_long_f32    time:   [7.5747 µs 7.5769 µs 7.5794 µs]

scalar_random_long_f64  time:   [57.431 µs 57.452 µs 57.476 µs]
sse_random_long_f64     time:   [74.618 µs 74.639 µs 74.663 µs]
avx_random_long_f64     time:   [48.175 µs 48.215 µs 48.265 µs]
avx512_random_long_f64  time:   [14.721 µs 14.734 µs 14.752 µs]
impl_random_long_f64    time:   [15.004 µs 15.007 µs 15.010 µs]

scalar_random_long_i8   time:   [54.877 µs 54.895 µs 54.916 µs]
sse_random_long_i8      time:   [11.854 µs 11.864 µs 11.875 µs]
avx2_random_long_i8     time:   [14.008 µs 14.013 µs 14.019 µs]
avx512_random_long_i8   time:   [15.079 µs 15.084 µs 15.091 µs]
impl_random_long_i8     time:   [11.835 µs 11.846 µs 11.857 µs]

scalar_random_long_i16  time:   [67.520 µs 67.663 µs 67.831 µs]
sse_random_long_i16     time:   [8.1634 µs 8.1769 µs 8.1903 µs]
avx2_random_long_i16    time:   [5.5039 µs 5.5078 µs 5.5122 µs]
avx512_random_long_i16  time:   [3.1286 µs 3.1298 µs 3.1312 µs]
impl_random_long_i16    time:   [3.1944 µs 3.1957 µs 3.1972 µs]

scalar_random_long_i32  time:   [43.811 µs 43.834 µs 43.865 µs]
sse_random_long_i32     time:   [15.945 µs 16.023 µs 16.102 µs]
avx2_random_long_i32    time:   [10.510 µs 10.514 µs 10.517 µs]
avx512_random_long_i32  time:   [5.8947 µs 5.8974 µs 5.9005 µs]
impl_random_long_i32    time:   [5.5592 µs 5.5627 µs 5.5686 µs]

scalar_random_long_i64  time:   [46.211 µs 46.252 µs 46.301 µs]
sse_random_long_i64     time:   [54.677 µs 54.706 µs 54.746 µs]
avx2_random_long_i64    time:   [38.602 µs 38.618 µs 38.639 µs]
avx512_random_long_i64  time:   [14.926 µs 14.930 µs 14.934 µs]
impl_random_long_i64    time:   [14.297 µs 14.308 µs 14.322 µs]

scalar_random_long_u8   time:   [80.157 µs 80.265 µs 80.376 µs]
sse_random_long_u8      time:   [12.081 µs 12.090 µs 12.101 µs]
avx2_random_long_u8     time:   [14.453 µs 14.463 µs 14.473 µs]
avx512_random_long_u8   time:   [15.489 µs 15.496 µs 15.503 µs]
impl_random_long_u8     time:   [12.678 µs 12.685 µs 12.693 µs]

scalar_random_long_u16  time:   [90.227 µs 90.249 µs 90.275 µs] -> sneller?
sse_random_long_u16     time:   [8.2780 µs 8.2808 µs 8.2839 µs]
avx2_random_long_u16    time:   [5.7641 µs 5.7665 µs 5.7686 µs]
avx512_random_long_u16  time:   [3.4283 µs 3.4302 µs 3.4323 µs]
impl_random_long_u16    time:   [3.3348 µs 3.3375 µs 3.3416 µs]

scalar_random_long_u32  time:   [66.721 µs 66.752 µs 66.788 µs]
sse_random_long_u32     time:   [16.437 µs 16.454 µs 16.475 µs]
avx2_random_long_u32    time:   [11.280 µs 11.283 µs 11.286 µs]
avx512_random_long_u32  time:   [6.1891 µs 6.1939 µs 6.2013 µs]
impl_random_long_u32    time:   [6.5594 µs 6.5636 µs 6.5683 µs]

scalar_random_long_u64  time:   [66.776 µs 66.900 µs 67.052 µs]
sse_random_long_u64     time:   [54.894 µs 54.916 µs 54.943 µs]
avx2_random_long_u64    time:   [37.903 µs 37.940 µs 37.991 µs]
avx512_random_long_u64  time:   [14.702 µs 14.709 µs 14.717 µs]
impl_random_long_u64    time:   [15.040 µs 15.046 µs 15.054 µs]

----

### Server: Intel Xeon E5-2650 v2 (32) @ 3.400GHz

scalar_random_long_f16  time:   [124.98 µs 125.05 µs 125.13 µs]
sse_random_long_f16     time:   [21.559 µs 21.565 µs 21.571 µs]
impl_random_long_f16    time:   [21.572 µs 21.578 µs 21.585 µs]

scalar_random_long_f32  time:   [98.079 µs 98.143 µs 98.221 µs]
sse_random_long_f32     time:   [54.766 µs 54.788 µs 54.812 µs]
avx_random_long_f32     time:   [27.565 µs 27.575 µs 27.586 µs]
impl_random_long_f32    time:   [27.567 µs 27.578 µs 27.591 µs]

scalar_random_long_f64  time:   [93.482 µs 93.608 µs 93.753 µs]
sse_random_long_f64     time:   [112.40 µs 112.44 µs 112.48 µs]
avx_random_long_f64     time:   [55.188 µs 55.205 µs 55.225 µs]
impl_random_long_f64    time:   [55.193 µs 55.220 µs 55.249 µs]

scalar_random_long_i8   time:   [111.68 µs 111.73 µs 111.77 µs]
sse_random_long_i8      time:   [23.394 µs 23.398 µs 23.403 µs]
impl_random_long_i8     time:   [23.301 µs 23.305 µs 23.309 µs]

scalar_random_long_i16  time:   [114.27 µs 114.31 µs 114.36 µs]
sse_random_long_i16     time:   [19.041 µs 19.047 µs 19.052 µs]
impl_random_long_i16    time:   [19.050 µs 19.057 µs 19.064 µs]

scalar_random_long_i32  time:   [106.54 µs 106.58 µs 106.62 µs]
sse_random_long_i32     time:   [33.426 µs 33.443 µs 33.460 µs]
impl_random_long_i32    time:   [33.423 µs 33.438 µs 33.457 µs]

scalar_random_long_i64  time:   [106.66 µs 106.70 µs 106.74 µs]
sse_random_long_i64     time:   [166.21 µs 166.27 µs 166.33 µs]
impl_random_long_i64    time:   [106.67 µs 106.71 µs 106.77 µs]

scalar_random_long_u8   time:   [139.28 µs 139.31 µs 139.35 µs]
sse_random_long_u8      time:   [24.055 µs 24.061 µs 24.067 µs]
impl_random_long_u8     time:   [24.049 µs 24.053 µs 24.058 µs]

scalar_random_long_u16  time:   [137.21 µs 137.25 µs 137.29 µs]
sse_random_long_u16     time:   [19.037 µs 19.045 µs 19.054 µs]
impl_random_long_u16    time:   [19.040 µs 19.046 µs 19.053 µs]

scalar_random_long_u32  time:   [135.97 µs 136.06 µs 136.17 µs]
sse_random_long_u32     time:   [36.288 µs 36.299 µs 36.311 µs]
impl_random_long_u32    time:   [36.265 µs 36.280 µs 36.295 µs]

scalar_random_long_u64  time:   [135.94 µs 135.98 µs 136.02 µs]
sse_random_long_u64     time:   [189.34 µs 189.42 µs 189.49 µs]
impl_random_long_u64    time:   [135.96 µs 136.02 µs 136.09 µs]



---------------------------------------------------------------

## ARM

### Raspberry Pi 3B v1.2 (ARMv7 Processor rev 4 (v7l))

scalar_random_long_f16  time:   [855.10 µs 855.38 µs 855.93 µs]
neon_random_long_f16    time:   [528.80 µs 529.19 µs 529.93 µs]
impl_random_long_f16    time:   [548.74 µs 548.79 µs 548.84 µs]

scalar_random_long_f32  time:   [777.12 µs 777.32 µs 777.54 µs]
neon_random_long_f32    time:   [1.0013 ms 1.0016 ms 1.0020 ms]
impl_random_long_f32    time:   [776.10 µs 777.05 µs 778.29 µs]

scalar_random_long_f64  time:   [737.34 µs 739.08 µs 740.88 µs]
impl_random_long_f64    time:   [731.59 µs 732.29 µs 733.00 µs]

scalar_random_long_i8   time:   [687.17 µs 688.10 µs 689.08 µs]
neon_random_long_i8     time:   [450.31 µs 450.40 µs 450.50 µs]
impl_random_long_i8     time:   [437.06 µs 437.14 µs 437.24 µs]

scalar_random_long_i16  time:   [684.97 µs 685.39 µs 686.16 µs]
neon_random_long_i16    time:   [518.03 µs 518.07 µs 518.11 µs]
impl_random_long_i16    time:   [500.61 µs 500.69 µs 500.77 µs]

scalar_random_long_i32  time:   [519.78 µs 520.71 µs 521.66 µs]
neon_random_long_i32    time:   [1.0207 ms 1.0210 ms 1.0213 ms]
impl_random_long_i32    time:   [519.82 µs 520.82 µs 521.82 µs]

scalar_random_long_i64  time:   [1.1529 ms 1.1533 ms 1.1536 ms]
impl_random_long_i64    time:   [1.1591 ms 1.1595 ms 1.1600 ms]

scalar_random_long_u8   time:   [687.11 µs 687.21 µs 687.31 µs]
neon_random_long_u8     time:   [354.93 µs 354.98 µs 355.04 µs] -> veel sneller dan i8
impl_random_long_u8     time:   [343.60 µs 344.13 µs 344.66 µs]

scalar_random_long_u16  time:   [684.65 µs 684.69 µs 684.74 µs]
neon_random_long_u16    time:   [516.20 µs 516.29 µs 516.38 µs]
impl_random_long_u16    time:   [496.21 µs 496.28 µs 496.36 µs]

scalar_random_long_u32  time:   [518.33 µs 519.35 µs 520.45 µs]
neon_random_long_u32    time:   [1.0232 ms 1.0253 ms 1.0274 ms]
impl_random_long_u32    time:   [518.50 µs 518.96 µs 519.49 µs]

scalar_random_long_u64  time:   [1.1652 ms 1.1678 ms 1.1703 ms]
impl_random_long_u64    time:   [1.1641 ms 1.1665 ms 1.1689 ms]


Remarks:
- i64 and u64 are significantly slower than f64
   => might be worth to try optimize i64 and u64 (through mapping the bit representation
   to some ordinal f64 value)
   !! Problems with such a mapping: floats have nans and infinities...

---------------------------------------------------------------

## AArch64

### Raspberry Pi 4B v1.1 (AArch64 Processor rev 4 (aarch64))

scalar_random_long_f16  time:   [343.74 µs 343.75 µs 343.77 µs]
neon_random_long_f16    time:   [96.912 µs 96.935 µs 96.970 µs]
impl_random_long_f16    time:   [96.941 µs 96.963 µs 96.994 µs]

scalar_random_long_f32  time:   [209.76 µs 209.82 µs 209.91 µs]
neon_random_long_f32    time:   [148.95 µs 149.05 µs 149.22 µs]
impl_random_long_f32    time:   [148.94 µs 148.97 µs 148.99 µs]

scalar_random_long_f64  time:   [244.41 µs 244.62 µs 244.85 µs]
impl_random_long_f64    time:   [244.76 µs 245.10 µs 245.44 µs]

scalar_random_long_i8   time:   [274.41 µs 274.41 µs 274.41 µs]
neon_random_long_i8     time:   [79.214 µs 79.219 µs 79.225 µs]
impl_random_long_i8     time:   [79.172 µs 79.179 µs 79.191 µs]

scalar_random_long_i16  time:   [274.98 µs 274.98 µs 274.99 µs]
neon_random_long_i16    time:   [54.987 µs 54.988 µs 54.990 µs]
impl_random_long_i16    time:   [54.990 µs 54.993 µs 54.995 µs]

scalar_random_long_i32  time:   [242.26 µs 242.27 µs 242.28 µs]
neon_random_long_i32    time:   [106.21 µs 106.22 µs 106.22 µs]
impl_random_long_i32    time:   [106.29 µs 106.30 µs 106.30 µs]

scalar_random_long_i64  time:   [273.56 µs 273.89 µs 274.23 µs]
impl_random_long_i64    time:   [272.86 µs 273.11 µs 273.37 µs]

scalar_random_long_u8   time:   [274.36 µs 274.37 µs 274.38 µs]
neon_random_long_u8     time:   [52.818 µs 52.821 µs 52.828 µs]
impl_random_long_u8     time:   [52.972 µs 52.976 µs 52.980 µs]

scalar_random_long_u16  time:   [274.94 µs 274.94 µs 274.95 µs]
neon_random_long_u16    time:   [54.615 µs 54.624 µs 54.635 µs]
impl_random_long_u16    time:   [54.614 µs 54.618 µs 54.624 µs]

scalar_random_long_u32  time:   [242.26 µs 242.27 µs 242.29 µs]
neon_random_long_u32    time:   [106.24 µs 106.27 µs 106.30 µs]
impl_random_long_u32    time:   [106.26 µs 106.27 µs 106.28 µs]

scalar_random_long_u64  time:   [267.46 µs 267.74 µs 268.02 µs]
impl_random_long_u64    time:   [268.66 µs 268.88 µs 269.11 µs]


Remarks:
- f16 NEON is a lot slower than i16 en u16 NEON
- f32 NEON is a lot slower than i32 en u32 NEON
  => f32 naar i32 casten en dan i32 NEON gebruiken??
!! TODO zeker nog eens naar code kijken voor float dtypes
