<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 10 January 2017 at 15:35, Francois Fayard via llvm-dev <span dir="ltr"><<a target="_blank" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span class="gmail-"><br>
> It is not clear what the test-case is (what source, what compiler options). My suspicion is that your differences are in the noise, and most of the time is spent doing other things than hashing. Did you profile the a run, and check how much of the total time is spent in the hash-function [you may need to tweak the code a bit to not inline the actual hash function]. Also publishing the RANGE for each set of tests, since the variation between "best and worst" may be more important than the overall best time.<br>
<br>
</span>I agree that I did not present a clear test case, which was just a random .cpp file that benchmarks different hash tables from LLVM/Google/STL compiled with -O3 option. I’ll try to make it better tomorrow, but I can assure you that it was not the noise. I have disabled turboboost and hyper-threading on my machine and ran the benchmark 10 times for every test and the difference was way larger than the observed standard deviation. But anyway, for the time being, the winner for hashing pointers is the current one from of LLVM.<br></blockquote><div><br></div><div>Yes, it seems to be "good". But it's always good to understand WHY.<br> <br></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<span class="gmail-"><br>
> Counting the number of collisions or some such would probably also help.<br>
<br>
</span>Yes, I could do that. If I want to report all the collision, I might do that in the destructor of DenseMap. Sorry for my ignorance, but is clang/llvm multithreaded? Is it safe to write to a file in a destructor for logging purposes?<br></blockquote><div><br></div><div>I don't think you can rely on that ALWAYS, but clang and LLVM doesn't spawn threads - someone may use two threads simultaneously to call into llvm and clang functionality as a library tho'. In a limited addition to the code to report something like `std::cout << "Number colliisions: " << NumCollisions << std::endl;` should be safe enough when using clang as the test [and opening a file in append mode should also be reasonably safe]. If you wanted to submit such a change as a patch, it would probably require a fair bit more work to guarantee threadsafety... [I have certainly done similar quick "print something" additions to Clang and LLVM, including in destructors]. <br></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<div class="gmail-HOEnZb"><div class="gmail-h5"><br>
François Fayard<br>
<br>
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a target="_blank" rel="noreferrer" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</div></div></blockquote></div><br></div></div>