robot
robot copied to clipboard
Improve the hash rate of the Hash function
Currently, the Hash class has abysmal performance when compared to other CRC32 algorithms. Looking at our options here, here and here, it's clear that there's a lot of improvements which could be made. Read the table below to see how we compare (Ignore the differences in the result as the comparison uses the iSCSI/Castagnoli polynomial where as we use the Ethernet/ZIP one).
| Option | Result | Performance |
|---|---|---|
| Naive - CPP | 0xA0B96C51 | 147.0 MB/s = 0.29 bits/cycle |
| Tabular - 1 byte | 0xA0B96C51 | 556.6 MB/s = 1.11 bits/cycle |
| Robot - Hash | 0x1D75653D | 561.1 MB/s = 1.12 bits/cycle |
| Tabular - 2 bytes | 0xA0B96C51 | 795.3 MB/s = 1.59 bits/cycle |
| Hardware - 1 byte | 0xA0B96C51 | 1324.1 MB/s = 2.65 bits/cycle |
| Tabular - 4 bytes | 0xA0B96C51 | 1369.0 MB/s = 2.74 bits/cycle |
| Tabular - 8 bytes | 0xA0B96C51 | 2416.1 MB/s = 4.83 bits/cycle |
| Checksums - AWS | 0x1D75653D | 2682.3 MB/s = 5.36 bits/cycle |
| Tabular - 16 bytes | 0xA0B96C51 | 4011.5 MB/s = 8.02 bits/cycle |
| Hardware - 8 bytes | 0xA0B96C51 | 10538.0 MB/s = 21.08 bits/cycle |
| Golden - AMD | 0xA0B96C51 | 19564.9 MB/s = 39.13 bits/cycle |
| Golden - Intel | 0xA0B96C51 | 30507.4 MB/s = 61.01 bits/cycle |