## x86_64 (aka x64)

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

scalar_random_long_f16  time:   [65.570 µs 65.646 µs 65.735 µs]
sse_random_long_f16     time:   [9.6870 µs 9.7013 µs 9.7266 µs]
avx2_random_long_f16    time:   [6.6527 µs 6.6566 µs 6.6604 µs]
avx512_random_long_f16  time:   [3.5479 µs 3.5486 µs 3.5494 µs]
impl_random_long_f16    time:   [3.5546 µs 3.5567 µs 3.5603 µs]

scalar_random_long_f32  time:   [57.380 µs 57.442 µs 57.542 µs]
sse_random_long_f32     time:   [36.817 µs 36.848 µs 36.886 µs]
avx_random_long_f32     time:   [21.050 µs 21.057 µs 21.065 µs]
avx512_random_long_f32  time:   [7.2159 µs 7.2173 µs 7.2188 µs]
impl_random_long_f32    time:   [7.2594 µs 7.2646 µs 7.2732 µs]

scalar_random_long_f64  time:   [57.372 µs 57.391 µs 57.412 µs]
sse_random_long_f64     time:   [73.651 µs 73.730 µs 73.822 µs]
avx_random_long_f64     time:   [42.534 µs 42.546 µs 42.560 µs]
avx512_random_long_f64  time:   [14.314 µs 14.317 µs 14.321 µs]
impl_random_long_f64    time:   [14.424 µs 14.441 µs 14.471 µs]

scalar_random_long_i8   time:   [57.441 µs 57.455 µs 57.472 µs]
sse_random_long_i8      time:   [6.6320 µs 6.6443 µs 6.6632 µs]
avx2_random_long_i8     time:   [7.9215 µs 7.9307 µs 7.9484 µs]
avx512_random_long_i8   time:   [10.442 µs 10.445 µs 10.448 µs]
impl_random_long_i8     time:   [6.6444 µs 6.6477 µs 6.6515 µs]

scalar_random_long_i16  time:   [67.370 µs 67.399 µs 67.433 µs]
sse_random_long_i16     time:   [7.9032 µs 7.9229 µs 7.9419 µs]
avx2_random_long_i16    time:   [4.7839 µs 4.7889 µs 4.7973 µs]
avx512_random_long_i16  time:   [2.8421 µs 2.8447 µs 2.8477 µs]
impl_random_long_i16    time:   [2.8841 µs 2.8870 µs 2.8912 µs]

scalar_random_long_i32  time:   [45.305 µs 45.317 µs 45.331 µs]
sse_random_long_i32     time:   [16.415 µs 16.422 µs 16.430 µs]
avx2_random_long_i32    time:   [9.3268 µs 9.3294 µs 9.3322 µs]
avx512_random_long_i32  time:   [5.4529 µs 5.4546 µs 5.4562 µs]
impl_random_long_i32    time:   [5.4611 µs 5.4623 µs 5.4635 µs]

scalar_random_long_i64  time:   [45.294 µs 45.309 µs 45.326 µs]
sse_random_long_i64     time:   [43.748 µs 43.777 µs 43.807 µs]
avx2_random_long_i64    time:   [34.374 µs 34.386 µs 34.399 µs]
avx512_random_long_i64  time:   [12.193 µs 12.196 µs 12.199 µs]
impl_random_long_i64    time:   [12.367 µs 12.370 µs 12.374 µs]

scalar_random_long_u8   time:   [86.838 µs 86.869 µs 86.901 µs]
sse_random_long_u8      time:   [6.7566 µs 6.7595 µs 6.7627 µs]
avx2_random_long_u8     time:   [8.1528 µs 8.1594 µs 8.1716 µs]
avx512_random_long_u8   time:   [11.278 µs 11.283 µs 11.289 µs]
impl_random_long_u8     time:   [6.8884 µs 6.8914 µs 6.8948 µs]

scalar_random_long_u16  time:   [90.182 µs 90.223 µs 90.270 µs] -> sneller?
sse_random_long_u16     time:   [8.2840 µs 8.2881 µs 8.2930 µs]
avx2_random_long_u16    time:   [5.7159 µs 5.7328 µs 5.7513 µs]
avx512_random_long_u16  time:   [3.1425 µs 3.1432 µs 3.1439 µs]
impl_random_long_u16    time:   [3.1625 µs 3.1632 µs 3.1640 µs]

scalar_random_long_u32  time:   [66.953 µs 66.994 µs 67.033 µs]
sse_random_long_u32     time:   [16.417 µs 16.424 µs 16.431 µs]
avx2_random_long_u32    time:   [10.819 µs 10.825 µs 10.833 µs]
avx512_random_long_u32  time:   [6.2002 µs 6.2019 µs 6.2037 µs]
impl_random_long_u32    time:   [6.1439 µs 6.1463 µs 6.1493 µs]

