Skip to content

Commit 4540545

Browse files
TocarIPcopybara-github
authored andcommitted
Add more probe benchmarks
absl:hash has different code for length 17-32, 33-64 and 65+ Benchamrk the probe length for all of them. PiperOrigin-RevId: 748457316 Change-Id: I184be48e207ea1c37314a4acda2600dfbf3a8698
1 parent 3f242f2 commit 4540545

File tree

1 file changed

+50
-19
lines changed

1 file changed

+50
-19
lines changed

absl/container/internal/raw_hash_set_probe_benchmark.cc

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,28 @@ struct PtrIdentity {
245245
}
246246
};
247247

248-
constexpr char kStringFormat[] = "/path/to/file/name-%07d-of-9999999.txt";
248+
enum class StringSize { kSmall, kMedium, kLarge, kExtraLarge };
249+
constexpr char kStringFormat[] = "%s/name-%07d-of-9999999.txt";
249250

250-
template <bool small>
251+
template <StringSize size>
251252
struct String {
252253
std::string value;
253254
static std::string Make(uint32_t v) {
254-
return {small ? absl::StrCat(v) : absl::StrFormat(kStringFormat, v)};
255+
switch (size) {
256+
case StringSize::kSmall:
257+
return absl::StrCat(v);
258+
case StringSize::kMedium: // < 32 bytes
259+
return absl::StrFormat(kStringFormat, "/path", v);
260+
case StringSize::kLarge: // 33-64 bytes
261+
return absl::StrFormat(kStringFormat, "/path/to/file", v);
262+
case StringSize::kExtraLarge: // > 64 bytes
263+
return absl::StrFormat(kStringFormat,
264+
"/path/to/a/very/long/file/name/so/that/total/"
265+
"length/is/larger/than/64/bytes",
266+
v);
267+
default:
268+
return "";
269+
}
255270
}
256271
};
257272

@@ -285,10 +300,9 @@ struct Sequential<Ptr<Align>*> {
285300
mutable uintptr_t current = PointerForAlignment<Align>();
286301
};
287302

288-
289-
template <bool small>
290-
struct Sequential<String<small>> {
291-
std::string operator()() const { return String<small>::Make(current++); }
303+
template <StringSize size>
304+
struct Sequential<String<size>> {
305+
std::string operator()() const { return String<size>::Make(current++); }
292306
mutable uint32_t current = 0;
293307
};
294308

@@ -389,10 +403,10 @@ struct Random<PtrIdentity<Align>, Dist> {
389403
}
390404
};
391405

392-
template <class Dist, bool small>
393-
struct Random<String<small>, Dist> {
406+
template <class Dist, StringSize size>
407+
struct Random<String<size>, Dist> {
394408
std::string operator()() const {
395-
return String<small>::Make(Random<uint32_t, Dist>{}());
409+
return String<size>::Make(Random<uint32_t, Dist>{}());
396410
}
397411
};
398412

@@ -421,9 +435,20 @@ std::string Name(PtrIdentity<Align>*) {
421435
return absl::StrCat("PtrIdentity", Align);
422436
}
423437

424-
template <bool small>
425-
std::string Name(String<small>*) {
426-
return small ? "StrS" : "StrL";
438+
template <StringSize size>
439+
std::string Name(String<size>*) {
440+
switch (size) {
441+
case StringSize::kSmall:
442+
return "StrS";
443+
case StringSize::kMedium:
444+
return "StrM";
445+
case StringSize::kLarge:
446+
return "StrL";
447+
case StringSize::kExtraLarge:
448+
return "StrXL";
449+
default:
450+
return "";
451+
}
427452
}
428453

429454
template <class T, class U>
@@ -543,12 +568,18 @@ int main(int argc, char** argv) {
543568
RunForType<PtrIdentity<32>>(results);
544569
RunForType<PtrIdentity<64>>(results);
545570
RunForType<std::pair<uint32_t, uint32_t>>(results);
546-
RunForType<String<true>>(results);
547-
RunForType<String<false>>(results);
548-
RunForType<std::pair<uint64_t, String<true>>>(results);
549-
RunForType<std::pair<String<true>, uint64_t>>(results);
550-
RunForType<std::pair<uint64_t, String<false>>>(results);
551-
RunForType<std::pair<String<false>, uint64_t>>(results);
571+
RunForType<String<StringSize::kSmall>>(results);
572+
RunForType<String<StringSize::kMedium>>(results);
573+
RunForType<String<StringSize::kLarge>>(results);
574+
RunForType<String<StringSize::kExtraLarge>>(results);
575+
RunForType<std::pair<uint64_t, String<StringSize::kSmall>>>(results);
576+
RunForType<std::pair<String<StringSize::kSmall>, uint64_t>>(results);
577+
RunForType<std::pair<uint64_t, String<StringSize::kMedium>>>(results);
578+
RunForType<std::pair<String<StringSize::kMedium>, uint64_t>>(results);
579+
RunForType<std::pair<uint64_t, String<StringSize::kLarge>>>(results);
580+
RunForType<std::pair<String<StringSize::kLarge>, uint64_t>>(results);
581+
RunForType<std::pair<uint64_t, String<StringSize::kExtraLarge>>>(results);
582+
RunForType<std::pair<String<StringSize::kExtraLarge>, uint64_t>>(results);
552583

553584
switch (output()) {
554585
case OutputStyle::kRegular:

0 commit comments

Comments
 (0)