mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-27 19:09:47 +03:00
8b72eedc76
In my tests, whatever ran first was getting much better numbers. Additionally, add alignment requirements so that comparison is fair.
45 lines
1.3 KiB
Zig
45 lines
1.3 KiB
Zig
const builtin = @import("builtin");
|
|
const std = @import("std");
|
|
|
|
pub fn main() !void {
|
|
const stdout = &std.io.getStdOut().outStream().stream;
|
|
|
|
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 align(4096) = undefined;
|
|
_ = try std.unicode.utf8ToUtf16Le(&buffer1, args[1]);
|
|
|
|
@fence(.SeqCst);
|
|
const elapsed_ns_orig = timer.lap();
|
|
@fence(.SeqCst);
|
|
|
|
var buffer2: [32767] u16 align(4096) = undefined;
|
|
_ = try std.unicode.utf8ToUtf16Le_better(&buffer2, args[1]);
|
|
|
|
@fence(.SeqCst);
|
|
const elapsed_ns_better = timer.lap();
|
|
@fence(.SeqCst);
|
|
|
|
std.debug.warn("original utf8ToUtf16Le: elapsed: {} ns ({} ms)\n", .{
|
|
elapsed_ns_orig, elapsed_ns_orig / 1000000,
|
|
});
|
|
std.debug.warn("new utf8ToUtf16Le: elapsed: {} ns ({} ms)\n", .{
|
|
elapsed_ns_better, elapsed_ns_better / 1000000,
|
|
});
|
|
asm volatile ("nop"
|
|
:
|
|
: [a] "r" (&buffer1),
|
|
[b] "r" (&buffer2)
|
|
: "memory"
|
|
);
|
|
}
|