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 }