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 }