## x86_64 (aka x64)

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

scalar_random_long_f16  time:   [56.964 µs 56.982 µs 57.002 µs]
sse_random_long_f16     time:   [9.7804 µs 9.7853 µs 9.7907 µs]
avx2_random_long_f16    time:   [6.8826 µs 6.8853 µs 6.8883 µs]
avx512_random_long_f16  time:   [3.5852 µs 3.5888 µs 3.5961 µs]
impl_random_long_f16    time:   [3.5840 µs 3.5857 µs 3.5880 µs]

scalar_random_long_f32  time:   [55.163 µs 55.549 µs 55.954 µs]
sse_random_long_f32     time:   [33.946 µs 33.954 µs 33.963 µs]
avx_random_long_f32     time:   [21.982 µs 21.993 µs 22.006 µs] -> 0.9 µs slower than in v0.3
avx512_random_long_f32  time:   [7.1369 µs 7.1460 µs 7.1645 µs]
impl_random_long_f32    time:   [6.9732 µs 6.9749 µs 6.9766 µs]

scalar_random_long_f64  time:   [54.277 µs 54.308 µs 54.342 µs]
sse_random_long_f64     time:   [67.902 µs 67.936 µs 67.975 µs]
avx_random_long_f64     time:   [44.129 µs 44.158 µs 44.198 µs] -> 1.6 µs slower than in v0.3
avx512_random_long_f64  time:   [13.925 µs 13.929 µs 13.934 µs]
impl_random_long_f64    time:   [14.513 µs 14.531 µs 14.566 µs]

scalar_random_long_i8   time:   [57.835 µs 57.850 µs 57.866 µs]
sse_random_long_i8      time:   [6.7793 µs 6.7829 µs 6.7871 µs]
avx2_random_long_i8     time:   [8.0644 µs 8.0676 µs 8.0716 µs]
avx512_random_long_i8   time:   [10.488 µs 10.491 µs 10.495 µs]
impl_random_long_i8     time:   [6.7178 µs 6.7196 µs 6.7216 µs]

scalar_random_long_i16  time:   [43.949 µs 43.966 µs 43.985 µs]
sse_random_long_i16     time:   [6.9836 µs 6.9870 µs 6.9908 µs]
avx2_random_long_i16    time:   [4.8356 µs 4.8469 µs 4.8634 µs]
avx512_random_long_i16  time:   [2.8929 µs 2.8936 µs 2.8943 µs]
impl_random_long_i16    time:   [2.8790 µs 2.8801 µs 2.8811 µs]

scalar_random_long_i32  time:   [44.029 µs 44.043 µs 44.057 µs]
sse_random_long_i32     time:   [15.052 µs 15.084 µs 15.122 µs]
avx2_random_long_i32    time:   [10.294 µs 10.302 µs 10.309 µs] -> 1 µs slower than in v0.3
avx512_random_long_i32  time:   [5.6646 µs 5.6669 µs 5.6694 µs]
impl_random_long_i32    time:   [5.5716 µs 5.5731 µs 5.5749 µs]

scalar_random_long_i64  time:   [43.993 µs 44.043 µs 44.131 µs]
sse_random_long_i64     time:   [43.855 µs 43.882 µs 43.912 µs]
avx2_random_long_i64    time:   [34.325 µs 34.357 µs 34.409 µs]
avx512_random_long_i64  time:   [12.445 µs 12.451 µs 12.457 µs] -> 0.3 µs slower than in v0.3
impl_random_long_i64    time:   [12.726 µs 12.732 µs 12.738 µs]

scalar_random_long_u8   time:   [76.127 µs 76.177 µs 76.232 µs]
sse_random_long_u8      time:   [6.9449 µs 6.9483 µs 6.9523 µs] -> 0.2 µs slower than in v0.3
avx2_random_long_u8     time:   [8.3278 µs 8.3308 µs 8.3342 µs]
avx512_random_long_u8   time:   [11.481 µs 11.484 µs 11.489 µs]
impl_random_long_u8     time:   [6.9655 µs 6.9675 µs 6.9697 µs]

scalar_random_long_u16  time:   [73.600 µs 73.620 µs 73.641 µs]
sse_random_long_u16     time:   [8.2592 µs 8.2628 µs 8.2666 µs]
avx2_random_long_u16    time:   [5.6246 µs 5.6263 µs 5.6281 µs]
avx512_random_long_u16  time:   [3.1554 µs 3.1564 µs 3.1575 µs]
impl_random_long_u16    time:   [3.2809 µs 3.2830 µs 3.2853 µs]

