-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
I used this project to learn combinatorial optimization.
UPDATE: a better function was found in a below comment, the new best is now 0.10704308166917044
[16 21f0aaad 15 d35a2d97 15] = 0.10760229515479501
A metaheuristic was used with an estimate with len = 1 << 25
and constrained to be nearby other good functions (shifts [13, 19], muls popcnt [11, 19]). (Unfortunately I don't remember which metaheuristic I used for this). Finally an exhaustive exact search was applied nearby the best found. I verified the final bias with the hash-prospector
library itself.
I also used some explicit SIMD acceleration in the bias calculation along with the current multi threading. The hash itself handles 8 "seeds" at once and the counting is faster too.
SIMD counting pseudo code:
// 256/32=8 so splat the 32-bit flips and use a mask to grab them all at once
__m256i sequence = _mm256_set_epi32(0, 1, 2, 3, 4, 5, 6, 7);
__m256i mask = _mm256_sllv_epi32(_mm256_set1_epi8(1), sequence);
for (int i = 0; i < 8; ++i) {
__m256i splat = _mm256_set1_epi32(_mm256_extract_epi32(flips, i));
__m256i flipped = _mm256_cmpeq_epi8(_mm256_and_si256(splat, mask), mask);
byte_bins = _mm256_sub_epi8(byte_bins, flipped);
}
// accumulate intermediate byte bins to larger bins every 255 / 8
gzm55, camel-cdr, pablode and 0xfeeddeadbeef
Metadata
Metadata
Assignees
Labels
No labels