From 8b72eedc76f46b978843344f92605acb4ee4061a Mon Sep 17 00:00:00 2001 From: daurnimator Date: Sat, 28 Dec 2019 14:23:27 +1100 Subject: [PATCH] std: add warm up phase to benchmark In my tests, whatever ran first was getting much better numbers. Additionally, add alignment requirements so that comparison is fair. --- lib/std/unicode/throughput_test.zig | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/std/unicode/throughput_test.zig b/lib/std/unicode/throughput_test.zig index a9a211d24a..922c25ebc6 100644 --- a/lib/std/unicode/throughput_test.zig +++ b/lib/std/unicode/throughput_test.zig @@ -6,18 +6,23 @@ pub fn main() !void { const args = try std.process.argsAlloc(std.heap.page_allocator); + // Warm up runs + var buffer0: [32767]u16 align(4096) = undefined; + _ = try std.unicode.utf8ToUtf16Le(&buffer0, args[1]); + _ = try std.unicode.utf8ToUtf16Le_better(&buffer0, args[1]); + @fence(.SeqCst); var timer = try std.time.Timer.start(); @fence(.SeqCst); - var buffer1: [32767]u16 = undefined; + var buffer1: [32767]u16 align(4096) = undefined; _ = try std.unicode.utf8ToUtf16Le(&buffer1, args[1]); @fence(.SeqCst); const elapsed_ns_orig = timer.lap(); @fence(.SeqCst); - var buffer2: [32767]u16 = undefined; + var buffer2: [32767] u16 align(4096) = undefined; _ = try std.unicode.utf8ToUtf16Le_better(&buffer2, args[1]); @fence(.SeqCst);