lib/accy/src/kernel/library/random/squares/tuning.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const random = @import("../root.zig");
2 const profile = @import("profile.zig");
3 const types = @import("types.zig");
4
5 const base = random.base;
6 const std = base.std;
7 const entry = base.entry;
8 const tuning = base.tuning;
9
10 const Squares = types.Squares;
11 const squares_family_version = types.squares_family_version;
12 const squaresFamilyFingerprint = profile.squaresFamilyFingerprint;
13
14 pub fn squaresTuningExtents(instance: Squares) [1]u64 {
15 return .{instance.count};
16 }
17
18 pub fn squaresTuningOperation(instance: Squares) entry.Operation {
19 _ = instance;
20 return .{ .random = .squares };
21 }
22
23 pub fn squaresFamilyTuningKey(
24 backing_allocator: std.mem.Allocator,
25 device_fingerprint: u64,
26 instance: Squares,
27 ) !tuning.FamilyTuningKey {
28 const family_fingerprint = try squaresFamilyFingerprint(backing_allocator, instance);
29 const extents = squaresTuningExtents(instance);
30 return tuning.FamilyTuningKey.init(
31 device_fingerprint,
32 family_fingerprint,
33 entry.operationFingerprint(squaresTuningOperation(instance)),
34 instance.dtype,
35 squares_family_version,
36 extents[0..],
37 ) orelse unreachable;
38 }