Mild neglect of duty continues here in favor of performance evaluation, which I was discussing in my previous post. Here are a couple more useful things I found:
- Using fgetc_unlocked() cut my processing time by 25% parsing a 120MB proof.
- Using a raw C array of characters instead of an STL string to hold the current token cut another 25%.
These two simple changes have got my times down on a 1GB proof to 45s user time, which I am quite happy with. Watching what is happening using “top”, CPU utilization is around 50% parsing this proof, which I interpret to mean that the process is IO-bound now. So on my laptop, at any rate, I’m reaching the limit of how quickly I can tear through this big proof on disk.
As I noted in comments to the previous post, pulling in bigger chunks of text from disk using either fread() or mmap() does not improve on fgetc().
Hope everyone is having a pleasant and/or productive weekend.