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 |
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).