scalar_random_long_u32  time:   [71.223 µs 71.301 µs 71.427 µs]
sse_random_long_u32     time:   [16.658 µs 16.664 µs 16.672 µs]
avx2_random_long_u32    time:   [11.102 µs 11.106 µs 11.110 µs] -> 0.2 µs slower than in v0.3
avx512_random_long_u32  time:   [6.4330 µs 6.4352 µs 6.4378 µs]
impl_random_long_u32    time:   [6.4376 µs 6.4392 µs 6.4410 µs]

scalar_random_long_u64  time:   [73.112 µs 73.162 µs 73.231 µs]
sse_random_long_u64     time:   [43.746 µs 43.773 µs 43.808 µs]
avx2_random_long_u64    time:   [35.238 µs 35.255 µs 35.272 µs]
avx512_random_long_u64  time:   [12.978 µs 12.981 µs 12.984 µs] -> 0.2 µs slower than in v0.3
impl_random_long_u64    time:   [12.630 µs 12.635 µs 12.640 µs]
             
----

### Laptop: AMD Ryzen 7 4800U with Radeon Graphics (16) 

scalar_random_long_f16  time:   [97.575 µs 97.594 µs 97.616 µs]
sse_random_long_f16     time:   [12.110 µs 12.112 µs 12.114 µs]
avx2_random_long_f16    time:   [4.5393 µs 4.5401 µs 4.5411 µs]
impl_random_long_f16    time:   [4.6007 µs 4.6024 µs 4.6044 µs]

scalar_random_long_f32  time:   [64.929 µs 65.058 µs 65.199 µs]
sse_random_long_f32     time:   [21.726 µs 21.734 µs 21.742 µs]
avx_random_long_f32     time:   [11.299 µs 11.313 µs 11.328 µs]
impl_random_long_f32    time:   [11.179 µs 11.186 µs 11.194 µs]

scalar_random_long_f64  time:   [66.821 µs 66.831 µs 66.842 µs]
sse_random_long_f64     time:   [43.343 µs 43.348 µs 43.354 µs]
avx_random_long_f64     time:   [22.426 µs 22.435 µs 22.446 µs]
impl_random_long_f64    time:   [22.826 µs 22.857 µs 22.882 µs]

scalar_random_long_i8   time:   [76.853 µs 76.858 µs 76.863 µs]
sse_random_long_i8      time:   [7.3147 µs 7.3176 µs 7.3208 µs]
avx2_random_long_i8     time:   [7.1428 µs 7.1447 µs 7.1470 µs]
impl_random_long_i8     time:   [7.2917 µs 7.2931 µs 7.2947 µs]

scalar_random_long_i16  time:   [74.008 µs 74.039 µs 74.067 µs]
sse_random_long_i16     time:   [9.0729 µs 9.0754 µs 9.0785 µs]
avx2_random_long_i16    time:   [4.3838 µs 4.3840 µs 4.3843 µs]
impl_random_long_i16    time:   [4.4607 µs 4.4617 µs 4.4628 µs]

scalar_random_long_i32  time:   [74.088 µs 74.101 µs 74.112 µs]
sse_random_long_i32     time:   [19.107 µs 19.140 µs 19.186 µs]
avx2_random_long_i32    time:   [9.6628 µs 9.6715 µs 9.6802 µs]
impl_random_long_i32    time:   [9.7907 µs 9.7953 µs 9.8015 µs]

scalar_random_long_i64  time:   [74.100 µs 74.110 µs 74.120 µs]
sse_random_long_i64     time:   [56.223 µs 56.240 µs 56.256 µs]
avx2_random_long_i64    time:   [29.174 µs 29.181 µs 29.188 µs]
impl_random_long_i64    time:   [29.297 µs 29.317 µs 29.339 µs]

scalar_random_long_u8   time:   [76.879 µs 76.939 µs 77.048 µs]
sse_random_long_u8      time:   [7.5047 µs 7.5064 µs 7.5084 µs]
avx2_random_long_u8     time:   [7.6447 µs 7.6474 µs 7.6508 µs]
impl_random_long_u8     time:   [7.5273 µs 7.5281 µs 7.5289 µs]

scalar_random_long_u16  time:   [74.095 µs 74.126 µs 74.166 µs]
sse_random_long_u16     time:   [10.071 µs 10.074 µs 10.077 µs]
avx2_random_long_u16    time:   [4.4076 µs 4.4089 µs 4.4102 µs]
impl_random_long_u16    time:   [4.4598 µs 4.4609 µs 4.4619 µs]

