Skip to content

Commit

Permalink
Avoid misaligned loads from StaticRandomData in the size [4, 8] hashi…
Browse files Browse the repository at this point in the history
…ng case. (#4743)

Avoid misaligned loads from StaticRandomData in the size [4, 8] hashing
case. We can use aligned loads in this case for lower latency. We
introduce the SampleAlignedRandomData function for this purpose.
  • Loading branch information
ezbr authored Dec 31, 2024
1 parent 4bbc189 commit 9d09061
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion common/hashing.h
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,14 @@ class Hasher {
return data;
}

// As above, but for small offsets, we can use aligned loads, which are
// faster. The offset must be in the range [0, 8).
static auto SampleAlignedRandomData(ssize_t offset) -> uint64_t {
CARBON_DCHECK(static_cast<size_t>(offset) <
sizeof(StaticRandomData) / sizeof(uint64_t));
return StaticRandomData[offset];
}

// Random data taken from the hexadecimal digits of Pi's fractional component,
// written in lexical order for convenience of reading. The resulting
// byte-stream will be different due to little-endian integers. These can be
Expand Down Expand Up @@ -950,7 +958,7 @@ inline auto Hasher::HashSizedBytes(llvm::ArrayRef<std::byte> bytes) -> void {
// Note that we don't drop to the `WeakMix` routine here because we want
// to use sampled random data to encode the size, which may not be as
// effective without the full 128-bit folded result.
buffer = Mix(data ^ buffer, SampleRandomData(size));
buffer = Mix(data ^ buffer, SampleAlignedRandomData(size - 1));
CARBON_MCA_END("dynamic-8b");
return;
}
Expand Down

0 comments on commit 9d09061

Please sign in to comment.