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