scalar_random_long_u32  time:   [74.087 µs 74.094 µs 74.101 µs]
sse_random_long_u32     time:   [21.125 µs 21.143 µs 21.167 µs]
avx2_random_long_u32    time:   [9.6254 µs 9.6265 µs 9.6277 µs]
impl_random_long_u32    time:   [9.6366 µs 9.6407 µs 9.6452 µs]

scalar_random_long_u64  time:   [74.109 µs 74.233 µs 74.482 µs]
sse_random_long_u64     time:   [57.282 µs 57.294 µs 57.308 µs]
avx2_random_long_u64    time:   [31.070 µs 31.078 µs 31.087 µs]
impl_random_long_u64    time:   [31.153 µs 31.163 µs 31.174 µs]


----

### Desktop: AMD Ryzen 5 2600X (12) @ 3.700GHz

scalar_random_long_f16  time:   [113.74 µs 113.87 µs 114.05 µs]
sse_random_long_f16     time:   [13.988 µs 13.997 µs 14.006 µs]
avx2_random_long_f16    time:   [10.417 µs 10.419 µs 10.420 µs]
impl_random_long_f16    time:   [10.425 µs 10.435 µs 10.452 µs]

scalar_random_long_f32  time:   [80.483 µs 80.729 µs 81.068 µs]
sse_random_long_f32     time:   [25.333 µs 25.338 µs 25.344 µs]  -> 4% slower :/
avx_random_long_f32     time:   [20.865 µs 20.891 µs 20.937 µs]
impl_random_long_f32    time:   [20.870 µs 20.871 µs 20.873 µs]

scalar_random_long_f64  time:   [77.392 µs 77.933 µs 78.568 µs]
sse_random_long_f64     time:   [48.641 µs 49.172 µs 49.610 µs]
avx_random_long_f64     time:   [41.826 µs 41.829 µs 41.833 µs]
impl_random_long_f64    time:   [41.706 µs 41.708 µs 41.710 µs]

scalar_random_long_i8   time:   [90.492 µs 90.500 µs 90.509 µs]
sse_random_long_i8      time:   [8.4390 µs 8.4393 µs 8.4396 µs]
avx2_random_long_i8     time:   [11.003 µs 11.005 µs 11.008 µs]
impl_random_long_i8     time:   [8.4412 µs 8.4435 µs 8.4464 µs]

scalar_random_long_i16  time:   [87.047 µs 87.054 µs 87.063 µs]
sse_random_long_i16     time:   [10.448 µs 10.449 µs 10.450 µs]
avx2_random_long_i16    time:   [9.9379 µs 9.9429 µs 9.9533 µs]
impl_random_long_i16    time:   [9.9448 µs 9.9465 µs 9.9484 µs]

scalar_random_long_i32  time:   [87.079 µs 87.101 µs 87.139 µs]
sse_random_long_i32     time:   [21.441 µs 21.468 µs 21.507 µs]
avx2_random_long_i32    time:   [20.696 µs 20.700 µs 20.704 µs] -> 4% slower :/
impl_random_long_i32    time:   [20.658 µs 20.662 µs 20.666 µs]

scalar_random_long_i64  time:   [87.085 µs 87.115 µs 87.173 µs]
sse_random_long_i64     time:   [63.849 µs 63.894 µs 63.949 µs]
avx2_random_long_i64    time:   [57.409 µs 57.412 µs 57.414 µs] -> 2% slower :/
impl_random_long_i64    time:   [59.065 µs 59.107 µs 59.141 µs]

scalar_random_long_u8   time:   [90.509 µs 90.515 µs 90.524 µs]
sse_random_long_u8      time:   [8.6899 µs 8.6940 µs 8.7014 µs]
avx2_random_long_u8     time:   [11.572 µs 11.615 µs 11.668 µs]
impl_random_long_u8     time:   [8.6910 µs 8.7007 µs 8.7147 µs]

scalar_random_long_u16  time:   [87.022 µs 87.080 µs 87.197 µs]
sse_random_long_u16     time:   [11.628 µs 11.631 µs 11.634 µs]
avx2_random_long_u16    time:   [10.090 µs 10.091 µs 10.092 µs]
impl_random_long_u16    time:   [10.097 µs 10.109 µs 10.126 µs]

scalar_random_long_u32  time:   [86.970 µs 86.973 µs 86.976 µs]
sse_random_long_u32     time:   [24.306 µs 24.309 µs 24.313 µs]
avx2_random_long_u32    time:   [20.738 µs 20.740 µs 20.743 µs]
impl_random_long_u32    time:   [20.882 µs 20.908 µs 20.934 µs]

