@@ -2,18 +2,6 @@ const std = @import("std");
22const zbench = @import ("zbench" );
33const zla = @import ("zla" );
44
5- fn bubbleSort (nums : []i32 ) void {
6- var i : usize = nums .len - 1 ;
7- while (i > 0 ) : (i -= 1 ) {
8- var j : usize = 0 ;
9- while (j < i ) : (j += 1 ) {
10- if (nums [j ] > nums [j + 1 ]) {
11- std .mem .swap (i32 , & nums [j ], & nums [j + 1 ]);
12- }
13- }
14- }
15- }
16-
175fn benchmark_multiply (comptime size : usize ) type {
186 return struct {
197 const Matrix512 = zla .Mat (f32 , size , size );
@@ -39,9 +27,47 @@ fn benchmark_multiply(comptime size: usize) type {
3927 };
4028}
4129
42- fn myBenchmark (_ : std.mem.Allocator ) void {
43- var numbers = [_ ]i32 { 4 , 1 , 3 , 1 , 5 , 2 };
44- _ = bubbleSort (& numbers );
30+ fn bench_sin_cos_fused (comptime size : usize ) type {
31+ return struct {
32+ angles : @Vector (size , f32 ),
33+
34+ fn init () @This () {
35+ var val : [size ]f32 = undefined ;
36+ for (0.. size ) | k | {
37+ val [k ] = @as (f32 , @floatFromInt (k )) * 0.01 ;
38+ }
39+ return .{ .angles = val };
40+ }
41+
42+ pub fn run (self : @This (), _ : std .mem .Allocator ) void {
43+ std .mem .doNotOptimizeAway (@call (.never_inline , zla .vec .sin_cos , .{self .angles }));
44+ }
45+ };
46+ }
47+
48+ fn benchmark_sin_cos_system (comptime size : usize ) type {
49+ return struct {
50+ angles : [size ]f32 ,
51+
52+ fn init () @This () {
53+ var val : [size ]f32 = undefined ;
54+ for (0.. size ) | k | {
55+ val [k ] = @as (f32 , @floatFromInt (k )) * 0.01 ;
56+ }
57+ return .{ .angles = val };
58+ }
59+
60+ pub fn run (self : @This (), _ : std .mem .Allocator ) void {
61+ var sin_val : [size ]f32 = undefined ;
62+ var cos_val : [size ]f32 = undefined ;
63+ for (self .angles , 0.. ) | angle , i | {
64+ sin_val [i ] = std .math .sin (angle );
65+ cos_val [i ] = std .math .cos (angle );
66+ }
67+ std .mem .doNotOptimizeAway (sin_val );
68+ std .mem .doNotOptimizeAway (cos_val );
69+ }
70+ };
4571}
4672
4773pub fn main () ! void {
@@ -57,6 +83,12 @@ pub fn main() !void {
5783 try bench .addParam ("Multiple 512x512 matrix multiplication" , & benchmark_multiply (512 ).init (), .{
5884 .iterations = 256 ,
5985 });
86+ try bench .addParam ("Sin/Cos" , & benchmark_sin_cos_system (256 ).init (), .{
87+ .iterations = 256 ,
88+ });
89+ try bench .addParam ("Sin/Cos vectorized" , & bench_sin_cos_fused (256 ).init (), .{
90+ .iterations = 256 ,
91+ });
6092
6193 try writer .writeAll ("\n " );
6294 try bench .run (writer );
0 commit comments