Re:C++ still isn't cutting it
by tptacek on Sunday October 18, 2020 @04:45PM
(#24820998)
Oh, no, you don't sound critical at all. I'm making fun of myself. Thank you for actually reading it!
[ Parent
| on HN ]
Cool. You could probably simultaneously speed it up and simplify it by changing from linked list collision to open addressing with linear probes (but you may need a larger TSZ). Besides being more cache friendly for larger files, at the end you can then just qsort your table instead of first building a flat copy. :-) You could also use the unreduced hash value as a comparison prefix (only calling strcmp on different values). But it's not bad for potato code. ;-)
I didn't do open addressing because I didn't want to write code to resize the whole table. :)
I thought about also keeping the top 10 as I go instead of copying the whole table. But I'm guessing that virtually all the time this program spends is in I/O.
I kind of suspected that might be the reason..but you do still have a scalability problem for very large vocabularies. :-)
I just did a profile and saw about 15% in strcmp in the hot cache run, but sure if it's not in RAM then IO is likely the bottleneck.