<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<style type="text/css" style="display:none"><!-- p { margin-top: 0px; margin-bottom: 0px; }--></style>
</head>
<body dir="ltr" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>><span style="color: rgb(33, 33, 33); font-size: 12pt;">I don't believe that spending time on "tuning" shift2 value is a good idea because I doubt that that is theoretically meaningful. </span></p>
<p><span style="color: rgb(33, 33, 33); font-size: 12pt;">> If my understanding is correct, changing that value doesn't have any significant effects.</span></p>
<div style="color: rgb(33, 33, 33);">
<div>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div><br>
</div>
<div>It have effect. Setting to values >= 11 gives boost for llvm-check. Even given that results are varie a bit, </div>
<div>T<span style="font-size: 12pt;">i</span><span style="font-size: 12pt;">me(Shift2=6) is </span><span style="font-size: 12pt;">always noticable worse than Time(Shift2=11).</span></div>
<div><span style="font-size: 12pt;">It is not a calculation error, difference is stable.</span></div>
<div><br>
</div>
<div>I am not much in favor of tuning it too much, because anyways in linker we do not have information about all symbols that loader<br>
</div>
<div>will try to lookup. So I believe it is just impossible to find ideal .gnu_hash. But I would hardcode any value in [11,20] instead of 6 probably,<br>
</div>
<div>it is a free boost.<br>
</div>
<div><br>
</div>
<div>>The bloom filter for the .gnu.hash table is a two-bit bloom filter. To choose two bit locations, we compute one hash value H and create</div>
<div>>two hash values H1 and H2 in the following manner :Assume a 64-bit machine. Bits H[0,5] are always used for computing the</div>
<div>>first hash H1. Bits H[Shift2, Shift2 + 5] are used for computing the second hash H2.​<br>
</div>
<div>>As long as the hash function produces evenly distributed hash values, choosing bits [6, 11] isn't different from choosing other bits, say [15, 20]. </div>
<div>>No Shift2 greater than 5 should be better than any other Shift2 values in theory.</div>
<div>> </div>
<div>>Am I missing something?</div>
<div><br>
</div>
<div style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">
I think there is a mistake here. See, we have following code:<br>
</div>
<div style="color: rgb(33, 33, 33); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">
<div>Val |= uint64_t(1) << (Sym.Hash % C);</div>
<div>Val |= uint64_t(1) << ((Sym.Hash >> getShift2()) % C);</div>
<div><span style="white-space: pre;"></span></div>
<div>C == 64 for 64 bits, ot 2^6. It is simplified to:<br>
</div>
<div><span style="white-space: pre;"></span></div>
<div>Val |= uint64_t(1) << (Sym.Hash >> 6);</div>
<div>Val |= uint64_t(1) << (Sym.Hash >> (Shift2 + 6));</div>
<div><span style="white-space: pre;"></span></div>
<div>Or I believe bits H[6, 63] are used to find Bit 1 and H[6 + Shift2, 63] for Bit 2.​<br>
</div>
<div><br>
</div>
<div>George.<br>
</div>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</body>
</html>