tiny.accy.kernel.library.random
Defined in kernel.library.
API (199)
Actions
Public operations.
Feistel.domainBitsFeistel.halfBitsFeistel.seedHiFeistel.seedLoPhilox.generatorsPhilox.seedHiPhilox.seedLoPhiloxFold.seedHiPhiloxFold.seedLoPhiloxKeyCounterUniform.generatorsPhiloxKeySplit.generatorsPhiloxKeyUniform.generatorsSquares.generatorsSquares.keyHiSquares.keyLoSquaresFold.keyHiSquaresFold.keyLoThreefry.generatorsThreefry.seedHiThreefry.seedLoThreefryFold.seedHiThreefryFold.seedLocreateFeistelFamilyArtifactcreatePhiloxFamilyArtifactcreatePhiloxFoldFamilyArtifactcreatePhiloxKeyCounterUniformFamilyArtifactcreatePhiloxKeySplitFamilyArtifactcreatePhiloxKeyUniformFamilyArtifactcreateSquaresFamilyArtifactcreateSquaresFoldFamilyArtifactcreateThreefryFamilyArtifactcreateThreefryFoldFamilyArtifactfeistelDomainBitsfeistelFamilyEntryNamefeistelFamilyFingerprintfeistelFamilyTargetfeistelInstanceValidfeistelPermuteReferencefeistelRuntimeArgumentsfeistelShapeFamilyfeistelShapeProfileDimensionsfeistelThreadCandidatesForCountfeistelThreadsForCountphiloxBlockphiloxEntryphiloxFamilyEntryNamephiloxFamilyFingerprintphiloxFamilySpecializationphiloxFamilyTargetphiloxFamilyTuningKeyphiloxFoldBitsReferencephiloxFoldFamilyEntryNamephiloxFoldFamilyFingerprintphiloxFoldFamilyTargetphiloxFoldFamilyTuningKeyphiloxFoldRuntimeArgumentsphiloxFoldShapeProfileDimensionsphiloxFoldTuningExtentsphiloxFoldTuningOperationphiloxFoldUniformReferencephiloxInstanceEntryNamephiloxInstanceFromSpecializationphiloxInstanceTargetphiloxKeyCounterUniformFamilyEntryNamephiloxKeyCounterUniformFamilyFingerprintphiloxKeyCounterUniformFamilySpecializationphiloxKeyCounterUniformFamilyTargetphiloxKeyCounterUniformInstanceFromSpecializationphiloxKeyCounterUniformRuntimeArgumentsphiloxKeyCounterUniformShapeFamilyphiloxKeyCounterUniformShapeProfileDimensionsphiloxKeySplitFamilyEntryNamephiloxKeySplitFamilyFingerprintphiloxKeySplitFamilySpecializationphiloxKeySplitFamilyTargetphiloxKeySplitInstanceFromSpecializationphiloxKeySplitRuntimeArgumentsphiloxKeySplitShapeFamilyphiloxKeySplitShapeProfileDimensionsphiloxKeyUniformFamilyEntryNamephiloxKeyUniformFamilyFingerprintphiloxKeyUniformFamilySpecializationphiloxKeyUniformFamilyTargetphiloxKeyUniformInstanceFromSpecializationphiloxKeyUniformRuntimeArgumentsphiloxKeyUniformShapeFamilyphiloxKeyUniformShapeProfileDimensionsphiloxRuntimeArgumentsphiloxShapeFamilyphiloxShapeProfileDimensionsphiloxThreadCandidatesForCountphiloxThreadsForCountphiloxTuningExtentsphiloxTuningOperationrandomDTypeSupportedsquaresBlocksquaresFamilyEntryNamesquaresFamilyFingerprintsquaresFamilySpecializationsquaresFamilyTargetsquaresFamilyTuningKeysquaresFoldBitsReferencesquaresFoldFamilyEntryNamesquaresFoldFamilyFingerprintsquaresFoldFamilyTargetsquaresFoldFamilyTuningKeysquaresFoldRuntimeArgumentssquaresFoldShapeProfileDimensionssquaresFoldTuningExtentssquaresFoldTuningOperationsquaresFoldUniformReferencesquaresInstanceFromSpecializationsquaresRuntimeArgumentssquaresShapeFamilysquaresShapeProfileDimensionssquaresThreadCandidatesForCountsquaresThreadsForCountsquaresTuningExtentssquaresTuningOperationthreefryBlockthreefryEntrythreefryFamilyEntryNamethreefryFamilyFingerprintthreefryFamilySpecializationthreefryFamilyTargetthreefryFamilyTuningKeythreefryFoldBitsReferencethreefryFoldFamilyEntryNamethreefryFoldFamilyFingerprintthreefryFoldFamilyTargetthreefryFoldFamilyTuningKeythreefryFoldRuntimeArgumentsthreefryFoldShapeProfileDimensionsthreefryFoldTuningExtentsthreefryFoldTuningOperationthreefryFoldUniformReferencethreefryInstanceEntryNamethreefryInstanceFromSpecializationthreefryInstanceTargetthreefryRuntimeArgumentsthreefryShapeFamilythreefryShapeProfileDimensionsthreefryThreadCandidatesForCountthreefryThreadsForCountthreefryTuningExtentsthreefryTuningOperationuniformFromBits
Types and contracts
Public types and contracts.
FeistelFeistelRuntimeFamilyI32PhiloxPhilox8F32PhiloxFoldPhiloxFoldRuntimeFamilyF32PhiloxFoldRuntimeFamilyI32PhiloxKeyCounterUniformPhiloxKeyCounterUniformRuntimeFamilyF32PhiloxKeyCounterUniformRuntimeFamilyI32PhiloxKeySplitPhiloxKeySplitRuntimeFamilyPhiloxKeyUniformPhiloxKeyUniformRuntimeFamilyF32PhiloxKeyUniformRuntimeFamilyI32PhiloxRuntimeFamilyF32PhiloxRuntimeFamilyI32SquaresSquaresFoldSquaresFoldRuntimeFamilyF32SquaresFoldRuntimeFamilyI32SquaresRuntimeFamilyF32SquaresRuntimeFamilyI32ThreefryThreefry8F32ThreefryFoldThreefryFoldRuntimeFamilyF32ThreefryFoldRuntimeFamilyI32ThreefryRuntimeFamilyF32ThreefryRuntimeFamilyI32
Namespaces
Public namespaces.
Values and defaults
Public values and defaults.
feistel_default_roundsfeistel_family_versionfeistel_max_roundsphilox_default_roundsphilox_family_versionphilox_fold_family_versionphilox_key_counter_uniform_family_versionphilox_key_split_family_versionphilox_key_uniform_family_versionphilox_lanesphilox_max_roundssquares_default_keysquares_family_versionsquares_fold_family_versionsquares_lanesthreefry_default_roundsthreefry_family_versionthreefry_fold_family_versionthreefry_lanesthreefry_max_rounds
Source
Source: lib/accy/src/kernel/library/random/feistel/types.zig:13
pub const Feistel = struct { count: u64, rounds: u32 = feistel_default_rounds, seed: u64 = 0, dtype: DType = .i32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn seedLo(self: Feistel) u32 { return @truncate(self.seed); } pub fn seedHi(self: Feistel) u32 { return @truncate(self.seed >> 32); } pub fn domainBits(self: Feistel) ?u6 { return feistelDomainBits(self.count); } pub fn halfBits(self: Feistel) ?u6 { const bits = self.domainBits() orelse return null; return @intCast(bits / 2); }};Source: lib/accy/src/kernel/library/random/fold/philox/types.zig:11
pub const PhiloxFold = struct { count: u64, samples: u32 = 1, rounds: u32 = philox_default_rounds, seed: u64 = 0, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn seedLo(self: PhiloxFold) u32 { return @truncate(self.seed); } pub fn seedHi(self: PhiloxFold) u32 { return @truncate(self.seed >> 32); }};Source: lib/accy/src/kernel/library/random/fold/squares/types.zig:9
pub const SquaresFold = struct { count: u64, samples: u32 = 1, key: u64 = squares_default_key, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn keyLo(self: SquaresFold) u32 { return @truncate(self.key); } pub fn keyHi(self: SquaresFold) u32 { return @truncate(self.key >> 32); }};Source: lib/accy/src/kernel/library/random/fold/threefry/types.zig:11
pub const ThreefryFold = struct { count: u64, samples: u32 = 1, rounds: u32 = threefry_default_rounds, seed: u64 = 0, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn seedLo(self: ThreefryFold) u32 { return @truncate(self.seed); } pub fn seedHi(self: ThreefryFold) u32 { return @truncate(self.seed >> 32); }};Source: lib/accy/src/kernel/library/random/key/types.zig:32
pub const PhiloxKeyCounterUniform = struct { count: u64, rounds: u32 = philox_default_rounds, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn generators(self: PhiloxKeyCounterUniform) u64 { return self.count; }};Source: lib/accy/src/kernel/library/random/key/types.zig:9
pub const PhiloxKeySplit = struct { count: u64, rounds: u32 = philox_default_rounds, threads: u32 = 256, count_axis: []const u8 = "n", pub fn generators(self: PhiloxKeySplit) u64 { return self.count; }};Source: lib/accy/src/kernel/library/random/key/types.zig:20
pub const PhiloxKeyUniform = struct { count: u64, rounds: u32 = philox_default_rounds, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn generators(self: PhiloxKeyUniform) u64 { return self.count; }};Source: lib/accy/src/kernel/library/random/philox/types.zig:11
pub const Philox = struct { count: u64, rounds: u32 = philox_default_rounds, seed: u64 = 0, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn generators(self: Philox) u64 { return ceilDiv(self.count, philox_lanes); } pub fn seedLo(self: Philox) u32 { return @truncate(self.seed); } pub fn seedHi(self: Philox) u32 { return @truncate(self.seed >> 32); }};Source: lib/accy/src/kernel/library/random/squares/types.zig:11
pub const Squares = struct { count: u64, key: u64 = squares_default_key, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn generators(self: Squares) u64 { return self.count; } pub fn keyLo(self: Squares) u32 { return @truncate(self.key); } pub fn keyHi(self: Squares) u32 { return @truncate(self.key >> 32); }};Source: lib/accy/src/kernel/library/random/threefry/types.zig:11
pub const Threefry = struct { count: u64, rounds: u32 = threefry_default_rounds, seed: u64 = 0, dtype: DType = .f32, threads: u32 = 256, count_axis: []const u8 = "n", pub fn generators(self: Threefry) u64 { return ceilDiv(self.count, threefry_lanes); } pub fn seedLo(self: Threefry) u32 { return @truncate(self.seed); } pub fn seedHi(self: Threefry) u32 { return @truncate(self.seed >> 32); }};Source: lib/accy/src/kernel/library/random/feistel/artifact.zig:21
pub fn createFeistelFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: Feistel, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { if (!feistelInstanceValid(instance)) return error.UnsupportedExtent; const target = try feistelFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try feistelFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try feistelFamilyFingerprint(allocator, instance); const shape_profile_dimensions = feistelShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "feistel", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .i32 => try FeistelRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = feistel_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 3 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/feistel/geometry.zig:12
pub fn feistelThreadCandidatesForCount(count: u64) geometry_mod.Thread1DCandidates { return geometry_mod.threadCandidatesForExtent(count, random_thread_caps);}Source: lib/accy/src/kernel/library/random/feistel/geometry.zig:8
pub fn feistelThreadsForCount(count: u64) u32 { return geometry_mod.threadsForExtent(count, random_thread_caps);}Source: lib/accy/src/kernel/library/random/feistel/names.zig:15
pub fn feistelFamilyEntryName(allocator: std.mem.Allocator, instance: Feistel) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_feistel_family_{d}b_{d}r_{d}_{s}", .{ instance.domainBits().?, instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/feistel/names.zig:7
pub fn feistelFamilyTarget(allocator: std.mem.Allocator, instance: Feistel) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.feistel_family_{d}b_{d}r_{d}_{s}", .{ instance.domainBits().?, instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/feistel/profile.zig:30
pub fn feistelFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: Feistel) !u64 { var family = try feistelShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/feistel/profile.zig:16
pub fn feistelRuntimeArguments(instance: Feistel) ![3]choir_abi.ScalarArgument { return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.seedLo() }, .{ .u32 = instance.seedHi() }, };}Source: lib/accy/src/kernel/library/random/feistel/profile.zig:36
pub fn feistelShapeFamily(backing_allocator: std.mem.Allocator, instance: Feistel) !shape.Family { return randomShapeFamily(backing_allocator, "feistel", instance.count_axis);}Source: lib/accy/src/kernel/library/random/feistel/profile.zig:24
pub fn feistelShapeProfileDimensions(instance: Feistel) [1]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/feistel/runtime.zig:99
pub const FeistelRuntimeFamilyI32 = feistelRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/feistel/runtime.zig:16
pub fn feistelPermuteReference(index: u32, rounds: u32, seed: u64, bits: u6) u32 { const half_bits: u5 = @intCast(bits / 2); const mask: u32 = (@as(u32, 1) << half_bits) - 1; var left: u32 = index >> half_bits; var right: u32 = index & mask; const seed_lo: u32 = @truncate(seed); const seed_hi: u32 = @truncate(seed >> 32); var round: u32 = 0; while (round < rounds) : (round += 1) { const mixed = philoxBlock(2, .{ right, round, 0, 0 }, .{ seed_lo, seed_hi })[0] & mask; const next_right = left ^ mixed; left = right; right = next_right; } return (left << half_bits) | right;}Source: lib/accy/src/kernel/library/random/feistel/types.zig:39
pub fn feistelDomainBits(count: u64) ?u6 { if (count < 4) return null; if (!std.math.isPowerOfTwo(count)) return null; const bits: u6 = @intCast(std.math.log2_int(u64, count)); if (bits > feistel_max_domain_bits) return null; if (bits % 2 != 0) return null; return bits;}Source: lib/accy/src/kernel/library/random/feistel/types.zig:48
pub fn feistelInstanceValid(instance: Feistel) bool { if (instance.dtype != .i32) return false; if (instance.threads == 0) return false; if (instance.rounds == 0 or instance.rounds > feistel_max_rounds) return false; return instance.domainBits() != null;}Source: lib/accy/src/kernel/library/random/feistel/types.zig:8
pub const feistel_default_rounds: u32 = 6;Source: lib/accy/src/kernel/library/random/feistel/types.zig:10
pub const feistel_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/feistel/types.zig:9
pub const feistel_max_rounds: u32 = 16;Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:106
pub fn createPhiloxFoldFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: PhiloxFold, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try philoxFoldFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try philoxFoldFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try philoxFoldFamilyFingerprint(allocator, instance); const shape_profile_dimensions = philoxFoldShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "philox_fold", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try PhiloxFoldRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try PhiloxFoldRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = philox_fold_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 4 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:37
pub fn philoxFoldBitsReference(rounds: u32, output_index: u32, samples: u32, key: [2]u32) u32 { var accumulator: u32 = 0; for (0..samples) |sample| { const words = philoxBlock(rounds, .{ output_index, @intCast(sample), 0, 0 }, key); for (words) |word| accumulator ^= word; } return accumulator;}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:54
pub fn philoxFoldFamilyEntryName(allocator: std.mem.Allocator, instance: PhiloxFold) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_philox_fold_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:101
pub fn philoxFoldFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: PhiloxFold) !u64 { var family = try randomShapeFamily(backing_allocator, "philox_fold", instance.count_axis); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:46
pub fn philoxFoldFamilyTarget(allocator: std.mem.Allocator, instance: PhiloxFold) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.philox_fold_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:84
pub fn philoxFoldFamilyTuningKey( backing_allocator: std.mem.Allocator, device_fingerprint: u64, instance: PhiloxFold,) !tuning.FamilyTuningKey { const family_fingerprint = try philoxFoldFamilyFingerprint(backing_allocator, instance); const extents = philoxFoldTuningExtents(instance); return tuning.FamilyTuningKey.init( device_fingerprint, family_fingerprint, entry.operationFingerprint(philoxFoldTuningOperation(instance)), instance.dtype, philox_fold_family_version, extents[0..], ) orelse unreachable;}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:61
pub fn philoxFoldRuntimeArguments(instance: PhiloxFold) ![4]choir_abi.ScalarArgument { if (instance.samples == 0) return error.ExtentOverflowsIndexRange; return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.samples }, .{ .u32 = instance.seedLo() }, .{ .u32 = instance.seedHi() }, };}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:70
pub fn philoxFoldShapeProfileDimensions(instance: PhiloxFold) [2]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, .{ .name = "k", .runtime_scalar_argument_index = 1, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:76
pub fn philoxFoldTuningExtents(instance: PhiloxFold) [2]u64 { return .{ instance.count, instance.samples };}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:80
pub fn philoxFoldTuningOperation(instance: PhiloxFold) entry.Operation { return .{ .random = .{ .philox_fold = instance.rounds } };}Source: lib/accy/src/kernel/library/random/fold/philox/family.zig:28
pub fn philoxFoldUniformReference(rounds: u32, output_index: u32, samples: u32, key: [2]u32) f32 { var accumulator: f32 = 0.0; for (0..samples) |sample| { const words = philoxBlock(rounds, .{ output_index, @intCast(sample), 0, 0 }, key); for (words) |word| accumulator += uniformFromBits(word); } return accumulator;}Source: lib/accy/src/kernel/library/random/fold/philox/runtime.zig:86
pub const PhiloxFoldRuntimeFamilyF32 = philoxFoldRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/fold/philox/runtime.zig:87
pub const PhiloxFoldRuntimeFamilyI32 = philoxFoldRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/fold/philox/types.zig:9
pub const philox_fold_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:111
pub fn createSquaresFoldFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: SquaresFold, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try squaresFoldFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try squaresFoldFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try squaresFoldFamilyFingerprint(allocator, instance); const shape_profile_dimensions = squaresFoldShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "squares_fold", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try SquaresFoldRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try SquaresFoldRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = squares_fold_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 4 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:37
pub fn squaresFoldBitsReference(output_index: u32, samples: u32, key: u64) u32 { var accumulator: u32 = 0; for (0..samples) |sample| { const counter = @as(u64, output_index) | (@as(u64, @intCast(sample)) << 32); accumulator ^= squaresBlock(counter, key); } return accumulator;}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:54
pub fn squaresFoldFamilyEntryName(allocator: std.mem.Allocator, instance: SquaresFold) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_squares_fold_family_{d}_{s}", .{ instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:105
pub fn squaresFoldFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: SquaresFold) !u64 { var family = try randomShapeFamily(backing_allocator, "squares_fold", instance.count_axis); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:46
pub fn squaresFoldFamilyTarget(allocator: std.mem.Allocator, instance: SquaresFold) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.squares_fold_family_{d}_{s}", .{ instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:88
pub fn squaresFoldFamilyTuningKey( backing_allocator: std.mem.Allocator, device_fingerprint: u64, instance: SquaresFold,) !tuning.FamilyTuningKey { const family_fingerprint = try squaresFoldFamilyFingerprint(backing_allocator, instance); const extents = squaresFoldTuningExtents(instance); return tuning.FamilyTuningKey.init( device_fingerprint, family_fingerprint, entry.operationFingerprint(squaresFoldTuningOperation(instance)), instance.dtype, squares_fold_family_version, extents[0..], ) orelse unreachable;}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:62
pub fn squaresFoldRuntimeArguments(instance: SquaresFold) ![4]choir_abi.ScalarArgument { if (instance.samples == 0) return error.ExtentOverflowsIndexRange; return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.samples }, .{ .u32 = instance.keyLo() }, .{ .u32 = instance.keyHi() }, };}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:72
pub fn squaresFoldShapeProfileDimensions(instance: SquaresFold) [2]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, .{ .name = "k", .runtime_scalar_argument_index = 1, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:79
pub fn squaresFoldTuningExtents(instance: SquaresFold) [2]u64 { return .{ instance.count, instance.samples };}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:83
pub fn squaresFoldTuningOperation(instance: SquaresFold) entry.Operation { _ = instance; return .{ .random = .squares_fold };}Source: lib/accy/src/kernel/library/random/fold/squares/family.zig:28
pub fn squaresFoldUniformReference(output_index: u32, samples: u32, key: u64) f32 { var accumulator: f32 = 0.0; for (0..samples) |sample| { const counter = @as(u64, output_index) | (@as(u64, @intCast(sample)) << 32); accumulator += uniformFromBits(squaresBlock(counter, key)); } return accumulator;}Source: lib/accy/src/kernel/library/random/fold/squares/runtime.zig:88
pub const SquaresFoldRuntimeFamilyF32 = squaresFoldRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/fold/squares/runtime.zig:89
pub const SquaresFoldRuntimeFamilyI32 = squaresFoldRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/fold/squares/types.zig:26
pub const squares_fold_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:106
pub fn createThreefryFoldFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: ThreefryFold, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try threefryFoldFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try threefryFoldFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try threefryFoldFamilyFingerprint(allocator, instance); const shape_profile_dimensions = threefryFoldShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "threefry_fold", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try ThreefryFoldRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try ThreefryFoldRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = threefry_fold_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 4 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:37
pub fn threefryFoldBitsReference(rounds: u32, output_index: u32, samples: u32, key: [2]u32) u32 { var accumulator: u32 = 0; for (0..samples) |sample| { const words = threefryBlock(rounds, .{ output_index, @intCast(sample) }, key); for (words) |word| accumulator ^= word; } return accumulator;}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:54
pub fn threefryFoldFamilyEntryName(allocator: std.mem.Allocator, instance: ThreefryFold) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_threefry_fold_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:101
pub fn threefryFoldFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: ThreefryFold) !u64 { var family = try randomShapeFamily(backing_allocator, "threefry_fold", instance.count_axis); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:46
pub fn threefryFoldFamilyTarget(allocator: std.mem.Allocator, instance: ThreefryFold) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.threefry_fold_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:84
pub fn threefryFoldFamilyTuningKey( backing_allocator: std.mem.Allocator, device_fingerprint: u64, instance: ThreefryFold,) !tuning.FamilyTuningKey { const family_fingerprint = try threefryFoldFamilyFingerprint(backing_allocator, instance); const extents = threefryFoldTuningExtents(instance); return tuning.FamilyTuningKey.init( device_fingerprint, family_fingerprint, entry.operationFingerprint(threefryFoldTuningOperation(instance)), instance.dtype, threefry_fold_family_version, extents[0..], ) orelse unreachable;}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:61
pub fn threefryFoldRuntimeArguments(instance: ThreefryFold) ![4]choir_abi.ScalarArgument { if (instance.samples == 0) return error.ExtentOverflowsIndexRange; return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.samples }, .{ .u32 = instance.seedLo() }, .{ .u32 = instance.seedHi() }, };}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:70
pub fn threefryFoldShapeProfileDimensions(instance: ThreefryFold) [2]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, .{ .name = "k", .runtime_scalar_argument_index = 1, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:76
pub fn threefryFoldTuningExtents(instance: ThreefryFold) [2]u64 { return .{ instance.count, instance.samples };}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:80
pub fn threefryFoldTuningOperation(instance: ThreefryFold) entry.Operation { return .{ .random = .{ .threefry_fold = instance.rounds } };}Source: lib/accy/src/kernel/library/random/fold/threefry/family.zig:28
pub fn threefryFoldUniformReference(rounds: u32, output_index: u32, samples: u32, key: [2]u32) f32 { var accumulator: f32 = 0.0; for (0..samples) |sample| { const words = threefryBlock(rounds, .{ output_index, @intCast(sample) }, key); for (words) |word| accumulator += uniformFromBits(word); } return accumulator;}Source: lib/accy/src/kernel/library/random/fold/threefry/runtime.zig:86
pub const ThreefryFoldRuntimeFamilyF32 = threefryFoldRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/fold/threefry/runtime.zig:87
pub const ThreefryFoldRuntimeFamilyI32 = threefryFoldRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/fold/threefry/types.zig:9
pub const threefry_fold_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/key/artifact.zig:103
pub fn createPhiloxKeyCounterUniformFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: PhiloxKeyCounterUniform, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try philoxKeyCounterUniformFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try philoxKeyCounterUniformFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try profile.philoxKeyCounterUniformFamilyFingerprint(allocator, instance); const shape_profile_dimensions = profile.philoxKeyCounterUniformShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "philox_key_counter_uniform", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try PhiloxKeyCounterUniformRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try PhiloxKeyCounterUniformRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = philox_key_counter_uniform_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 1 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/key/artifact.zig:31
pub fn createPhiloxKeySplitFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: PhiloxKeySplit, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try philoxKeySplitFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try philoxKeySplitFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try profile.philoxKeySplitFamilyFingerprint(allocator, instance); const shape_profile_dimensions = profile.philoxKeySplitShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "philox_key_split", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = try PhiloxKeySplitRuntimeFamily.buildNamed(allocator, options.limits, entry_name, instance); defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = philox_key_split_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 1 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/key/artifact.zig:65
pub fn createPhiloxKeyUniformFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: PhiloxKeyUniform, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try philoxKeyUniformFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try philoxKeyUniformFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try profile.philoxKeyUniformFamilyFingerprint(allocator, instance); const shape_profile_dimensions = profile.philoxKeyUniformShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "philox_key_uniform", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try PhiloxKeyUniformRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try PhiloxKeyUniformRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = philox_key_uniform_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 1 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/key/names.zig:49
pub fn philoxKeyCounterUniformFamilyEntryName(allocator: std.mem.Allocator, instance: PhiloxKeyCounterUniform) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_philox_key_counter_uniform_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/key/names.zig:41
pub fn philoxKeyCounterUniformFamilyTarget(allocator: std.mem.Allocator, instance: PhiloxKeyCounterUniform) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.philox_key_counter_uniform_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/key/names.zig:17
pub fn philoxKeySplitFamilyEntryName(allocator: std.mem.Allocator, instance: PhiloxKeySplit) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_philox_key_split_family_{d}r_{d}_key", .{ instance.rounds, instance.threads }, );}Source: lib/accy/src/kernel/library/random/key/names.zig:9
pub fn philoxKeySplitFamilyTarget(allocator: std.mem.Allocator, instance: PhiloxKeySplit) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.philox_key_split_family_{d}r_{d}_key", .{ instance.rounds, instance.threads }, );}Source: lib/accy/src/kernel/library/random/key/names.zig:33
pub fn philoxKeyUniformFamilyEntryName(allocator: std.mem.Allocator, instance: PhiloxKeyUniform) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_philox_key_uniform_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/key/names.zig:25
pub fn philoxKeyUniformFamilyTarget(allocator: std.mem.Allocator, instance: PhiloxKeyUniform) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.philox_key_uniform_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/key/profile.zig:57
pub fn philoxKeyCounterUniformFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: PhiloxKeyCounterUniform) !u64 { var family = try philoxKeyCounterUniformShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/key/profile.zig:123
pub fn philoxKeyCounterUniformFamilySpecialization(backing_allocator: std.mem.Allocator, instance: PhiloxKeyCounterUniform) !entry.OwnedSpecialization { var owned = entry.OwnedSpecialization.init(backing_allocator); errdefer owned.deinit(); const lifetime_allocator = owned.allocator(); const inputs = try lifetime_allocator.alloc(entry.Shape, 2); inputs[0] = entry.runtimeShapeScalar(); inputs[1] = entry.runtimeShapeScalar(); const outputs = try lifetime_allocator.alloc(entry.Shape, 1); outputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); owned.value = .{ .dtype = instance.dtype, .operation = .{ .random = .{ .philox_key_counter_uniform = instance.rounds } }, .inputs = inputs, .outputs = outputs, .schedule = try entry.runtimeThreadBlocks1D(lifetime_allocator, "e", instance.generators(), instance.threads), }; owned.value.launch = owned.value.schedule.?.launch(); var family = try philoxKeyCounterUniformShapeFamily(backing_allocator, instance); errdefer family.deinit(); try owned.takeShapeFamily(&family); return owned;}Source: lib/accy/src/kernel/library/random/key/profile.zig:175
pub fn philoxKeyCounterUniformInstanceFromSpecialization(specialization: entry.Specialization) ?PhiloxKeyCounterUniform { if (!specialization.scheduleMatchesLaunch()) return null; const operation = specialization.operation orelse return null; const rounds = switch (operation) { .random => |random_operation| switch (random_operation) { .philox_key_counter_uniform => |rounds| rounds, else => return null, }, else => return null, }; const dtype = specialization.dtype orelse return null; if (!randomDTypeSupported(dtype)) return null; if (specialization.inputs.len != 2 or specialization.outputs.len != 1) return null; if (specialization.reductions.len != 0) return null; if (specialization.inputs[0].axes.len != 0 or specialization.inputs[1].axes.len != 0) return null; const output = specialization.outputs[0]; if (output.axes.len != 1) return null; const launch = specialization.launch orelse return null; if (launch.threadgroup[0] == 0) return null; return .{ .count = output.axes[0].extent, .rounds = rounds, .dtype = dtype, .threads = launch.threadgroup[0], .count_axis = output.axes[0].name, };}Source: lib/accy/src/kernel/library/random/key/profile.zig:29
pub fn philoxKeyCounterUniformRuntimeArguments(instance: PhiloxKeyCounterUniform) ![1]choir_abi.ScalarArgument { return .{.{ .u32 = try runtimeExtentArgument(instance.count) }};}Source: lib/accy/src/kernel/library/random/key/profile.zig:71
pub fn philoxKeyCounterUniformShapeFamily(backing_allocator: std.mem.Allocator, instance: PhiloxKeyCounterUniform) !shape.Family { return randomShapeFamily(backing_allocator, "philox_key_counter_uniform", instance.count_axis);}Source: lib/accy/src/kernel/library/random/key/profile.zig:41
pub fn philoxKeyCounterUniformShapeProfileDimensions(instance: PhiloxKeyCounterUniform) [1]artifact_product.KernelCallShapeProfileDimension { return .{.{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }};}Source: lib/accy/src/kernel/library/random/key/profile.zig:45
pub fn philoxKeySplitFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: PhiloxKeySplit) !u64 { var family = try philoxKeySplitShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/key/profile.zig:75
pub fn philoxKeySplitFamilySpecialization(backing_allocator: std.mem.Allocator, instance: PhiloxKeySplit) !entry.OwnedSpecialization { var owned = entry.OwnedSpecialization.init(backing_allocator); errdefer owned.deinit(); const lifetime_allocator = owned.allocator(); const inputs = try lifetime_allocator.alloc(entry.Shape, 1); inputs[0] = entry.runtimeShapeScalar(); const outputs = try lifetime_allocator.alloc(entry.Shape, 1); outputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); owned.value = .{ .dtype = .key, .operation = .{ .random = .{ .philox_key_split = instance.rounds } }, .inputs = inputs, .outputs = outputs, .schedule = try entry.runtimeThreadBlocks1D(lifetime_allocator, "e", instance.generators(), instance.threads), }; owned.value.launch = owned.value.schedule.?.launch(); var family = try philoxKeySplitShapeFamily(backing_allocator, instance); errdefer family.deinit(); try owned.takeShapeFamily(&family); return owned;}Source: lib/accy/src/kernel/library/random/key/profile.zig:148
pub fn philoxKeySplitInstanceFromSpecialization(specialization: entry.Specialization) ?PhiloxKeySplit { if (!specialization.scheduleMatchesLaunch()) return null; const operation = specialization.operation orelse return null; const rounds = switch (operation) { .random => |random_operation| switch (random_operation) { .philox_key_split => |rounds| rounds, else => return null, }, else => return null, }; const dtype = specialization.dtype orelse return null; if (dtype != .key) return null; if (specialization.inputs.len != 1 or specialization.outputs.len != 1) return null; if (specialization.inputs[0].axes.len != 0) return null; if (specialization.reductions.len != 0) return null; const output = specialization.outputs[0]; if (output.axes.len != 1) return null; const launch = specialization.launch orelse return null; if (launch.threadgroup[0] == 0) return null; return .{ .count = output.axes[0].extent, .rounds = rounds, .threads = launch.threadgroup[0], .count_axis = output.axes[0].name, };}Source: lib/accy/src/kernel/library/random/key/profile.zig:21
pub fn philoxKeySplitRuntimeArguments(instance: PhiloxKeySplit) ![1]choir_abi.ScalarArgument { return .{.{ .u32 = try runtimeExtentArgument(instance.count) }};}Source: lib/accy/src/kernel/library/random/key/profile.zig:63
pub fn philoxKeySplitShapeFamily(backing_allocator: std.mem.Allocator, instance: PhiloxKeySplit) !shape.Family { return randomShapeFamily(backing_allocator, "philox_key_split", instance.count_axis);}Source: lib/accy/src/kernel/library/random/key/profile.zig:33
pub fn philoxKeySplitShapeProfileDimensions(instance: PhiloxKeySplit) [1]artifact_product.KernelCallShapeProfileDimension { return .{.{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }};}Source: lib/accy/src/kernel/library/random/key/profile.zig:51
pub fn philoxKeyUniformFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: PhiloxKeyUniform) !u64 { var family = try philoxKeyUniformShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/key/profile.zig:99
pub fn philoxKeyUniformFamilySpecialization(backing_allocator: std.mem.Allocator, instance: PhiloxKeyUniform) !entry.OwnedSpecialization { var owned = entry.OwnedSpecialization.init(backing_allocator); errdefer owned.deinit(); const lifetime_allocator = owned.allocator(); const inputs = try lifetime_allocator.alloc(entry.Shape, 1); inputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); const outputs = try lifetime_allocator.alloc(entry.Shape, 1); outputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); owned.value = .{ .dtype = instance.dtype, .operation = .{ .random = .{ .philox_key_uniform = instance.rounds } }, .inputs = inputs, .outputs = outputs, .schedule = try entry.runtimeThreadBlocks1D(lifetime_allocator, "e", instance.generators(), instance.threads), }; owned.value.launch = owned.value.schedule.?.launch(); var family = try philoxKeyUniformShapeFamily(backing_allocator, instance); errdefer family.deinit(); try owned.takeShapeFamily(&family); return owned;}Source: lib/accy/src/kernel/library/random/key/profile.zig:203
pub fn philoxKeyUniformInstanceFromSpecialization(specialization: entry.Specialization) ?PhiloxKeyUniform { if (!specialization.scheduleMatchesLaunch()) return null; const operation = specialization.operation orelse return null; const rounds = switch (operation) { .random => |random_operation| switch (random_operation) { .philox_key_uniform => |rounds| rounds, else => return null, }, else => return null, }; const dtype = specialization.dtype orelse return null; if (!randomDTypeSupported(dtype)) return null; if (specialization.inputs.len != 1 or specialization.outputs.len != 1) return null; if (specialization.reductions.len != 0) return null; const input = specialization.inputs[0]; const output = specialization.outputs[0]; if (input.axes.len != 1 or output.axes.len != 1) return null; if (input.axes[0].extent != output.axes[0].extent) return null; const launch = specialization.launch orelse return null; if (launch.threadgroup[0] == 0) return null; return .{ .count = output.axes[0].extent, .rounds = rounds, .dtype = dtype, .threads = launch.threadgroup[0], .count_axis = output.axes[0].name, };}Source: lib/accy/src/kernel/library/random/key/profile.zig:25
pub fn philoxKeyUniformRuntimeArguments(instance: PhiloxKeyUniform) ![1]choir_abi.ScalarArgument { return .{.{ .u32 = try runtimeExtentArgument(instance.count) }};}Source: lib/accy/src/kernel/library/random/key/profile.zig:67
pub fn philoxKeyUniformShapeFamily(backing_allocator: std.mem.Allocator, instance: PhiloxKeyUniform) !shape.Family { return randomShapeFamily(backing_allocator, "philox_key_uniform", instance.count_axis);}Source: lib/accy/src/kernel/library/random/key/profile.zig:37
pub fn philoxKeyUniformShapeProfileDimensions(instance: PhiloxKeyUniform) [1]artifact_product.KernelCallShapeProfileDimension { return .{.{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }};}Source: lib/accy/src/kernel/library/random/key/runtime.zig:155
pub const PhiloxKeyCounterUniformRuntimeFamilyF32 = philoxKeyCounterUniformRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/key/runtime.zig:156
pub const PhiloxKeyCounterUniformRuntimeFamilyI32 = philoxKeyCounterUniformRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/key/runtime.zig:87
pub const PhiloxKeySplitRuntimeFamily = kernel.logical.Family(.{ .name = "accy_kernel_random_philox_key_split_runtime_key", .parameters = .{ .dst = kernel.dynamicBuffer(.key), .key = kernel.dynamicBuffer(.key), .count = kernel.scalar(.i32), }, .Instance = PhiloxKeySplit, .schedule = philoxKeySplitSchedule, .body = philox_key_split_runtime_family_body,});Source: lib/accy/src/kernel/library/random/key/runtime.zig:125
pub const PhiloxKeyUniformRuntimeFamilyF32 = philoxKeyUniformRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/key/runtime.zig:126
pub const PhiloxKeyUniformRuntimeFamilyI32 = philoxKeyUniformRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/key/types.zig:46
pub const philox_key_counter_uniform_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/key/types.zig:44
pub const philox_key_split_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/key/types.zig:45
pub const philox_key_uniform_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/philox/artifact.zig:24
pub fn createPhiloxFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: Philox, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try philoxFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try philoxFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try philoxFamilyFingerprint(allocator, instance); const shape_profile_dimensions = philoxShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "philox", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try PhiloxRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try PhiloxRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = philox_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomDerivedLaunch(instance.threads, philox_lanes), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 3 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/philox/geometry.zig:15
pub fn philoxThreadCandidatesForCount(count: u64) geometry_mod.Thread1DCandidates { return geometry_mod.threadCandidatesForExtent(ceilDiv(count, philox_lanes), random_thread_caps);}Source: lib/accy/src/kernel/library/random/philox/geometry.zig:11
pub fn philoxThreadsForCount(count: u64) u32 { return geometry_mod.threadsForExtent(ceilDiv(count, philox_lanes), random_thread_caps);}Source: lib/accy/src/kernel/library/random/philox/names.zig:31
pub fn philoxFamilyEntryName(allocator: std.mem.Allocator, instance: Philox) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_philox_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/philox/names.zig:23
pub fn philoxFamilyTarget(allocator: std.mem.Allocator, instance: Philox) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.philox_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/philox/names.zig:15
pub fn philoxInstanceEntryName(allocator: std.mem.Allocator, instance: Philox) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_philox{d}_{d}r_{d}_{s}", .{ instance.count, instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/philox/names.zig:7
pub fn philoxInstanceTarget(allocator: std.mem.Allocator, instance: Philox) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.philox{d}_{d}r_{d}_{s}", .{ instance.count, instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/philox/profile.zig:33
pub fn philoxFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: Philox) !u64 { var family = try philoxShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/philox/profile.zig:43
pub fn philoxFamilySpecialization(backing_allocator: std.mem.Allocator, instance: Philox) !entry.OwnedSpecialization { var owned = entry.OwnedSpecialization.init(backing_allocator); errdefer owned.deinit(); const lifetime_allocator = owned.allocator(); const outputs = try lifetime_allocator.alloc(entry.Shape, 1); outputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); owned.value = .{ .dtype = instance.dtype, .operation = .{ .random = .{ .philox = instance.rounds } }, .inputs = &.{}, .outputs = outputs, .schedule = try entry.runtimeThreadBlocks1D(lifetime_allocator, "e", instance.generators(), instance.threads), }; owned.value.launch = owned.value.schedule.?.launch(); var family = try philoxShapeFamily(backing_allocator, instance); errdefer family.deinit(); try owned.takeShapeFamily(&family); return owned;}Source: lib/accy/src/kernel/library/random/philox/profile.zig:65
pub fn philoxInstanceFromSpecialization(specialization: entry.Specialization) ?Philox { if (!specialization.scheduleMatchesLaunch()) return null; const operation = specialization.operation orelse return null; const rounds = switch (operation) { .random => |random_operation| switch (random_operation) { .philox => |rounds| rounds, else => return null, }, else => return null, }; const dtype = specialization.dtype orelse return null; if (!randomDTypeSupported(dtype)) return null; if (specialization.inputs.len != 0 or specialization.outputs.len != 1) return null; if (specialization.reductions.len != 0) return null; const output = specialization.outputs[0]; if (output.axes.len != 1) return null; const launch = specialization.launch orelse return null; if (launch.threadgroup[0] == 0) return null; return .{ .count = output.axes[0].extent, .rounds = rounds, .dtype = dtype, .threads = launch.threadgroup[0], .count_axis = output.axes[0].name, };}Source: lib/accy/src/kernel/library/random/philox/profile.zig:19
pub fn philoxRuntimeArguments(instance: Philox) ![3]choir_abi.ScalarArgument { return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.seedLo() }, .{ .u32 = instance.seedHi() }, };}Source: lib/accy/src/kernel/library/random/philox/profile.zig:39
pub fn philoxShapeFamily(backing_allocator: std.mem.Allocator, instance: Philox) !shape.Family { return randomShapeFamily(backing_allocator, "philox", instance.count_axis);}Source: lib/accy/src/kernel/library/random/philox/profile.zig:27
pub fn philoxShapeProfileDimensions(instance: Philox) [1]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/philox/runtime.zig:65
pub const PhiloxRuntimeFamilyF32 = philoxRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/philox/runtime.zig:66
pub const PhiloxRuntimeFamilyI32 = philoxRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/philox/static.zig:88
pub const Philox8F32 = philoxEntry(.{ .count = 8, .threads = 2 });Source: lib/accy/src/kernel/library/random/philox/static.zig:77
pub fn philoxEntry(comptime spec: Philox) type { return entry.Entry(philoxProgram(spec), .{ .target = std.fmt.comptimePrint( "accy.kernel.random.philox{}_{}r_{}_{s}", .{ spec.count, spec.rounds, spec.threads, spec.dtype.name() }, ), .layer = .logical, .category = .random, .specialization = philoxSpecialization(spec), });}Source: lib/accy/src/kernel/library/random/philox/tuning.zig:22
pub fn philoxFamilyTuningKey( backing_allocator: std.mem.Allocator, device_fingerprint: u64, instance: Philox,) !tuning.FamilyTuningKey { const family_fingerprint = try philoxFamilyFingerprint(backing_allocator, instance); const extents = philoxTuningExtents(instance); return tuning.FamilyTuningKey.init( device_fingerprint, family_fingerprint, entry.operationFingerprint(philoxTuningOperation(instance)), instance.dtype, philox_family_version, extents[0..], ) orelse unreachable;}Source: lib/accy/src/kernel/library/random/philox/tuning.zig:14
pub fn philoxTuningExtents(instance: Philox) [1]u64 { return .{instance.count};}Source: lib/accy/src/kernel/library/random/philox/tuning.zig:18
pub fn philoxTuningOperation(instance: Philox) entry.Operation { return .{ .random = .{ .philox = instance.rounds } };}Source: lib/accy/src/kernel/library/random/philox/types.zig:32
pub const philox_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/squares/artifact.zig:21
pub fn createSquaresFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: Squares, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try squaresFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try squaresFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try squaresFamilyFingerprint(allocator, instance); const shape_profile_dimensions = squaresShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "squares", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try SquaresRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try SquaresRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = squares_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomFoldDerivedLaunch(instance.threads), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 3 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/squares/geometry.zig:12
pub fn squaresThreadCandidatesForCount(count: u64) geometry_mod.Thread1DCandidates { return geometry_mod.threadCandidatesForExtent(count, random_thread_caps);}Source: lib/accy/src/kernel/library/random/squares/geometry.zig:8
pub fn squaresThreadsForCount(count: u64) u32 { return geometry_mod.threadsForExtent(count, random_thread_caps);}Source: lib/accy/src/kernel/library/random/squares/names.zig:15
pub fn squaresFamilyEntryName(allocator: std.mem.Allocator, instance: Squares) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_squares_family_{d}_{s}", .{ instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/squares/names.zig:7
pub fn squaresFamilyTarget(allocator: std.mem.Allocator, instance: Squares) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.squares_family_{d}_{s}", .{ instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/squares/profile.zig:33
pub fn squaresFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: Squares) !u64 { var family = try squaresShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/squares/profile.zig:43
pub fn squaresFamilySpecialization(backing_allocator: std.mem.Allocator, instance: Squares) !entry.OwnedSpecialization { var owned = entry.OwnedSpecialization.init(backing_allocator); errdefer owned.deinit(); const lifetime_allocator = owned.allocator(); const outputs = try lifetime_allocator.alloc(entry.Shape, 1); outputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); owned.value = .{ .dtype = instance.dtype, .operation = .{ .random = .squares }, .inputs = &.{}, .outputs = outputs, .schedule = try entry.runtimeThreadBlocks1D(lifetime_allocator, "e", instance.generators(), instance.threads), }; owned.value.launch = owned.value.schedule.?.launch(); var family = try squaresShapeFamily(backing_allocator, instance); errdefer family.deinit(); try owned.takeShapeFamily(&family); return owned;}Source: lib/accy/src/kernel/library/random/squares/profile.zig:65
pub fn squaresInstanceFromSpecialization(specialization: entry.Specialization) ?Squares { if (!specialization.scheduleMatchesLaunch()) return null; const operation = specialization.operation orelse return null; switch (operation) { .random => |random_operation| switch (random_operation) { .squares => {}, else => return null, }, else => return null, } const dtype = specialization.dtype orelse return null; if (!randomDTypeSupported(dtype)) return null; if (specialization.inputs.len != 0 or specialization.outputs.len != 1) return null; if (specialization.reductions.len != 0) return null; const output = specialization.outputs[0]; if (output.axes.len != 1) return null; const launch = specialization.launch orelse return null; if (launch.threadgroup[0] == 0) return null; return .{ .count = output.axes[0].extent, .dtype = dtype, .threads = launch.threadgroup[0], .count_axis = output.axes[0].name, };}Source: lib/accy/src/kernel/library/random/squares/profile.zig:19
pub fn squaresRuntimeArguments(instance: Squares) ![3]choir_abi.ScalarArgument { return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.keyLo() }, .{ .u32 = instance.keyHi() }, };}Source: lib/accy/src/kernel/library/random/squares/profile.zig:39
pub fn squaresShapeFamily(backing_allocator: std.mem.Allocator, instance: Squares) !shape.Family { return randomShapeFamily(backing_allocator, "squares", instance.count_axis);}Source: lib/accy/src/kernel/library/random/squares/profile.zig:27
pub fn squaresShapeProfileDimensions(instance: Squares) [1]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/squares/runtime.zig:68
pub const SquaresRuntimeFamilyF32 = squaresRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/squares/runtime.zig:69
pub const SquaresRuntimeFamilyI32 = squaresRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/squares/tuning.zig:23
pub fn squaresFamilyTuningKey( backing_allocator: std.mem.Allocator, device_fingerprint: u64, instance: Squares,) !tuning.FamilyTuningKey { const family_fingerprint = try squaresFamilyFingerprint(backing_allocator, instance); const extents = squaresTuningExtents(instance); return tuning.FamilyTuningKey.init( device_fingerprint, family_fingerprint, entry.operationFingerprint(squaresTuningOperation(instance)), instance.dtype, squares_family_version, extents[0..], ) orelse unreachable;}Source: lib/accy/src/kernel/library/random/squares/tuning.zig:14
pub fn squaresTuningExtents(instance: Squares) [1]u64 { return .{instance.count};}Source: lib/accy/src/kernel/library/random/squares/tuning.zig:18
pub fn squaresTuningOperation(instance: Squares) entry.Operation { _ = instance; return .{ .random = .squares };}Source: lib/accy/src/kernel/library/random/squares/types.zig:9
pub const squares_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/threefry/artifact.zig:24
pub fn createThreefryFamilyArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, instance: Threefry, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { const target = try threefryFamilyTarget(allocator, instance); defer allocator.free(target); const entry_name = try threefryFamilyEntryName(allocator, instance); defer allocator.free(entry_name); const family_fingerprint = options.shape_family_fingerprint orelse try threefryFamilyFingerprint(allocator, instance); const shape_profile_dimensions = threefryShapeProfileDimensions(instance); const shape_profile = options.shape_profile orelse artifact_product.KernelCallShapeProfile{ .name = "threefry", .fingerprint = family_fingerprint, .dimensions = shape_profile_dimensions[0..], }; var graph = switch (instance.dtype) { .f32 => try ThreefryRuntimeFamilyF32.buildNamed(allocator, options.limits, entry_name, instance), .i32 => try ThreefryRuntimeFamilyI32.buildNamed(allocator, options.limits, entry_name, instance), else => return error.UnsupportedDType, }; defer graph.deinit(); return kernel.createKernelCallArtifact(allocator, handle, &graph, .{ .target = target, .version = threefry_family_version, .format = options.format, .kernel_plan = options.kernel_plan, .element_count_argument = options.element_count_argument, .shape_family_fingerprint = family_fingerprint, .shape_profile = shape_profile, .launch = options.launch orelse try randomDerivedLaunch(instance.threads, threefry_lanes), .runtime_scalar_argument_count = if (options.runtime_scalar_argument_count == 0) 3 else options.runtime_scalar_argument_count, .static_arguments = options.static_arguments, });}Source: lib/accy/src/kernel/library/random/threefry/geometry.zig:15
pub fn threefryThreadCandidatesForCount(count: u64) geometry_mod.Thread1DCandidates { return geometry_mod.threadCandidatesForExtent(ceilDiv(count, threefry_lanes), random_thread_caps);}Source: lib/accy/src/kernel/library/random/threefry/geometry.zig:11
pub fn threefryThreadsForCount(count: u64) u32 { return geometry_mod.threadsForExtent(ceilDiv(count, threefry_lanes), random_thread_caps);}Source: lib/accy/src/kernel/library/random/threefry/names.zig:31
pub fn threefryFamilyEntryName(allocator: std.mem.Allocator, instance: Threefry) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_threefry_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/threefry/names.zig:23
pub fn threefryFamilyTarget(allocator: std.mem.Allocator, instance: Threefry) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.threefry_family_{d}r_{d}_{s}", .{ instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/threefry/names.zig:15
pub fn threefryInstanceEntryName(allocator: std.mem.Allocator, instance: Threefry) ![]u8 { return std.fmt.allocPrint( allocator, "accy_kernel_random_threefry{d}_{d}r_{d}_{s}", .{ instance.count, instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/threefry/names.zig:7
pub fn threefryInstanceTarget(allocator: std.mem.Allocator, instance: Threefry) ![]u8 { return std.fmt.allocPrint( allocator, "accy.kernel.random.threefry{d}_{d}r_{d}_{s}", .{ instance.count, instance.rounds, instance.threads, instance.dtype.name() }, );}Source: lib/accy/src/kernel/library/random/threefry/profile.zig:33
pub fn threefryFamilyFingerprint(backing_allocator: std.mem.Allocator, instance: Threefry) !u64 { var family = try threefryShapeFamily(backing_allocator, instance); defer family.deinit(); return shape.fingerprint(family);}Source: lib/accy/src/kernel/library/random/threefry/profile.zig:43
pub fn threefryFamilySpecialization(backing_allocator: std.mem.Allocator, instance: Threefry) !entry.OwnedSpecialization { var owned = entry.OwnedSpecialization.init(backing_allocator); errdefer owned.deinit(); const lifetime_allocator = owned.allocator(); const outputs = try lifetime_allocator.alloc(entry.Shape, 1); outputs[0] = try entry.runtimeShape1D(lifetime_allocator, instance.count_axis, instance.count); owned.value = .{ .dtype = instance.dtype, .operation = .{ .random = .{ .threefry = instance.rounds } }, .inputs = &.{}, .outputs = outputs, .schedule = try entry.runtimeThreadBlocks1D(lifetime_allocator, "e", instance.generators(), instance.threads), }; owned.value.launch = owned.value.schedule.?.launch(); var family = try threefryShapeFamily(backing_allocator, instance); errdefer family.deinit(); try owned.takeShapeFamily(&family); return owned;}Source: lib/accy/src/kernel/library/random/threefry/profile.zig:65
pub fn threefryInstanceFromSpecialization(specialization: entry.Specialization) ?Threefry { if (!specialization.scheduleMatchesLaunch()) return null; const operation = specialization.operation orelse return null; const rounds = switch (operation) { .random => |random_operation| switch (random_operation) { .threefry => |rounds| rounds, else => return null, }, else => return null, }; const dtype = specialization.dtype orelse return null; if (!randomDTypeSupported(dtype)) return null; if (specialization.inputs.len != 0 or specialization.outputs.len != 1) return null; if (specialization.reductions.len != 0) return null; const output = specialization.outputs[0]; if (output.axes.len != 1) return null; const launch = specialization.launch orelse return null; if (launch.threadgroup[0] == 0) return null; return .{ .count = output.axes[0].extent, .rounds = rounds, .dtype = dtype, .threads = launch.threadgroup[0], .count_axis = output.axes[0].name, };}Source: lib/accy/src/kernel/library/random/threefry/profile.zig:19
pub fn threefryRuntimeArguments(instance: Threefry) ![3]choir_abi.ScalarArgument { return .{ .{ .u32 = try runtimeExtentArgument(instance.count) }, .{ .u32 = instance.seedLo() }, .{ .u32 = instance.seedHi() }, };}Source: lib/accy/src/kernel/library/random/threefry/profile.zig:39
pub fn threefryShapeFamily(backing_allocator: std.mem.Allocator, instance: Threefry) !shape.Family { return randomShapeFamily(backing_allocator, "threefry", instance.count_axis);}Source: lib/accy/src/kernel/library/random/threefry/profile.zig:27
pub fn threefryShapeProfileDimensions(instance: Threefry) [1]artifact_product.KernelCallShapeProfileDimension { return .{ .{ .name = instance.count_axis, .runtime_scalar_argument_index = 0, .bounds = randomRuntimeExtentBounds() }, };}Source: lib/accy/src/kernel/library/random/threefry/runtime.zig:65
pub const ThreefryRuntimeFamilyF32 = threefryRuntimeFamily(.f32);Source: lib/accy/src/kernel/library/random/threefry/runtime.zig:66
pub const ThreefryRuntimeFamilyI32 = threefryRuntimeFamily(.i32);Source: lib/accy/src/kernel/library/random/threefry/static.zig:88
pub const Threefry8F32 = threefryEntry(.{ .count = 8, .threads = 4 });Source: lib/accy/src/kernel/library/random/threefry/static.zig:77
pub fn threefryEntry(comptime spec: Threefry) type { return entry.Entry(threefryProgram(spec), .{ .target = std.fmt.comptimePrint( "accy.kernel.random.threefry{}_{}r_{}_{s}", .{ spec.count, spec.rounds, spec.threads, spec.dtype.name() }, ), .layer = .logical, .category = .random, .specialization = threefrySpecialization(spec), });}Source: lib/accy/src/kernel/library/random/threefry/tuning.zig:22
pub fn threefryFamilyTuningKey( backing_allocator: std.mem.Allocator, device_fingerprint: u64, instance: Threefry,) !tuning.FamilyTuningKey { const family_fingerprint = try threefryFamilyFingerprint(backing_allocator, instance); const extents = threefryTuningExtents(instance); return tuning.FamilyTuningKey.init( device_fingerprint, family_fingerprint, entry.operationFingerprint(threefryTuningOperation(instance)), instance.dtype, threefry_family_version, extents[0..], ) orelse unreachable;}Source: lib/accy/src/kernel/library/random/threefry/tuning.zig:14
pub fn threefryTuningExtents(instance: Threefry) [1]u64 { return .{instance.count};}Source: lib/accy/src/kernel/library/random/threefry/tuning.zig:18
pub fn threefryTuningOperation(instance: Threefry) entry.Operation { return .{ .random = .{ .threefry = instance.rounds } };}Source: lib/accy/src/kernel/library/random/threefry/types.zig:32
pub const threefry_family_version: u32 = 1;Source: lib/accy/src/kernel/library/random/root.zig
pub const base = @import("base.zig");pub const block = @import("block/root.zig");const philox = @import("philox/root.zig");const threefry = @import("threefry/root.zig");const squares = @import("squares/root.zig");const feistel = @import("feistel/root.zig");const fold = @import("fold/root.zig");const key = @import("key/root.zig");pub const philox_lanes = block.philox_lanes;pub const philox_default_rounds = block.philox_default_rounds;pub const philox_max_rounds = block.philox_max_rounds;pub const threefry_lanes = block.threefry_lanes;pub const threefry_default_rounds = block.threefry_default_rounds;pub const threefry_max_rounds = block.threefry_max_rounds;pub const squares_lanes = block.squares_lanes;pub const squares_default_key = block.squares_default_key;pub const philoxBlock = block.philoxBlock;pub const threefryBlock = block.threefryBlock;pub const squaresBlock = block.squaresBlock;pub const uniformFromBits = block.uniformFromBits;pub const randomDTypeSupported = block.randomDTypeSupported;pub const Philox = philox.Philox;pub const Threefry = threefry.Threefry;pub const philox_family_version = philox.philox_family_version;pub const threefry_family_version = threefry.threefry_family_version;pub const PhiloxRuntimeFamilyF32 = philox.PhiloxRuntimeFamilyF32;pub const PhiloxRuntimeFamilyI32 = philox.PhiloxRuntimeFamilyI32;pub const ThreefryRuntimeFamilyF32 = threefry.ThreefryRuntimeFamilyF32;pub const ThreefryRuntimeFamilyI32 = threefry.ThreefryRuntimeFamilyI32;pub const philoxThreadsForCount = philox.philoxThreadsForCount;pub const philoxThreadCandidatesForCount = philox.philoxThreadCandidatesForCount;pub const threefryThreadsForCount = threefry.threefryThreadsForCount;pub const threefryThreadCandidatesForCount = threefry.threefryThreadCandidatesForCount;pub const philoxInstanceTarget = philox.philoxInstanceTarget;pub const philoxInstanceEntryName = philox.philoxInstanceEntryName;pub const philoxFamilyTarget = philox.philoxFamilyTarget;pub const philoxFamilyEntryName = philox.philoxFamilyEntryName;pub const threefryInstanceTarget = threefry.threefryInstanceTarget;pub const threefryInstanceEntryName = threefry.threefryInstanceEntryName;pub const threefryFamilyTarget = threefry.threefryFamilyTarget;pub const threefryFamilyEntryName = threefry.threefryFamilyEntryName;pub const philoxTuningExtents = philox.philoxTuningExtents;pub const philoxTuningOperation = philox.philoxTuningOperation;pub const philoxFamilyTuningKey = philox.philoxFamilyTuningKey;pub const threefryTuningExtents = threefry.threefryTuningExtents;pub const threefryTuningOperation = threefry.threefryTuningOperation;pub const threefryFamilyTuningKey = threefry.threefryFamilyTuningKey;pub const philoxRuntimeArguments = philox.philoxRuntimeArguments;pub const threefryRuntimeArguments = threefry.threefryRuntimeArguments;pub const philoxShapeProfileDimensions = philox.philoxShapeProfileDimensions;pub const threefryShapeProfileDimensions = threefry.threefryShapeProfileDimensions;pub const createPhiloxFamilyArtifact = philox.createPhiloxFamilyArtifact;pub const createThreefryFamilyArtifact = threefry.createThreefryFamilyArtifact;pub const philoxFamilyFingerprint = philox.philoxFamilyFingerprint;pub const philoxShapeFamily = philox.philoxShapeFamily;pub const threefryFamilyFingerprint = threefry.threefryFamilyFingerprint;pub const threefryShapeFamily = threefry.threefryShapeFamily;pub const philoxFamilySpecialization = philox.philoxFamilySpecialization;pub const threefryFamilySpecialization = threefry.threefryFamilySpecialization;pub const philoxInstanceFromSpecialization = philox.philoxInstanceFromSpecialization;pub const threefryInstanceFromSpecialization = threefry.threefryInstanceFromSpecialization;pub const philoxEntry = philox.philoxEntry;pub const threefryEntry = threefry.threefryEntry;pub const Philox8F32 = philox.Philox8F32;pub const Threefry8F32 = threefry.Threefry8F32;pub const squares_family_version = squares.squares_family_version;pub const Squares = squares.Squares;pub const SquaresRuntimeFamilyF32 = squares.SquaresRuntimeFamilyF32;pub const SquaresRuntimeFamilyI32 = squares.SquaresRuntimeFamilyI32;pub const squaresThreadsForCount = squares.squaresThreadsForCount;pub const squaresThreadCandidatesForCount = squares.squaresThreadCandidatesForCount;pub const squaresFamilyTarget = squares.squaresFamilyTarget;pub const squaresFamilyEntryName = squares.squaresFamilyEntryName;pub const squaresTuningExtents = squares.squaresTuningExtents;pub const squaresTuningOperation = squares.squaresTuningOperation;pub const squaresFamilyTuningKey = squares.squaresFamilyTuningKey;pub const squaresRuntimeArguments = squares.squaresRuntimeArguments;pub const squaresShapeProfileDimensions = squares.squaresShapeProfileDimensions;pub const squaresFamilyFingerprint = squares.squaresFamilyFingerprint;pub const squaresShapeFamily = squares.squaresShapeFamily;pub const squaresFamilySpecialization = squares.squaresFamilySpecialization;pub const squaresInstanceFromSpecialization = squares.squaresInstanceFromSpecialization;pub const createSquaresFamilyArtifact = squares.createSquaresFamilyArtifact;pub const PhiloxKeySplit = key.PhiloxKeySplit;pub const PhiloxKeyUniform = key.PhiloxKeyUniform;pub const PhiloxKeyCounterUniform = key.PhiloxKeyCounterUniform;pub const philox_key_split_family_version = key.philox_key_split_family_version;pub const philox_key_uniform_family_version = key.philox_key_uniform_family_version;pub const philox_key_counter_uniform_family_version = key.philox_key_counter_uniform_family_version;pub const PhiloxKeySplitRuntimeFamily = key.PhiloxKeySplitRuntimeFamily;pub const PhiloxKeyUniformRuntimeFamilyF32 = key.PhiloxKeyUniformRuntimeFamilyF32;pub const PhiloxKeyUniformRuntimeFamilyI32 = key.PhiloxKeyUniformRuntimeFamilyI32;pub const PhiloxKeyCounterUniformRuntimeFamilyF32 = key.PhiloxKeyCounterUniformRuntimeFamilyF32;pub const PhiloxKeyCounterUniformRuntimeFamilyI32 = key.PhiloxKeyCounterUniformRuntimeFamilyI32;pub const philoxKeySplitFamilyTarget = key.philoxKeySplitFamilyTarget;pub const philoxKeySplitFamilyEntryName = key.philoxKeySplitFamilyEntryName;pub const philoxKeyUniformFamilyTarget = key.philoxKeyUniformFamilyTarget;pub const philoxKeyUniformFamilyEntryName = key.philoxKeyUniformFamilyEntryName;pub const philoxKeyCounterUniformFamilyTarget = key.philoxKeyCounterUniformFamilyTarget;pub const philoxKeyCounterUniformFamilyEntryName = key.philoxKeyCounterUniformFamilyEntryName;pub const philoxKeySplitRuntimeArguments = key.philoxKeySplitRuntimeArguments;pub const philoxKeyUniformRuntimeArguments = key.philoxKeyUniformRuntimeArguments;pub const philoxKeyCounterUniformRuntimeArguments = key.philoxKeyCounterUniformRuntimeArguments;pub const philoxKeySplitShapeProfileDimensions = key.philoxKeySplitShapeProfileDimensions;pub const philoxKeyUniformShapeProfileDimensions = key.philoxKeyUniformShapeProfileDimensions;pub const philoxKeyCounterUniformShapeProfileDimensions = key.philoxKeyCounterUniformShapeProfileDimensions;pub const philoxKeySplitFamilyFingerprint = key.philoxKeySplitFamilyFingerprint;pub const philoxKeyUniformFamilyFingerprint = key.philoxKeyUniformFamilyFingerprint;pub const philoxKeyCounterUniformFamilyFingerprint = key.philoxKeyCounterUniformFamilyFingerprint;pub const philoxKeySplitShapeFamily = key.philoxKeySplitShapeFamily;pub const philoxKeyUniformShapeFamily = key.philoxKeyUniformShapeFamily;pub const philoxKeyCounterUniformShapeFamily = key.philoxKeyCounterUniformShapeFamily;pub const philoxKeySplitFamilySpecialization = key.philoxKeySplitFamilySpecialization;pub const philoxKeyUniformFamilySpecialization = key.philoxKeyUniformFamilySpecialization;pub const philoxKeyCounterUniformFamilySpecialization = key.philoxKeyCounterUniformFamilySpecialization;pub const philoxKeySplitInstanceFromSpecialization = key.philoxKeySplitInstanceFromSpecialization;pub const philoxKeyUniformInstanceFromSpecialization = key.philoxKeyUniformInstanceFromSpecialization;pub const philoxKeyCounterUniformInstanceFromSpecialization = key.philoxKeyCounterUniformInstanceFromSpecialization;pub const createPhiloxKeySplitFamilyArtifact = key.createPhiloxKeySplitFamilyArtifact;pub const createPhiloxKeyUniformFamilyArtifact = key.createPhiloxKeyUniformFamilyArtifact;pub const createPhiloxKeyCounterUniformFamilyArtifact = key.createPhiloxKeyCounterUniformFamilyArtifact;pub const Feistel = feistel.Feistel;pub const feistel_default_rounds = feistel.feistel_default_rounds;pub const feistel_max_rounds = feistel.feistel_max_rounds;pub const feistel_family_version = feistel.feistel_family_version;pub const feistelDomainBits = feistel.feistelDomainBits;pub const feistelInstanceValid = feistel.feistelInstanceValid;pub const feistelThreadsForCount = feistel.feistelThreadsForCount;pub const feistelThreadCandidatesForCount = feistel.feistelThreadCandidatesForCount;pub const feistelFamilyTarget = feistel.feistelFamilyTarget;pub const feistelFamilyEntryName = feistel.feistelFamilyEntryName;pub const feistelRuntimeArguments = feistel.feistelRuntimeArguments;pub const feistelShapeProfileDimensions = feistel.feistelShapeProfileDimensions;pub const feistelFamilyFingerprint = feistel.feistelFamilyFingerprint;pub const feistelShapeFamily = feistel.feistelShapeFamily;pub const FeistelRuntimeFamilyI32 = feistel.FeistelRuntimeFamilyI32;pub const feistelPermuteReference = feistel.feistelPermuteReference;pub const createFeistelFamilyArtifact = feistel.createFeistelFamilyArtifact;pub const SquaresFold = fold.SquaresFold;pub const squares_fold_family_version = fold.squares_fold_family_version;pub const squaresFoldUniformReference = fold.squaresFoldUniformReference;pub const squaresFoldBitsReference = fold.squaresFoldBitsReference;pub const SquaresFoldRuntimeFamilyF32 = fold.SquaresFoldRuntimeFamilyF32;pub const SquaresFoldRuntimeFamilyI32 = fold.SquaresFoldRuntimeFamilyI32;pub const squaresFoldFamilyTarget = fold.squaresFoldFamilyTarget;pub const squaresFoldFamilyEntryName = fold.squaresFoldFamilyEntryName;pub const squaresFoldRuntimeArguments = fold.squaresFoldRuntimeArguments;pub const squaresFoldShapeProfileDimensions = fold.squaresFoldShapeProfileDimensions;pub const squaresFoldTuningExtents = fold.squaresFoldTuningExtents;pub const squaresFoldTuningOperation = fold.squaresFoldTuningOperation;pub const squaresFoldFamilyTuningKey = fold.squaresFoldFamilyTuningKey;pub const squaresFoldFamilyFingerprint = fold.squaresFoldFamilyFingerprint;pub const createSquaresFoldFamilyArtifact = fold.createSquaresFoldFamilyArtifact;pub const philox_fold_family_version = fold.philox_fold_family_version;pub const threefry_fold_family_version = fold.threefry_fold_family_version;pub const PhiloxFold = fold.PhiloxFold;pub const ThreefryFold = fold.ThreefryFold;pub const philoxFoldUniformReference = fold.philoxFoldUniformReference;pub const philoxFoldBitsReference = fold.philoxFoldBitsReference;pub const threefryFoldUniformReference = fold.threefryFoldUniformReference;pub const threefryFoldBitsReference = fold.threefryFoldBitsReference;pub const PhiloxFoldRuntimeFamilyF32 = fold.PhiloxFoldRuntimeFamilyF32;pub const PhiloxFoldRuntimeFamilyI32 = fold.PhiloxFoldRuntimeFamilyI32;pub const ThreefryFoldRuntimeFamilyF32 = fold.ThreefryFoldRuntimeFamilyF32;pub const ThreefryFoldRuntimeFamilyI32 = fold.ThreefryFoldRuntimeFamilyI32;pub const philoxFoldFamilyTarget = fold.philoxFoldFamilyTarget;pub const philoxFoldFamilyEntryName = fold.philoxFoldFamilyEntryName;pub const threefryFoldFamilyTarget = fold.threefryFoldFamilyTarget;pub const threefryFoldFamilyEntryName = fold.threefryFoldFamilyEntryName;pub const philoxFoldRuntimeArguments = fold.philoxFoldRuntimeArguments;pub const threefryFoldRuntimeArguments = fold.threefryFoldRuntimeArguments;pub const philoxFoldShapeProfileDimensions = fold.philoxFoldShapeProfileDimensions;pub const threefryFoldShapeProfileDimensions = fold.threefryFoldShapeProfileDimensions;pub const philoxFoldTuningExtents = fold.philoxFoldTuningExtents;pub const philoxFoldTuningOperation = fold.philoxFoldTuningOperation;pub const philoxFoldFamilyTuningKey = fold.philoxFoldFamilyTuningKey;pub const philoxFoldFamilyFingerprint = fold.philoxFoldFamilyFingerprint;pub const threefryFoldTuningExtents = fold.threefryFoldTuningExtents;pub const threefryFoldTuningOperation = fold.threefryFoldTuningOperation;pub const threefryFoldFamilyTuningKey = fold.threefryFoldFamilyTuningKey;pub const threefryFoldFamilyFingerprint = fold.threefryFoldFamilyFingerprint;pub const createPhiloxFoldFamilyArtifact = fold.createPhiloxFoldFamilyArtifact;pub const createThreefryFoldFamilyArtifact = fold.createThreefryFoldFamilyArtifact;Source: lib/accy/src/kernel/library/root.zig:20
pub const random = @import("random/root.zig");Complete call list for kernel.library.random.createFeistelFamilyArtifact
7 direct calls.
tiny.accy.kernel.library.random.base.randomFoldDerivedLaunch[function] atlib/accy/src/kernel/library/random/base.zig:37tiny.accy.kernel.library.random.feistelFamilyEntryName[function] atlib/accy/src/kernel/library/random/feistel/names.zig:15tiny.accy.kernel.library.random.feistelFamilyTarget[function] atlib/accy/src/kernel/library/random/feistel/names.zig:7tiny.accy.kernel.library.random.feistelFamilyFingerprint[function] atlib/accy/src/kernel/library/random/feistel/profile.zig:30tiny.accy.kernel.library.random.feistelShapeProfileDimensions[function] atlib/accy/src/kernel/library/random/feistel/profile.zig:24tiny.accy.kernel.library.random.feistelInstanceValid[function] atlib/accy/src/kernel/library/random/feistel/types.zig:48tiny.smg.graph.deinit[function] attools/smg/src/graph.zig:243
Complete call list for kernel.library.random.philoxKeyCounterUniformFamilySpecialization
8 direct calls.
tiny.accy.kernel.library.OwnedSpecialization.allocator[method] atlib/accy/src/kernel/library/entry.zig:616tiny.accy.kernel.library.OwnedSpecialization.deinit[method] atlib/accy/src/kernel/library/entry.zig:620tiny.accy.kernel.library.OwnedSpecialization.init[function] atlib/accy/src/kernel/library/entry.zig:609tiny.accy.kernel.library.OwnedSpecialization.takeShapeFamily[method] atlib/accy/src/kernel/library/entry.zig:626tiny.accy.kernel.library.entry.runtimeShape1D[function] atlib/accy/src/kernel/library/entry.zig:651tiny.accy.kernel.library.entry.runtimeShapeScalar[function] atlib/accy/src/kernel/library/entry.zig:662tiny.accy.kernel.library.entry.runtimeThreadBlocks1D[function] atlib/accy/src/kernel/library/entry.zig:955tiny.accy.kernel.library.random.philoxKeyCounterUniformShapeFamily[function] atlib/accy/src/kernel/library/random/key/profile.zig:71
Complete call list for kernel.library.random.philoxKeySplitFamilySpecialization
8 direct calls.
tiny.accy.kernel.library.OwnedSpecialization.allocator[method] atlib/accy/src/kernel/library/entry.zig:616tiny.accy.kernel.library.OwnedSpecialization.deinit[method] atlib/accy/src/kernel/library/entry.zig:620tiny.accy.kernel.library.OwnedSpecialization.init[function] atlib/accy/src/kernel/library/entry.zig:609tiny.accy.kernel.library.OwnedSpecialization.takeShapeFamily[method] atlib/accy/src/kernel/library/entry.zig:626tiny.accy.kernel.library.entry.runtimeShape1D[function] atlib/accy/src/kernel/library/entry.zig:651tiny.accy.kernel.library.entry.runtimeShapeScalar[function] atlib/accy/src/kernel/library/entry.zig:662tiny.accy.kernel.library.entry.runtimeThreadBlocks1D[function] atlib/accy/src/kernel/library/entry.zig:955tiny.accy.kernel.library.random.philoxKeySplitShapeFamily[function] atlib/accy/src/kernel/library/random/key/profile.zig:63
Complete call list for kernel.library.random.philoxKeyUniformFamilySpecialization
7 direct calls.
tiny.accy.kernel.library.OwnedSpecialization.allocator[method] atlib/accy/src/kernel/library/entry.zig:616tiny.accy.kernel.library.OwnedSpecialization.deinit[method] atlib/accy/src/kernel/library/entry.zig:620tiny.accy.kernel.library.OwnedSpecialization.init[function] atlib/accy/src/kernel/library/entry.zig:609tiny.accy.kernel.library.OwnedSpecialization.takeShapeFamily[method] atlib/accy/src/kernel/library/entry.zig:626tiny.accy.kernel.library.entry.runtimeShape1D[function] atlib/accy/src/kernel/library/entry.zig:651tiny.accy.kernel.library.entry.runtimeThreadBlocks1D[function] atlib/accy/src/kernel/library/entry.zig:955tiny.accy.kernel.library.random.philoxKeyUniformShapeFamily[function] atlib/accy/src/kernel/library/random/key/profile.zig:67
Complete call list for kernel.library.random.philoxFamilySpecialization
7 direct calls.
tiny.accy.kernel.library.OwnedSpecialization.allocator[method] atlib/accy/src/kernel/library/entry.zig:616tiny.accy.kernel.library.OwnedSpecialization.deinit[method] atlib/accy/src/kernel/library/entry.zig:620tiny.accy.kernel.library.OwnedSpecialization.init[function] atlib/accy/src/kernel/library/entry.zig:609tiny.accy.kernel.library.OwnedSpecialization.takeShapeFamily[method] atlib/accy/src/kernel/library/entry.zig:626tiny.accy.kernel.library.entry.runtimeShape1D[function] atlib/accy/src/kernel/library/entry.zig:651tiny.accy.kernel.library.entry.runtimeThreadBlocks1D[function] atlib/accy/src/kernel/library/entry.zig:955tiny.accy.kernel.library.random.philoxShapeFamily[function] atlib/accy/src/kernel/library/random/philox/profile.zig:39
Complete call list for kernel.library.random.squaresFamilySpecialization
7 direct calls.
tiny.accy.kernel.library.OwnedSpecialization.allocator[method] atlib/accy/src/kernel/library/entry.zig:616tiny.accy.kernel.library.OwnedSpecialization.deinit[method] atlib/accy/src/kernel/library/entry.zig:620tiny.accy.kernel.library.OwnedSpecialization.init[function] atlib/accy/src/kernel/library/entry.zig:609tiny.accy.kernel.library.OwnedSpecialization.takeShapeFamily[method] atlib/accy/src/kernel/library/entry.zig:626tiny.accy.kernel.library.entry.runtimeShape1D[function] atlib/accy/src/kernel/library/entry.zig:651tiny.accy.kernel.library.entry.runtimeThreadBlocks1D[function] atlib/accy/src/kernel/library/entry.zig:955tiny.accy.kernel.library.random.squaresShapeFamily[function] atlib/accy/src/kernel/library/random/squares/profile.zig:39
Complete call list for kernel.library.random.threefryFamilySpecialization
7 direct calls.
tiny.accy.kernel.library.OwnedSpecialization.allocator[method] atlib/accy/src/kernel/library/entry.zig:616tiny.accy.kernel.library.OwnedSpecialization.deinit[method] atlib/accy/src/kernel/library/entry.zig:620tiny.accy.kernel.library.OwnedSpecialization.init[function] atlib/accy/src/kernel/library/entry.zig:609tiny.accy.kernel.library.OwnedSpecialization.takeShapeFamily[method] atlib/accy/src/kernel/library/entry.zig:626tiny.accy.kernel.library.entry.runtimeShape1D[function] atlib/accy/src/kernel/library/entry.zig:651tiny.accy.kernel.library.entry.runtimeThreadBlocks1D[function] atlib/accy/src/kernel/library/entry.zig:955tiny.accy.kernel.library.random.threefryShapeFamily[function] atlib/accy/src/kernel/library/random/threefry/profile.zig:39
Audit
| Definitions | 185 |
|---|---|
| Public names | 185 |
| Members | 57 |
| Version | 26.7.0 |
| Revision | daab053ee433 |