1- //! Root file that benchmarks SIEVE cache eviction algorithm's performance.
2-
31const std = @import ("std" );
42const sieve = @import ("sieve.zig" );
53
@@ -10,15 +8,12 @@ const CACHE_CAPACITY: u64 = 68;
108const STD_DEV : f64 = MEAN / 3.0 ;
119
1210pub fn main () ! void {
13- var gpa = std .heap .GeneralPurposeAllocator (.{}){};
14- defer if (gpa .deinit () == .leak ) {
11+ var gpa_state = std .heap .DebugAllocator (.{}){};
12+ const gpa = gpa_state .allocator ();
13+ defer if (gpa_state .deinit () == .leak ) {
1514 @panic ("Memory leak has occurred!" );
1615 };
1716
18- var arena = std .heap .ArenaAllocator .init (gpa .allocator ());
19- const allocator = arena .allocator ();
20- defer arena .deinit ();
21-
2217 const std_out = std .io .getStdOut ();
2318 var buf_writer = std .io .bufferedWriter (std_out .writer ());
2419 const writer = buf_writer .writer ();
@@ -30,27 +25,24 @@ pub fn main() !void {
3025 });
3126 const random = prng .random ();
3227
33- var buf : [1024 ]u8 = undefined ;
28+ var buf : [512 ]u8 = undefined ;
3429 var fixed_buf = std .heap .FixedBufferAllocator .init (buf [0.. ]);
3530 const args = try std .process .argsAlloc (fixed_buf .allocator ());
3631
3732 switch (args [1 ][1 ]) {
38- 's' = > try benchmarkSequence (allocator , writer ),
39- 'c' = > try benchmarkComposite (allocator , random , writer ),
40- 'n' = > try benchmarkCompositeNormal (allocator , random , writer ),
33+ 's' = > try benchmarkSequence (gpa , writer ),
34+ 'c' = > try benchmarkComposite (gpa , random , writer ),
35+ 'n' = > try benchmarkCompositeNormal (gpa , random , writer ),
4136 else = > @panic ("Unknown benchmark!" ),
4237 }
4338
4439 try buf_writer .flush ();
4540}
4641
47- fn benchmarkSequence (
48- allocator : std.mem.Allocator ,
49- writer : anytype ,
50- ) ! void {
42+ fn benchmarkSequence (gpa : std.mem.Allocator , writer : anytype ) ! void {
5143 const Cache = sieve .Cache (u64 , u64 );
52- var cache = try Cache .init (allocator , CACHE_CAPACITY );
53- defer cache .deinit (allocator );
44+ var cache = try Cache .init (gpa , CACHE_CAPACITY );
45+ defer cache .deinit (gpa );
5446
5547 var timer = try std .time .Timer .start ();
5648 const start = timer .lap ();
@@ -60,7 +52,7 @@ fn benchmarkSequence(
6052 var i : u64 = 1 ;
6153 while (i < NUM_ITERS ) : (i += 1 ) {
6254 num = i % 100 ;
63- node = try allocator .create (Cache .Node );
55+ node = try gpa .create (Cache .Node );
6456 node .* = .{ .key = num , .value = num };
6557 _ = try cache .put (node );
6658 }
@@ -73,14 +65,10 @@ fn benchmarkSequence(
7365 try writer .print ("Sequence: {}\n " , .{std .fmt .fmtDuration (timer .read () - start )});
7466}
7567
76- fn benchmarkComposite (
77- allocator : std.mem.Allocator ,
78- random : std.Random ,
79- writer : anytype ,
80- ) ! void {
68+ fn benchmarkComposite (gpa : std.mem.Allocator , random : std.Random , writer : anytype ) ! void {
8169 const Cache = sieve .Cache (u64 , struct { [ARRAY_SIZE ]u8 , u64 });
82- var cache = try Cache .init (allocator , CACHE_CAPACITY );
83- defer cache .deinit (allocator );
70+ var cache = try Cache .init (gpa , CACHE_CAPACITY );
71+ defer cache .deinit (gpa );
8472
8573 var timer = try std .time .Timer .start ();
8674 const start = timer .lap ();
@@ -90,7 +78,7 @@ fn benchmarkComposite(
9078 var i : u64 = 1 ;
9179 while (i < NUM_ITERS ) : (i += 1 ) {
9280 num = random .uintLessThan (u64 , 100 );
93- node = try allocator .create (Cache .Node );
81+ node = try gpa .create (Cache .Node );
9482 node .* = .{ .key = num , .value = .{ [1 ]u8 {0 } ** ARRAY_SIZE , num } };
9583 _ = try cache .put (node );
9684 }
@@ -103,14 +91,10 @@ fn benchmarkComposite(
10391 try writer .print ("Composite: {}\n " , .{std .fmt .fmtDuration (timer .read () - start )});
10492}
10593
106- fn benchmarkCompositeNormal (
107- allocator : std.mem.Allocator ,
108- random : std.Random ,
109- writer : anytype ,
110- ) ! void {
94+ fn benchmarkCompositeNormal (gpa : std.mem.Allocator , random : std.Random , writer : anytype ) ! void {
11195 const Cache = sieve .Cache (u64 , struct { [ARRAY_SIZE ]u8 , u64 });
112- var cache = try Cache .init (allocator , @intFromFloat (STD_DEV ));
113- defer cache .deinit (allocator );
96+ var cache = try Cache .init (gpa , @intFromFloat (STD_DEV ));
97+ defer cache .deinit (gpa );
11498
11599 var timer = try std .time .Timer .start ();
116100 const start = timer .lap ();
@@ -121,7 +105,7 @@ fn benchmarkCompositeNormal(
121105 while (i < NUM_ITERS ) : (i += 1 ) {
122106 num = @intFromFloat (random .floatNorm (f64 ) * STD_DEV + MEAN );
123107 num %= 100 ;
124- node = try allocator .create (Cache .Node );
108+ node = try gpa .create (Cache .Node );
125109 node .* = .{ .key = num , .value = .{ [1 ]u8 {0 } ** ARRAY_SIZE , num } };
126110 _ = try cache .put (node );
127111 }
0 commit comments