scalar_random_long_u64  time:   [66.713 µs 66.736 µs 66.763 µs]
sse_random_long_u64     time:   [43.750 µs 43.790 µs 43.844 µs]
avx2_random_long_u64    time:   [35.045 µs 35.060 µs 35.075 µs]
avx512_random_long_u64  time:   [12.498 µs 12.500 µs 12.502 µs]
impl_random_long_u64    time:   [12.530 µs 12.533 µs 12.536 µs]

----

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

scalar_random_long_f16  time:   [124.69 µs 124.71 µs 124.74 µs]
sse_random_long_f16     time:   [20.948 µs 20.955 µs 20.964 µs]
impl_random_long_f16    time:   [20.955 µs 20.964 µs 20.974 µs]

scalar_random_long_f32  time:   [97.873 µs 97.907 µs 97.952 µs]
sse_random_long_f32     time:   [51.544 µs 51.606 µs 51.674 µs]
avx_random_long_f32     time:   [23.261 µs 23.277 µs 23.296 µs]
impl_random_long_f32    time:   [23.315 µs 23.345 µs 23.376 µs]

scalar_random_long_f64  time:   [92.884 µs 93.005 µs 93.153 µs]
sse_random_long_f64     time:   [102.75 µs 102.87 µs 103.00 µs]
avx_random_long_f64     time:   [48.308 µs 48.363 µs 48.420 µs]
impl_random_long_f64    time:   [48.360 µs 48.423 µs 48.491 µs]

scalar_random_long_i8   time:   [117.87 µs 118.05 µs 118.31 µs]
sse_random_long_i8      time:   [14.109 µs 14.127 µs 14.145 µs]
impl_random_long_i8     time:   [14.007 µs 14.015 µs 14.024 µs]

scalar_random_long_i16  time:   [114.09 µs 114.12 µs 114.17 µs]
sse_random_long_i16     time:   [17.992 µs 17.996 µs 18.000 µs]
impl_random_long_i16    time:   [17.991 µs 17.998 µs 18.008 µs]

scalar_random_long_i32  time:   [106.36 µs 106.38 µs 106.40 µs]
sse_random_long_i32     time:   [32.365 µs 32.395 µs 32.427 µs]
impl_random_long_i32    time:   [32.377 µs 32.401 µs 32.425 µs]

scalar_random_long_i64  time:   [106.43 µs 106.46 µs 106.49 µs]
sse_random_long_i64     time:   [161.52 µs 161.63 µs 161.75 µs]
impl_random_long_i64    time:   [107.02 µs 107.14 µs 107.27 µs]

scalar_random_long_u8   time:   [136.06 µs 136.13 µs 136.23 µs]
sse_random_long_u8      time:   [14.748 µs 14.752 µs 14.758 µs]
impl_random_long_u8     time:   [14.765 µs 14.768 µs 14.771 µs]

scalar_random_long_u16  time:   [137.02 µs 137.10 µs 137.20 µs]
sse_random_long_u16     time:   [18.024 µs 18.030 µs 18.039 µs]
impl_random_long_u16    time:   [18.033 µs 18.035 µs 18.039 µs]

scalar_random_long_u32  time:   [135.71 µs 135.74 µs 135.77 µs]
sse_random_long_u32     time:   [34.161 µs 34.168 µs 34.178 µs]
impl_random_long_u32    time:   [34.186 µs 34.211 µs 34.243 µs]

scalar_random_long_u64  time:   [135.74 µs 135.78 µs 135.83 µs]
sse_random_long_u64     time:   [175.82 µs 175.94 µs 176.06 µs]
impl_random_long_u64    time:   [136.36 µs 136.47 µs 136.59 µs]



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

## ARM

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

scalar_random_long_f16  time:   [856.06 µs 856.49 µs 857.19 µs]
neon_random_long_f16    time:   [152.54 µs 152.78 µs 153.13 µs]
impl_random_long_f16    time:   [152.75 µs 152.77 µs 152.78 µs]

scalar_random_long_f32  time:   [774.68 µs 774.79 µs 774.91 µs]
neon_random_long_f32    time:   [238.36 µs 238.47 µs 238.59 µs]
impl_random_long_f32    time:   [238.42 µs 238.52 µs 238.63 µs]

scalar_random_long_f64  time:   [730.39 µs 731.08 µs 731.79 µs]
impl_random_long_f64    time:   [724.10 µs 724.88 µs 725.96 µs]