scalar_random_long_u64  time:   [87.093 µs 87.227 µs 87.439 µs]
sse_random_long_u64     time:   [66.340 µs 66.355 µs 66.369 µs] -> 4% slower :/
avx2_random_long_u64    time:   [57.450 µs 57.494 µs 57.580 µs] -> 4% slower :/
impl_random_long_u64    time:   [57.438 µs 57.442 µs 57.447 µs]


----

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

scalar_random_long_f16  time:   [123.37 µs 123.45 µs 123.53 µs]
sse_random_long_f16     time:   [19.923 µs 19.937 µs 19.951 µs]
impl_random_long_f16    time:   [19.922 µs 19.939 µs 19.961 µs]

scalar_random_long_f32  time:   [86.502 µs 86.544 µs 86.588 µs]
sse_random_long_f32     time:   [41.074 µs 41.109 µs 41.148 µs]
avx_random_long_f32     time:   [23.068 µs 23.090 µs 23.115 µs]
impl_random_long_f32    time:   [23.050 µs 23.066 µs 23.083 µs]

scalar_random_long_f64  time:   [83.305 µs 83.329 µs 83.356 µs]
sse_random_long_f64     time:   [82.074 µs 82.131 µs 82.195 µs]
avx_random_long_f64     time:   [48.093 µs 48.124 µs 48.156 µs]
impl_random_long_f64    time:   [48.065 µs 48.102 µs 48.142 µs]

scalar_random_long_i8   time:   [107.17 µs 107.21 µs 107.25 µs]
sse_random_long_i8      time:   [12.941 µs 12.952 µs 12.967 µs]
impl_random_long_i8     time:   [13.414 µs 13.422 µs 13.430 µs]

scalar_random_long_i16  time:   [95.040 µs 95.083 µs 95.130 µs]
sse_random_long_i16     time:   [18.018 µs 18.030 µs 18.048 µs]
impl_random_long_i16    time:   [18.035 µs 18.050 µs 18.067 µs]

scalar_random_long_i32  time:   [95.842 µs 95.958 µs 96.110 µs]
sse_random_long_i32     time:   [31.485 µs 31.541 µs 31.627 µs]
impl_random_long_i32    time:   [31.485 µs 31.502 µs 31.521 µs]

scalar_random_long_i64  time:   [98.152 µs 98.203 µs 98.257 µs]
sse_random_long_i64     time:   [140.90 µs 140.98 µs 141.07 µs]
impl_random_long_i64    time:   [95.483 µs 95.583 µs 95.699 µs]

scalar_random_long_u8   time:   [130.25 µs 130.35 µs 130.48 µs]
sse_random_long_u8      time:   [14.234 µs 14.240 µs 14.247 µs]
impl_random_long_u8     time:   [14.227 µs 14.235 µs 14.247 µs]

scalar_random_long_u16  time:   [123.50 µs 123.56 µs 123.63 µs]
sse_random_long_u16     time:   [18.037 µs 18.060 µs 18.085 µs]
impl_random_long_u16    time:   [18.034 µs 18.047 µs 18.063 µs]

scalar_random_long_u32  time:   [123.53 µs 123.64 µs 123.82 µs]
sse_random_long_u32     time:   [34.199 µs 34.215 µs 34.234 µs]
impl_random_long_u32    time:   [34.214 µs 34.228 µs 34.243 µs]

scalar_random_long_u64  time:   [124.06 µs 124.12 µs 124.18 µs]
sse_random_long_u64     time:   [157.68 µs 157.79 µs 157.93 µs]
impl_random_long_u64    time:   [123.85 µs 123.92 µs 124.00 µs]



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

## ARM

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

scalar_random_long_f16  time:   [859.04 µs 859.19 µs 859.37 µs]
neon_random_long_f16    time:   [151.81 µs 151.83 µs 151.85 µs]
impl_random_long_f16    time:   [151.96 µs 151.97 µs 151.98 µs]

scalar_random_long_f32  time:   [777.10 µs 777.89 µs 779.02 µs]
neon_random_long_f32    time:   [241.57 µs 241.64 µs 241.73 µs]
impl_random_long_f32    time:   [240.85 µs 240.91 µs 240.97 µs]

scalar_random_long_f64  time:   [739.67 µs 741.79 µs 744.17 µs]
impl_random_long_f64    time:   [737.23 µs 738.48 µs 739.81 µs]

scalar_random_long_i8   time:   [769.29 µs 769.34 µs 769.39 µs]
neon_random_long_i8     time:   [173.85 µs 173.86 µs 173.88 µs] -> 55 µs slower than in v0.3
impl_random_long_i8     time:   [165.79 µs 165.83 µs 165.89 µs]

