lib/accy/src/kernel/library/random/threefry/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 Threefry = types.Threefry;
11 const threefry_family_version = types.threefry_family_version;
12 const threefryFamilyFingerprint = profile.threefryFamilyFingerprint;
13
14 pub fn threefryTuningExtents(instance: Threefry) [1]u64 {
15 return .{instance.count};
16 }
17
18 pub fn threefryTuningOperation(instance: Threefry) entry.Operation {
19 return .{ .random = .{ .threefry = instance.rounds } };
20 }
21
22 pub fn threefryFamilyTuningKey(
23 backing_allocator: std.mem.Allocator,
24 device_fingerprint: u64,
25 instance: Threefry,
26 ) !tuning.FamilyTuningKey {
27 const family_fingerprint = try threefryFamilyFingerprint(backing_allocator, instance);
28 const extents = threefryTuningExtents(instance);
29 return tuning.FamilyTuningKey.init(
30 device_fingerprint,
31 family_fingerprint,
32 entry.operationFingerprint(threefryTuningOperation(instance)),
33 instance.dtype,
34 threefry_family_version,
35 extents[0..],
36 ) orelse unreachable;
37 }