scalar_random_long_i8   time:   [686.84 µs 686.92 µs 687.05 µs]
neon_random_long_i8     time:   [109.04 µs 109.05 µs 109.07 µs]
impl_random_long_i8     time:   [109.78 µs 109.80 µs 109.83 µs]

scalar_random_long_i16  time:   [684.85 µs 684.96 µs 685.09 µs]
neon_random_long_i16    time:   [109.43 µs 109.44 µs 109.44 µs]
impl_random_long_i16    time:   [109.47 µs 109.47 µs 109.48 µs]

scalar_random_long_i32  time:   [518.15 µs 518.23 µs 518.31 µs]
neon_random_long_i32    time:   [219.98 µs 220.06 µs 220.15 µs]
impl_random_long_i32    time:   [220.73 µs 220.85 µs 220.98 µs]

scalar_random_long_i64  time:   [1.1524 ms 1.1528 ms 1.1533 ms]
impl_random_long_i64    time:   [1.1579 ms 1.1585 ms 1.1591 ms]

scalar_random_long_u8   time:   [684.81 µs 685.16 µs 685.59 µs]
neon_random_long_u8     time:   [84.226 µs 84.251 µs 84.281 µs] -> veel sneller dan i8
impl_random_long_u8     time:   [84.289 µs 84.322 µs 84.358 µs]

scalar_random_long_u16  time:   [684.95 µs 685.06 µs 685.20 µs]
neon_random_long_u16    time:   [109.43 µs 109.44 µs 109.45 µs]
impl_random_long_u16    time:   [109.46 µs 109.55 µs 109.68 µs]

scalar_random_long_u32  time:   [516.09 µs 516.21 µs 516.37 µs]
neon_random_long_u32    time:   [219.10 µs 219.17 µs 219.25 µs]
impl_random_long_u32    time:   [219.94 µs 220.04 µs 220.15 µs]

scalar_random_long_u64  time:   [1.1530 ms 1.1536 ms 1.1545 ms]
impl_random_long_u64    time:   [1.1584 ms 1.1589 ms 1.1594 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.69 µs 343.69 µs 343.70 µs]
neon_random_long_f16    time:   [103.74 µs 103.75 µs 103.76 µs]
impl_random_long_f16    time:   [103.74 µs 103.77 µs 103.79 µs]

scalar_random_long_f32  time:   [209.51 µs 209.58 µs 209.68 µs]
neon_random_long_f32    time:   [123.82 µs 123.86 µs 123.92 µs]
impl_random_long_f32    time:   [123.77 µs 123.78 µs 123.79 µs]

scalar_random_long_f64  time:   [235.43 µs 235.62 µs 235.81 µs]
impl_random_long_f64    time:   [234.65 µs 234.84 µs 235.02 µs]

scalar_random_long_i8   time:   [274.63 µs 274.72 µs 274.82 µs]
neon_random_long_i8     time:   [55.462 µs 55.468 µs 55.474 µs]
impl_random_long_i8     time:   [55.427 µs 55.430 µs 55.435 µs]

scalar_random_long_i16  time:   [274.90 µs 274.91 µs 274.93 µs]
neon_random_long_i16    time:   [56.789 µs 57.197 µs 57.602 µs]
impl_random_long_i16    time:   [56.117 µs 56.226 µs 56.418 µs]

scalar_random_long_i32  time:   [242.36 µs 242.39 µs 242.43 µs]
neon_random_long_i32    time:   [105.91 µs 106.64 µs 107.57 µs]
impl_random_long_i32    time:   [105.79 µs 105.82 µs 105.86 µs]

scalar_random_long_i64  time:   [269.94 µs 270.18 µs 270.44 µs]
impl_random_long_i64    time:   [271.51 µs 271.77 µs 272.02 µs]

scalar_random_long_u8   time:   [274.42 µs 274.44 µs 274.46 µs]
neon_random_long_u8     time:   [39.475 µs 39.478 µs 39.481 µs]
impl_random_long_u8     time:   [39.464 µs 39.467 µs 39.470 µs]

scalar_random_long_u16  time:   [274.91 µs 274.95 µs 274.98 µs]
neon_random_long_u16    time:   [55.675 µs 55.756 µs 55.859 µs]
impl_random_long_u16    time:   [55.585 µs 55.598 µs 55.615 µs]

scalar_random_long_u32  time:   [242.77 µs 242.82 µs 242.88 µs]
neon_random_long_u32    time:   [106.25 µs 106.34 µs 106.45 µs]
impl_random_long_u32    time:   [106.13 µs 106.19 µs 106.26 µs]

scalar_random_long_u64  time:   [266.90 µs 267.18 µs 267.48 µs]
impl_random_long_u64    time:   [267.67 µs 267.87 µs 268.07 µ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