scalar_random_long_i16  time:   [684.77 µs 684.82 µs 684.88 µs]
neon_random_long_i16    time:   [109.25 µs 109.26 µs 109.28 µs]
impl_random_long_i16    time:   [109.30 µs 109.31 µs 109.33 µs]

scalar_random_long_i32  time:   [516.68 µs 516.85 µs 517.03 µs]
neon_random_long_i32    time:   [219.98 µs 220.05 µs 220.13 µs]
impl_random_long_i32    time:   [218.50 µs 218.53 µs 218.57 µs]

scalar_random_long_i64  time:   [1.1587 ms 1.1595 ms 1.1605 ms]
impl_random_long_i64    time:   [1.1515 ms 1.1518 ms 1.1521 ms]

scalar_random_long_u8   time:   [684.38 µs 684.42 µs 684.45 µs]
neon_random_long_u8     time:   [219.06 µs 219.11 µs 219.18 µs] -> 140 µs slower than in v0.3
impl_random_long_u8     time:   [202.72 µs 202.78 µs 202.84 µs]

scalar_random_long_u16  time:   [684.76 µs 684.81 µs 684.87 µs]
neon_random_long_u16    time:   [108.63 µs 108.77 µs 108.97 µs]
impl_random_long_u16    time:   [108.98 µs 109.00 µs 109.02 µs]

scalar_random_long_u32  time:   [516.86 µs 516.98 µs 517.12 µs]
neon_random_long_u32    time:   [220.06 µs 220.13 µs 220.20 µs]
impl_random_long_u32    time:   [220.07 µs 220.21 µs 220.44 µs]

scalar_random_long_u64  time:   [1.1534 ms 1.1538 ms 1.1542 ms]
impl_random_long_u64    time:   [1.1577 ms 1.1583 ms 1.1590 ms]


Remarks:
- TODO: v0.4 makes it a lot slower on ARM than v0.3.1...
- 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:   [344.33 µs 344.34 µs 344.36 µs]
neon_random_long_f16    time:   [103.79 µs 103.85 µs 103.90 µs]
impl_random_long_f16    time:   [103.73 µs 103.78 µs 103.82 µs]

scalar_random_long_f32  time:   [209.58 µs 209.63 µs 209.71 µs]
neon_random_long_f32    time:   [123.72 µs 123.74 µs 123.77 µs]
impl_random_long_f32    time:   [123.81 µs 123.85 µs 123.90 µs]

scalar_random_long_f64  time:   [240.64 µs 240.90 µs 241.16 µs]
impl_random_long_f64    time:   [241.56 µs 241.82 µs 242.07 µs]

scalar_random_long_i8   time:   [274.34 µs 274.35 µs 274.37 µs]
neon_random_long_i8     time:   [57.371 µs 57.378 µs 57.388 µs]
impl_random_long_i8     time:   [57.424 µs 57.429 µs 57.437 µs]

scalar_random_long_i16  time:   [275.30 µs 275.32 µs 275.35 µs]
neon_random_long_i16    time:   [56.070 µs 56.074 µs 56.080 µs]
impl_random_long_i16    time:   [56.066 µs 56.068 µs 56.069 µs]

scalar_random_long_i32  time:   [243.11 µs 243.14 µs 243.16 µs]
neon_random_long_i32    time:   [105.82 µs 105.90 µs 106.01 µs]
impl_random_long_i32    time:   [105.71 µs 105.74 µs 105.78 µs]

scalar_random_long_i64  time:   [272.29 µs 272.48 µs 272.66 µs]
impl_random_long_i64    time:   [272.01 µs 272.36 µs 272.70 µs]

scalar_random_long_u8   time:   [274.38 µs 274.39 µs 274.41 µs]
neon_random_long_u8     time:   [39.117 µs 39.120 µs 39.123 µs]
impl_random_long_u8     time:   [39.127 µs 39.127 µs 39.128 µs]

scalar_random_long_u16  time:   [275.37 µs 275.39 µs 275.41 µs]
neon_random_long_u16    time:   [54.349 µs 54.352 µs 54.356 µs]
impl_random_long_u16    time:   [54.342 µs 54.348 µs 54.357 µs]

scalar_random_long_u32  time:   [242.60 µs 242.61 µs 242.63 µs]
neon_random_long_u32    time:   [105.75 µs 105.78 µs 105.81 µs]
impl_random_long_u32    time:   [105.73 µs 105.73 µs 105.74 µs]

scalar_random_long_u64  time:   [274.47 µs 274.80 µs 275.11 µs]
impl_random_long_u64    time:   [273.64 µs 273.96 µs 274.28 µ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
