tiny.accy.kernel.library.catalog
Defined in kernel.library.
API (153)
Actions
Public operations.
ActivationKind.fromNameFilterCandidateDescriptors.deinitFilterCandidateDescriptors.sliceGatherCandidateDescriptors.deinitGatherCandidateDescriptors.sliceHistogramCandidateDescriptors.deinitHistogramCandidateDescriptors.sliceImageCandidateDescriptors.deinitImageCandidateDescriptors.sliceMatrixProductCandidateDescriptors.deinitMatrixProductCandidateDescriptors.sliceOwnedDescriptor.deinitOwnedKernelCallArtifactRegistry.deinitOwnedKernelCallArtifactRegistry.registryOwnedKernelCallPipelinePackage.deinitOwnedKernelCallPipelinePackage.registryPrefixSumCandidateDescriptors.deinitPrefixSumCandidateDescriptors.sliceRandomCandidateDescriptors.deinitRandomCandidateDescriptors.sliceScatterAddCandidateDescriptors.deinitScatterAddCandidateDescriptors.sliceScatterCandidateDescriptors.deinitScatterCandidateDescriptors.sliceSegmentSumCandidateDescriptors.deinitSegmentSumCandidateDescriptors.sliceSparseCandidateDescriptors.deinitSparseCandidateDescriptors.sliceSpatialCandidateDescriptors.deinitSpatialCandidateDescriptors.sliceStencilWindowCandidateDescriptors.deinitStencilWindowCandidateDescriptors.slicecreateKernelCallArtifactcreateOwnedKernelCallArtifactcreateOwnedKernelCallArtifactRegistrycreateOwnedKernelCallPipelinePackagefindEntryselectselectOwnedselectOwnedFactorselectOwnedFilterCandidatesselectOwnedGatherCandidatesselectOwnedHistogramCandidatesselectOwnedImageCandidatesselectOwnedMatrixProductCandidatesselectOwnedPrefixSumCandidatesselectOwnedRandomCandidatesselectOwnedScatterAddCandidatesselectOwnedScatterCandidatesselectOwnedSegmentSumCandidatesselectOwnedSparseselectOwnedSparseCandidatesselectOwnedSpatialselectOwnedSpatialCandidatesselectOwnedStencilWindowCandidatesselectRadixSortWithTuningselectSparseWithTuning
Types and contracts
Public types and contracts.
ActivationKindActivationQueryArtifactRequestAttentionKindAttentionQueryAttentionScheduleBatchedMatrixProductQueryBatchedMatrixProductScheduleCompactionPredicateKindDescriptorFactorKindFactorQuery: A caller fills this request to get a batched Cholesky factorization, Cholesky solve or matrix inverse from the kernel library.FactorScheduleFactorTileLayoutFilterCandidateDescriptorsFilterQueryFilterScheduleFusedLinalgEpilogueFusedMatrixProductQueryFusedMatrixVectorProductQueryFusedQueryFusedRowNormalizationKindFusedRowNormalizationQueryFusedVectorKindFusedVectorQueryGatherCandidateDescriptorsGatherQueryGatherScheduleHistogramBinningPolicyHistogramCandidateDescriptorsHistogramQueryHistogramScheduleImageCandidateDescriptorsImageKindImageQueryImageScheduleLayoutKindLayoutQueryMatrixProductCandidateDescriptorsMatrixProductQueryMatrixProductScheduleMatrixVectorProductQueryMatrixVectorProductScheduleOuterProductQueryOuterProductScheduleOwnedDescriptorOwnedKernelCallArtifactRegistryOwnedKernelCallPipelinePackagePrefixSumCandidateDescriptorsQueryRandomAlgorithmRandomCandidateDescriptorsRandomQueryRandomScheduleReductionKindReductionOperandReductionQueryRowNormalizationKindRowNormalizationParameterizationRowNormalizationQueryRowNormalizationScheduleRowSparseCrossEntropyQueryRowSparseCrossEntropyScheduleScanKindScanQueryScanScheduleScatterAddCandidateDescriptorsScatterAddQueryScatterAddScheduleScatterCandidateDescriptorsScatterQueryScatterScheduleSegmentSumCandidateDescriptorsSegmentedKindSegmentedQuerySegmentedScheduleSortKindSortQuery: A caller fills this request to get a sort kernel from the kernel library, the package's hand-written kernel families, chosen by a typed request.SortScheduleSortStructureSparseCandidateDescriptorsSparseKindSparseQuerySparseScheduleSparseStructureSpatialCandidateDescriptorsSpatialKindSpatialQuery: A caller fills this request to get a grid kernel for points in the plane, such as assigning points to cells or counting neighbors.SpatialScheduleStencilKindStencilQueryStencilScheduleStencilWindowCandidateDescriptorsTransposeQuery
Values and defaults
Public values and defaults.
Source
Source: lib/accy/src/choir/activation.zig:3
pub const Kind = enum { gelu, relu, silu, pub fn fromName(name: []const u8) ?Kind { inline for ( @typeInfo(Kind).@"enum".field_names, @typeInfo(Kind).@"enum".field_values, ) |field_name, field_name_value| { const field = .{ .name = field_name, .value = field_name_value }; if (std.mem.eql(u8, name, field.name)) return @fromBackingInt(@intCast(field.value)); } return null; }};Source: lib/accy/src/kernel/library/catalog/artifact/model.zig:6
pub const OwnedKernelCallArtifactRegistry = struct { allocator: std.mem.Allocator, artifacts: []kernel.OwnedKernelCallArtifact = &.{}, entries: []artifact_product.KernelCallArtifact = &.{}, index: artifact_product.KernelCallRegistryIndex = .{}, pub fn registry(self: *const OwnedKernelCallArtifactRegistry) artifact_product.KernelCallRegistry { return .{ .entries = self.entries, .index = self.index, }; } pub fn deinit(self: *OwnedKernelCallArtifactRegistry) void { artifact_product.deinitKernelCallRegistryIndex(self.allocator, self.index); for (self.artifacts) |*artifact| artifact.deinit(); if (self.artifacts.len != 0) self.allocator.free(self.artifacts); if (self.entries.len != 0) self.allocator.free(self.entries); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/artifact/model.zig:28
pub const OwnedKernelCallPipelinePackage = struct { allocator: std.mem.Allocator, artifacts: []kernel.OwnedKernelCallArtifact = &.{}, entries: []artifact_product.KernelCallArtifact = &.{}, index: artifact_product.KernelCallRegistryIndex = .{}, pipeline: artifact_product.OwnedKernelCallPipeline, pub fn registry(self: *const OwnedKernelCallPipelinePackage) artifact_product.KernelCallRegistry { return .{ .entries = self.entries, .index = self.index, }; } pub fn deinit(self: *OwnedKernelCallPipelinePackage) void { artifact_product.deinitKernelCallRegistryIndex(self.allocator, self.index); for (self.artifacts) |*artifact| artifact.deinit(); if (self.artifacts.len != 0) self.allocator.free(self.artifacts); if (self.entries.len != 0) self.allocator.free(self.entries); self.pipeline.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/descriptor.zig:3
Source: lib/accy/src/kernel/library/catalog/descriptor.zig:8
pub const OwnedDescriptor = struct { descriptor: Descriptor, specialization: ?entry.OwnedSpecialization = null, pub fn deinit(self: *OwnedDescriptor) void { if (self.specialization) |*specialization| specialization.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/filter.zig:13
pub const FilterCandidateDescriptors = struct { count: usize = 0, items: [8]OwnedDescriptor = undefined, pub fn slice(self: *const FilterCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *FilterCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/gather.zig:13
pub const GatherCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const GatherCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *GatherCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/histogram.zig:13
pub const HistogramCandidateDescriptors = struct { count: usize = 0, items: [2 * geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const HistogramCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *HistogramCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/image.zig:14
pub const ImageCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const ImageCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *ImageCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/linalg/matrix.zig:15
pub const MatrixProductCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const MatrixProductCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *MatrixProductCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/random/candidate.zig:6
pub const RandomCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const RandomCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *RandomCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/scan/prefix.zig:12
pub const PrefixSumCandidateDescriptors = struct { count: usize = 0, items: [8]OwnedDescriptor = undefined, pub fn slice(self: *const PrefixSumCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *PrefixSumCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/scatter/add.zig:13
pub const ScatterAddCandidateDescriptors = struct { count: usize = 0, items: [2 * geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const ScatterAddCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *ScatterAddCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/scatter/scatter.zig:13
pub const ScatterCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const ScatterCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *ScatterCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/segmented.zig:13
pub const SegmentSumCandidateDescriptors = struct { count: usize = 0, items: [2 * geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const SegmentSumCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *SegmentSumCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/sparse/candidate.zig:8
pub const SparseCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const SparseCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *SparseCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/spatial.zig:13
pub const SpatialCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const SpatialCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *SpatialCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/family/stencil.zig:14
pub const StencilWindowCandidateDescriptors = struct { count: usize = 0, items: [geometry.max_thread_candidates]OwnedDescriptor = undefined, pub fn slice(self: *const StencilWindowCandidateDescriptors) []const OwnedDescriptor { return self.items[0..self.count]; } pub fn deinit(self: *StencilWindowCandidateDescriptors) void { for (self.items[0..self.count]) |*descriptor| descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/library/catalog/query.zig:38
pub const ActivationQuery = struct { dtype: choir_abi.DType, kind: ActivationKind, extent: u64,};Source: lib/accy/src/kernel/library/catalog/query.zig:501
pub const ArtifactRequest = struct { target: []const u8, version: u32 = 1, options: entry.ArtifactOptions,};Source: lib/accy/src/kernel/library/catalog/query.zig:50
pub const AttentionQuery = struct { dtype: choir_abi.DType, kind: AttentionKind, query_indices: []const u8, key_indices: []const u8, value_indices: []const u8, output_indices: []const u8, query_dims: []const i64, key_dims: []const i64, value_dims: []const i64, output_dims: []const i64, schedule: ?AttentionSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:46
Source: lib/accy/src/kernel/library/catalog/query.zig:166
pub const BatchedMatrixProductQuery = struct { dtype: choir_abi.DType, lhs_indices: []const u8, rhs_indices: []const u8, output_indices: []const u8, lhs_dims: []const i64, rhs_dims: []const i64, output_dims: []const i64, schedule: ?BatchedMatrixProductSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:118
Source: lib/accy/src/kernel/library/catalog/query.zig:253
pub const CompactionPredicateKind = enum { nonzero, greater_than,};Source: lib/accy/src/kernel/library/catalog/query.zig:376
pub const FactorKind = union(enum) { batched_cholesky: struct { n: u32, batch: u64 }, batched_cholesky_solve: struct { n: u32, batch: u64 }, batched_inverse: struct { n: u32, batch: u64 },};Source: lib/accy/src/kernel/library/catalog/query.zig:392
/// A caller fills this request to get a batched Cholesky factorization, Cholesky solve or matrix/// inverse from the kernel library. The request names the element type, the operation with its/// matrix size `n` and batch count, the buffer layout, and an optional thread-block count. `layout`/// states how the matrices sit in the device buffer, row by row or interleaved across the batch./// Because the layout changes where each element is read, it is part of which kernel the request/// names, and it enters the kernel's name.pub const FactorQuery = struct { dtype: choir_abi.DType, kind: FactorKind, layout: FactorTileLayout = .row_major, schedule: ?FactorSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:382
pub const FactorSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:371
pub const FactorTileLayout = enum { row_major, interleaved,};Source: lib/accy/src/kernel/library/catalog/query.zig:262
pub const FilterQuery = struct { dtype: choir_abi.DType, predicate: CompactionPredicateKind = .nonzero, extent: u64, schedule: ?FilterSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:258
pub const FilterSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:82
pub const FusedLinalgEpilogue = union(enum) { bias_activation: ActivationKind,};Source: lib/accy/src/kernel/library/catalog/query.zig:86
pub const FusedMatrixProductQuery = struct { dtype: choir_abi.DType, epilogue: FusedLinalgEpilogue, lhs_indices: []const u8, rhs_indices: []const u8, bias_indices: []const u8, output_indices: []const u8, lhs_dims: []const i64, rhs_dims: []const i64, bias_dims: []const i64, output_dims: []const i64, schedule: ?MatrixProductSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:100
pub const FusedMatrixVectorProductQuery = struct { dtype: choir_abi.DType, epilogue: FusedLinalgEpilogue, matrix_indices: []const u8, vector_indices: []const u8, bias_indices: []const u8, output_indices: []const u8, matrix_dims: []const i64, vector_dims: []const i64, bias_dims: []const i64, output_dims: []const i64, schedule: ?MatrixVectorProductSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:64
pub const FusedQuery = union(enum) { vector: FusedVectorQuery, matrix_product: FusedMatrixProductQuery, matrix_vector_product: FusedMatrixVectorProductQuery, row_normalization: FusedRowNormalizationQuery,};Source: lib/accy/src/kernel/library/catalog/query.zig:130
pub const FusedRowNormalizationKind = union(enum) { residual: RowNormalizationKind,};Source: lib/accy/src/kernel/library/catalog/query.zig:134
pub const FusedRowNormalizationQuery = struct { dtype: choir_abi.DType, kind: FusedRowNormalizationKind, rows: u64, cols: u64, schedule: ?RowNormalizationSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:71
pub const FusedVectorKind = union(enum) { bias_activation: ActivationKind, gated_activation: ActivationKind,};Source: lib/accy/src/kernel/library/catalog/query.zig:76
pub const FusedVectorQuery = struct { dtype: choir_abi.DType, kind: FusedVectorKind, extent: u64,};Source: lib/accy/src/kernel/library/catalog/query.zig:244
pub const GatherQuery = struct { dtype: choir_abi.DType, outer: u64 = 1, axis_size: u64, gathered: u64, inner: u64 = 1, schedule: ?GatherSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:240
pub const GatherSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:303
pub const HistogramQuery = struct { dtype: choir_abi.DType, bins: u64, count: u64, binning: HistogramBinningPolicy = .lower_inclusive_upper_exclusive, schedule: ?HistogramSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:296
pub const HistogramSchedule = union(enum) { thread_blocks: u32, shared_bins: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:448
pub const ImageKind = union(enum) { blur_pass: struct { radius: u32 = 1, axis: library.image.Axis, }, resize_bilinear: struct { src_width: u64, src_height: u64, },};Source: lib/accy/src/kernel/library/catalog/query.zig:463
pub const ImageQuery = struct { dtype: choir_abi.DType, kind: ImageKind, width: u64, height: u64, schedule: ?ImageSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:459
Source: lib/accy/src/kernel/library/catalog/query.zig:144
pub const LayoutQuery = struct { dtype: choir_abi.DType, kind: LayoutKind, input_indices: []const u8, output_indices: []const u8, input_dims: []const i64, output_dims: []const i64,};Source: lib/accy/src/kernel/library/catalog/query.zig:155
pub const MatrixProductQuery = struct { dtype: choir_abi.DType, lhs_indices: []const u8, rhs_indices: []const u8, output_indices: []const u8, lhs_dims: []const i64, rhs_dims: []const i64, output_dims: []const i64, schedule: ?MatrixProductSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:114
Source: lib/accy/src/kernel/library/catalog/query.zig:177
pub const MatrixVectorProductQuery = struct { dtype: choir_abi.DType, matrix_indices: []const u8, vector_indices: []const u8, output_indices: []const u8, matrix_dims: []const i64, vector_dims: []const i64, output_dims: []const i64, schedule: ?MatrixVectorProductSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:122
pub const MatrixVectorProductSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:188
pub const OuterProductQuery = struct { dtype: choir_abi.DType, lhs_indices: []const u8, rhs_indices: []const u8, output_indices: []const u8, lhs_dims: []const i64, rhs_dims: []const i64, output_dims: []const i64, schedule: ?OuterProductSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:126
Source: lib/accy/src/kernel/library/catalog/query.zig:8
pub const Query = union(enum) { activation: ActivationQuery, attention: AttentionQuery, batched_matrix_product: BatchedMatrixProductQuery, fused: FusedQuery, gather: GatherQuery, layout: LayoutQuery, matrix_product: MatrixProductQuery, matrix_vector_product: MatrixVectorProductQuery, filter: FilterQuery, outer_product: OuterProductQuery, random: RandomQuery, reduction: ReductionQuery, row_normalization: RowNormalizationQuery, row_sparse_cross_entropy: RowSparseCrossEntropyQuery, scan: ScanQuery, sort: SortQuery, sparse: SparseQuery, spatial: SpatialQuery, image: ImageQuery, factor: FactorQuery, scatter: ScatterQuery, scatter_add: ScatterAddQuery, histogram: HistogramQuery, segmented: SegmentedQuery, stencil: StencilQuery,};Source: lib/accy/src/kernel/library/catalog/query.zig:269
pub const RandomAlgorithm = enum { philox, threefry, squares,};Source: lib/accy/src/kernel/library/catalog/query.zig:279
pub const RandomQuery = struct { dtype: choir_abi.DType, algorithm: RandomAlgorithm = .philox, count: u64, rounds: u32 = 0, schedule: ?RandomSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:275
pub const RandomSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:201
pub const ReductionOperand = struct { indices: []const u8, dims: []const i64,};Source: lib/accy/src/kernel/library/catalog/query.zig:206
pub const ReductionQuery = struct { dtype: choir_abi.DType, kind: ReductionKind, inputs: []const ReductionOperand, output_indices: []const u8, output_dims: []const i64,};Source: lib/accy/src/kernel/library/catalog/query.zig:221
pub const RowNormalizationQuery = struct { dtype: choir_abi.DType, kind: RowNormalizationKind, rows: u64, cols: u64, schedule: ?RowNormalizationSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:217
Source: lib/accy/src/kernel/library/catalog/query.zig:233
pub const RowSparseCrossEntropyQuery = struct { dtype: choir_abi.DType, rows: u64, classes: u64, schedule: ?RowSparseCrossEntropySchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:229
pub const RowSparseCrossEntropySchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:335
pub const ScanQuery = struct { dtype: choir_abi.DType, kind: ScanKind, extent: u64, schedule: ?ScanSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:331
pub const ScanSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:311
pub const ScatterAddQuery = struct { dtype: choir_abi.DType, outer: u64 = 1, axis_size: u64, updates: u64, inner: u64 = 1, schedule: ?ScatterAddSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:291
pub const ScatterAddSchedule = union(enum) { thread_blocks: u32, shared_bins: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:320
pub const ScatterQuery = struct { dtype: choir_abi.DType, outer: u64 = 1, axis_size: u64, updates: u64, inner: u64 = 1, schedule: ?ScatterSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:287
pub const ScatterSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:478
pub const SegmentedQuery = struct { dtype: choir_abi.DType, kind: SegmentedKind, segments: u64, total: u64, schedule: ?SegmentedSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:473
pub const SegmentedSchedule = union(enum) { thread_blocks: u32, warp_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:362
/// A caller fills this request to get a sort kernel from the kernel library, the package's/// hand-written kernel families, chosen by a typed request. The request names the element type, the/// sort operation, the number of elements, and `k` for the operations that keep only the first `k`/// results. `structure` picks one way to carry out the sort, such as a radix pass or a bitonic/// block, and `schedule` picks a thread-block size. Setting `structure` or `schedule` changes how/// the sort is built and leaves the sort that is computed the same.pub const SortQuery = struct { dtype: choir_abi.DType, kind: SortKind, extent: u64, k: u64 = 0, structure: ?SortStructure = null, schedule: ?SortSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:344
pub const SortSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:348
pub const SortStructure = enum { radix_split, radix_digit, bitonic_block, top_k_block, top_k_block_pairs,};Source: lib/accy/src/kernel/library/catalog/query.zig:406
pub const SparseKind = union(enum) { coo_spmv: struct { rows: u64, nnz: u64, x_extent: u64 }, csr_spmv: struct { rows: u64, nnz: u64, x_extent: u64 }, csr_spmm: struct { rows: u64, columns: u64, nnz: u64, x_extent: u64 }, ell_spmv: struct { rows: u64, slots: u64, x_extent: u64 }, sell_spmv: struct { rows: u64, slice_size: u64, values_size: u64, x_extent: u64 },};Source: lib/accy/src/kernel/library/catalog/query.zig:419
pub const SparseQuery = struct { dtype: choir_abi.DType, kind: SparseKind, structure: ?SparseStructure = null, schedule: ?SparseSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:414
pub const SparseSchedule = union(enum) { thread_blocks: u32, thread_blocks_2d: entry.Threads2D,};Source: lib/accy/src/kernel/library/catalog/query.zig:399
pub const SparseStructure = enum { element_thread, row_thread, row_warp, row_column_thread,};Source: lib/accy/src/kernel/library/catalog/query.zig:426
pub const SpatialKind = union(enum) { grid_cells, grid_count: struct { cells: u32 }, grid_neighbor_count: struct { cells: u32, stride: u32 },};Source: lib/accy/src/kernel/library/catalog/query.zig:441
/// A caller fills this request to get a grid kernel for points in the plane, such as assigning/// points to cells or counting neighbors. The request names the element type, the grid operation,/// the number of points, and an optional thread-block count. Each operation also carries the sizes/// fixed when the kernel is compiled, such as the cell count and, for neighbor counting, the/// stride, beside the point count, which is given at run time.pub const SpatialQuery = struct { dtype: choir_abi.DType, kind: SpatialKind, count: u64, schedule: ?SpatialSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:432
pub const SpatialSchedule = union(enum) { thread_blocks: u32,};Source: lib/accy/src/kernel/library/catalog/query.zig:492
pub const StencilQuery = struct { dtype: choir_abi.DType, kind: StencilKind, rows: u64, cols: u64, radius: u32 = 1, schedule: ?StencilSchedule = null,};Source: lib/accy/src/kernel/library/catalog/query.zig:488
Source: lib/accy/src/kernel/library/histogram/family/binning.zig:3
pub const Policy = enum(u64) { lower_inclusive_upper_exclusive = 0,};Source: lib/accy/src/kernel/library/catalog/artifact/owned.zig:15
pub fn createOwnedKernelCallArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, descriptor: OwnedDescriptor, options: entry.ArtifactOptions,) !kernel.OwnedKernelCallArtifact { return request_mod.createKernelCallArtifact(allocator, handle, .{ .target = descriptor.descriptor.metadata.target, .version = descriptor.descriptor.metadata.version, .options = options, }) catch |err| switch (err) { error.UnknownKernelLibraryEntry => try specialized.createSpecializedKernelCallArtifact(allocator, handle, descriptor, options), else => err, };}Source: lib/accy/src/kernel/library/catalog/artifact/owned.zig:31
pub fn createOwnedKernelCallArtifactRegistry( allocator: std.mem.Allocator, handle: kernel.BackendHandle, descriptors: []const OwnedDescriptor, options: entry.ArtifactOptions,) !OwnedKernelCallArtifactRegistry { if (descriptors.len == 0) return .{ .allocator = allocator }; const artifacts = try allocator.alloc(kernel.OwnedKernelCallArtifact, descriptors.len); var artifact_count: usize = 0; errdefer { for (artifacts[0..artifact_count]) |*artifact| artifact.deinit(); allocator.free(artifacts); } const entries = try allocator.alloc(artifact_product.KernelCallArtifact, descriptors.len); errdefer allocator.free(entries); for (descriptors, 0..) |descriptor, index| { artifacts[index] = try createOwnedKernelCallArtifact(allocator, handle, descriptor, options); artifact_count += 1; entries[index] = artifacts[index].entry(); } const index = try artifact_product.buildKernelCallRegistryIndex(allocator, entries); errdefer artifact_product.deinitKernelCallRegistryIndex(allocator, index); return .{ .allocator = allocator, .artifacts = artifacts, .entries = entries, .index = index, };}Source: lib/accy/src/kernel/library/catalog/artifact/pipeline.zig:16
pub fn createOwnedKernelCallPipelinePackage( allocator: std.mem.Allocator, handle: kernel.BackendHandle, descriptor: OwnedDescriptor, options: entry.ArtifactOptions,) !?OwnedKernelCallPipelinePackage { const metadata = descriptor.descriptor.metadata; return switch (metadata.category) { .scan => try createDeviceScanPipelinePackage(allocator, handle, metadata, options), .sort => try createRadixSortPipelinePackage(allocator, handle, metadata, options), else => null, };}Source: lib/accy/src/kernel/library/catalog/artifact/request.zig:9
pub fn createKernelCallArtifact( allocator: std.mem.Allocator, handle: kernel.BackendHandle, request: ArtifactRequest,) !kernel.OwnedKernelCallArtifact { inline for (registry.entries) |EntryType| { if (EntryType.version == request.version and std.mem.eql(u8, EntryType.target, request.target)) { return try EntryType.createKernelCallArtifact(allocator, handle, request.options); } } return error.UnknownKernelLibraryEntry;}Source: lib/accy/src/kernel/library/catalog/family/factor.zig:12
pub fn selectFactor(backing_allocator: std.mem.Allocator, query: FactorQuery) !?OwnedDescriptor { if (query.dtype != .f32) return null; const threads = factorQueryThreads(query) orelse return null; switch (query.kind) { .batched_cholesky => |facts| { const instance = factor_mod.BatchedCholesky{ .batch = facts.batch, .n = facts.n, .threads = threads, .layout = factorInstanceLayout(query.layout), }; if (!factor_mod.batchedCholeskyInstanceValid(instance)) return null; var specialization = try factor_mod.batchedCholeskyFamilySpecialization(backing_allocator, instance); errdefer specialization.deinit(); const lifetime_allocator = specialization.allocator(); const descriptor = Descriptor{ .name = try factor_mod.batchedCholeskyFamilyEntryName(lifetime_allocator, instance), .metadata = .{ .target = try factor_mod.batchedCholeskyFamilyTarget(lifetime_allocator, instance), .version = factor_mod.batched_cholesky_family_version, .layer = .logical, .category = .linalg, .specialization = specialization.value, }, }; if (!match_mod.factorDescriptorMatches(descriptor, query)) { specialization.deinit(); return null; } return .{ .descriptor = descriptor, .specialization = specialization }; }, .batched_cholesky_solve => |facts| { const instance = factor_mod.BatchedCholeskySolve{ .batch = facts.batch, .n = facts.n, .threads = threads, .layout = factorInstanceLayout(query.layout), }; if (!factor_mod.batchedCholeskySolveInstanceValid(instance)) return null; var specialization = try factor_mod.batchedCholeskySolveFamilySpecialization(backing_allocator, instance); errdefer specialization.deinit(); const lifetime_allocator = specialization.allocator(); const descriptor = Descriptor{ .name = try factor_mod.batchedCholeskySolveFamilyEntryName(lifetime_allocator, instance), .metadata = .{ .target = try factor_mod.batchedCholeskySolveFamilyTarget(lifetime_allocator, instance), .version = factor_mod.batched_cholesky_solve_family_version, .layer = .logical, .category = .linalg, .specialization = specialization.value, }, }; if (!match_mod.factorDescriptorMatches(descriptor, query)) { specialization.deinit(); return null; } return .{ .descriptor = descriptor, .specialization = specialization }; }, .batched_inverse => |facts| { const instance = factor_mod.BatchedInverse{ .batch = facts.batch, .n = facts.n, .threads = threads, .layout = factorInstanceLayout(query.layout), }; if (!factor_mod.batchedInverseInstanceValid(instance)) return null; var specialization = try factor_mod.batchedInverseFamilySpecialization(backing_allocator, instance); errdefer specialization.deinit(); const lifetime_allocator = specialization.allocator(); const descriptor = Descriptor{ .name = try factor_mod.batchedInverseFamilyEntryName(lifetime_allocator, instance), .metadata = .{ .target = try factor_mod.batchedInverseFamilyTarget(lifetime_allocator, instance), .version = factor_mod.batched_inverse_family_version, .layer = .logical, .category = .linalg, .specialization = specialization.value, }, }; if (!match_mod.factorDescriptorMatches(descriptor, query)) { specialization.deinit(); return null; } return .{ .descriptor = descriptor, .specialization = specialization }; }, }}Source: lib/accy/src/kernel/library/catalog/family/filter.zig:33
pub fn selectFilterCandidates( backing_allocator: std.mem.Allocator, query: FilterQuery,) !FilterCandidateDescriptors { var result = FilterCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalFilter(query)) return result; if (query.schedule != null) { if (try selectFilter(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = compaction.filterThreadCandidatesForExtent(query.extent); for (thread_candidates.slice()) |threads| { const instance = compaction.Filter{ .extent = query.extent, .dtype = query.dtype, .predicate = filterInstancePredicate(query.predicate), .threads = threads, }; if (try filterDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/gather.zig:33
pub fn selectGatherCandidates( backing_allocator: std.mem.Allocator, query: GatherQuery,) !GatherCandidateDescriptors { var result = GatherCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalGather(query)) return result; if (query.schedule != null) { if (try selectGather(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const total = query.outer * query.gathered * query.inner; const thread_candidates = indexing.gatherThreadCandidatesForTotal(total); for (thread_candidates.slice()) |threads| { const instance = indexing.Gather{ .outer = query.outer, .axis_size = query.axis_size, .gathered = query.gathered, .inner = query.inner, .dtype = query.dtype, .threads = threads, }; if (try gatherDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/histogram.zig:33
pub fn selectHistogramCandidates( backing_allocator: std.mem.Allocator, query: HistogramQuery,) !HistogramCandidateDescriptors { var result = HistogramCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalHistogram(query)) return result; if (query.schedule != null) { if (try selectHistogram(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = histogram_mod.histogramThreadCandidatesForCount(query.count); const variants = [_]histogram_mod.HistogramVariant{ .direct, .shared_bins }; for (variants) |variant| { for (thread_candidates.slice()) |threads| { const instance = histogram_mod.Histogram{ .bins = query.bins, .count = query.count, .dtype = query.dtype, .binning = query.binning, .variant = variant, .threads = threads, }; if (!histogram_mod.histogramInstanceValid(instance)) continue; if (result.count >= result.items.len) break; if (try histogramDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } } return result;}Source: lib/accy/src/kernel/library/catalog/family/image.zig:34
pub fn selectImageCandidates( backing_allocator: std.mem.Allocator, query: ImageQuery,) !ImageCandidateDescriptors { var result = ImageCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalImage(query)) return result; if (query.schedule != null) { if (try selectImage(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = image.imageThreadCandidatesForExtents(query.width, query.height); for (thread_candidates.slice()) |threads| { if (result.count >= result.items.len) break; if (try imageDescriptorForThreads(backing_allocator, query, threads)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/linalg/matrix.zig:37
pub fn selectMatrixProductCandidates( backing_allocator: std.mem.Allocator, query: MatrixProductQuery,) !MatrixProductCandidateDescriptors { var result = MatrixProductCandidateDescriptors{}; errdefer result.deinit(); const accumulation_dtype = linalg.matrixProductAccumulationDType(query.dtype) orelse return result; if (!match_mod.canonicalMatrixProduct(query)) return result; const shape = match_mod.matrixProductShape(query.lhs_dims, query.rhs_dims, query.output_dims) orelse return result; if (query.schedule != null) { if (try selectMatrixProduct(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = linalg.matrixProductThreadCandidatesForExtents(shape.m, shape.n); for (thread_candidates.slice()) |threads| { const instance = linalg.MatrixProduct{ .m = shape.m, .n = shape.n, .k = shape.k, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, }; if (try matrixProductDescriptorForInstance(backing_allocator, instance, shape, null, query.dtype)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/random/root.zig:27
pub fn selectRandomCandidates( backing_allocator: std.mem.Allocator, query: RandomQuery,) !RandomCandidateDescriptors { var result = RandomCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalRandom(query)) return result; if (query.schedule != null) { if (try selectRandom(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } switch (query.algorithm) { .philox => try philox.appendCandidates(backing_allocator, query, &result), .threefry => try threefry.appendCandidates(backing_allocator, query, &result), .squares => try squares.appendCandidates(backing_allocator, query, &result), } return result;}Source: lib/accy/src/kernel/library/catalog/family/scan/prefix.zig:38
pub fn selectPrefixSumCandidates( backing_allocator: std.mem.Allocator, query: ScanQuery,) !PrefixSumCandidateDescriptors { var result = PrefixSumCandidateDescriptors{}; errdefer result.deinit(); if (query.schedule != null) { if (try selectPrefixSum(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } if (canonicalPrefixSum(query)) { const thread_candidates = scan.prefixSumThreadCandidatesForExtent(query.extent); for (thread_candidates.slice()) |threads| { const instance = scan.PrefixSum{ .extent = query.extent, .dtype = query.dtype, .mode = scan.PrefixSumMode.fromOperation(query.kind), .threads = threads, }; if (try prefixSumDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result; } if (canonicalDeviceScan(query)) { const thread_candidates = scan.deviceScanThreadCandidatesForExtent(query.extent); for (thread_candidates.slice()) |threads| { const instance = scan.DeviceScan{ .extent = query.extent, .dtype = query.dtype, .mode = scan.PrefixSumMode.fromOperation(query.kind), .threads = threads, }; if (try deviceScanDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } } return result;}Source: lib/accy/src/kernel/library/catalog/family/scatter/add.zig:33
pub fn selectScatterAddCandidates( backing_allocator: std.mem.Allocator, query: ScatterAddQuery,) !ScatterAddCandidateDescriptors { var result = ScatterAddCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalScatterAdd(query)) return result; if (query.schedule != null) { if (try selectScatterAdd(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const query_total = scatterAddQueryTotal(query) orelse return result; const thread_candidates = indexing.scatterAddThreadCandidatesForTotal(query_total); const variants = [_]indexing.ScatterAddVariant{ .direct, .shared_bins }; for (variants) |variant| { for (thread_candidates.slice()) |threads| { const instance = indexing.ScatterAdd{ .outer = query.outer, .axis_size = query.axis_size, .updates = query.updates, .inner = query.inner, .dtype = query.dtype, .variant = variant, .threads = threads, }; if (!indexing.scatterAddInstanceValid(instance)) continue; if (result.count >= result.items.len) break; if (try scatterAddDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } } return result;}Source: lib/accy/src/kernel/library/catalog/family/scatter/scatter.zig:33
pub fn selectScatterCandidates( backing_allocator: std.mem.Allocator, query: ScatterQuery,) !ScatterCandidateDescriptors { var result = ScatterCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalScatter(query)) return result; if (query.schedule != null) { if (try selectScatter(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const total = query.outer * query.axis_size * query.inner; const thread_candidates = indexing.scatterThreadCandidatesForTotal(total); for (thread_candidates.slice()) |threads| { const instance = indexing.Scatter{ .outer = query.outer, .axis_size = query.axis_size, .updates = query.updates, .inner = query.inner, .dtype = query.dtype, .threads = threads, }; if (try scatterDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/segmented.zig:33
pub fn selectSegmentSumCandidates( backing_allocator: std.mem.Allocator, query: SegmentedQuery,) !SegmentSumCandidateDescriptors { var result = SegmentSumCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalSegmentSum(query)) return result; if (query.schedule != null) { if (try selectSegmentSum(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = segmented.segmentSumThreadCandidatesForSegments(query.segments); for (thread_candidates.slice()) |threads| { const instance = segmented.SegmentSum{ .segments = query.segments, .total = query.total, .dtype = query.dtype, .threads = threads, }; if (try segmentSumDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } const warp_extent = query.segments * segmented.segment_sum_warp_size; const warp_candidates = segmented.segmentSumThreadCandidatesForSegments(warp_extent); for (warp_candidates.slice()) |threads| { if (!segmented.segmentSumGranularityValid(.warp, threads)) continue; const instance = segmented.SegmentSum{ .segments = query.segments, .total = query.total, .dtype = query.dtype, .granularity = .warp, .threads = threads, }; if (try segmentSumDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/sort/radix.zig:14
pub fn selectRadixSortWithTuning( backing_allocator: std.mem.Allocator, query: SortQuery, reader: tuning_mod.FamilyTuningReader,) !?OwnedDescriptor { if (query.structure != null) return selectRadixSort(backing_allocator, query); if (query.dtype != .i32 or query.kind != .radix_ascending) return null; const threads = sort_mod.radixSplitThreadsForExtent(query.extent) orelse return null; var instance = sort_mod.RadixSplit{ .extent = query.extent, .threads = threads }; if (query.schedule) |requested| { switch (requested) { .thread_blocks => |requested_threads| instance.threads = requested_threads, } } const resolved = try sort_mod.resolveRadixSplitStructure(backing_allocator, reader, instance); var tuned = query; tuned.structure = if (resolved) |structure| switch (structure) { .radix_split => .radix_split, .radix_digit => .radix_digit, } else null; return selectRadixSort(backing_allocator, tuned);}Source: lib/accy/src/kernel/library/catalog/family/sparse/selection.zig:17
pub fn selectSparse(backing_allocator: std.mem.Allocator, query: SparseQuery) !?OwnedDescriptor { if (!structure_mod.canonicalSparse(query)) return null; const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return null; switch (query.kind) { .coo_spmv => |facts| { const structure = structure_mod.sparseResolvedCooStructure(query) orelse return null; const coo_accumulation_dtype = sparse_mod.spmvCooAccumulationDTypeForStructure(structure, query.dtype) orelse return null; const threads = thread_mod.sparseQueryCooThreads(query, facts.rows, facts.nnz, structure) orelse return null; return try descriptor_build.spmvCooDescriptorForInstance(backing_allocator, query, .{ .rows = facts.rows, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = coo_accumulation_dtype, .threads = threads, .structure = structure, }); }, .csr_spmv => |facts| { const structure = structure_mod.sparseResolvedSpmvStructure(query) orelse return null; const threads = thread_mod.sparseQuerySpmvThreads(query, facts.rows, structure) orelse return null; return try descriptor_build.spmvCsrDescriptorForInstance(backing_allocator, query, .{ .rows = facts.rows, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); }, .ell_spmv => |facts| { const structure = structure_mod.sparseResolvedEllStructure(query) orelse return null; const threads = thread_mod.sparseQueryEllThreads(query, facts.rows) orelse return null; return try descriptor_build.spmvEllDescriptorForInstance(backing_allocator, query, .{ .rows = facts.rows, .slots = facts.slots, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); }, .sell_spmv => |facts| { const structure = structure_mod.sparseResolvedSellStructure(query) orelse return null; const threads = thread_mod.sparseQuerySellThreads(query, facts.rows) orelse return null; return try descriptor_build.spmvSellDescriptorForInstance(backing_allocator, query, .{ .rows = facts.rows, .slice_size = facts.slice_size, .values_size = facts.values_size, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); }, .csr_spmm => |facts| { const structure = structure_mod.sparseResolvedSpmmStructure(query) orelse return null; const threads = thread_mod.sparseQuerySpmmThreads(query, facts) orelse return null; return try descriptor_build.spmmCsrDescriptorForInstance(backing_allocator, query, .{ .rows = facts.rows, .columns = facts.columns, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); }, }}Source: lib/accy/src/kernel/library/catalog/family/sparse/selection.zig:92
pub fn selectSparseCandidates( backing_allocator: std.mem.Allocator, query: SparseQuery,) !SparseCandidateDescriptors { var result = SparseCandidateDescriptors{}; errdefer result.deinit(); if (!structure_mod.canonicalSparse(query)) return result; switch (query.kind) { .coo_spmv => { if (query.structure != null) { if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const structures = [_]query_mod.SparseStructure{ .element_thread, .row_thread }; for (structures) |structure| { var candidate = query; candidate.structure = structure; if (try selectSparse(backing_allocator, candidate)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result; }, .csr_spmv => { if (query.structure != null) { if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const structures = [_]query_mod.SparseStructure{ .row_thread, .row_warp }; for (structures) |structure| { var candidate = query; candidate.structure = structure; if (try selectSparse(backing_allocator, candidate)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result; }, .ell_spmv => |facts| { if (query.structure != null or query.schedule != null) { if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return result; const structure = structure_mod.sparseResolvedEllStructure(query) orelse return result; const thread_candidates = sparse_mod.spmvEllThreadCandidatesForRows(facts.rows); for (thread_candidates.slice()) |threads| { var candidate = sparse_mod.SpmvEll{ .rows = facts.rows, .slots = facts.slots, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }; candidate.threads = sparse_mod.spmvEllRepresentableThreads(candidate) orelse continue; var scheduled = query; scheduled.schedule = .{ .thread_blocks = candidate.threads }; if (try descriptor_build.spmvEllDescriptorForInstance(backing_allocator, scheduled, candidate)) |descriptor_owned| { var descriptor = descriptor_owned; if (candidate_mod.sparseCandidateTargetsContain(result.slice(), descriptor.descriptor.metadata.target)) { descriptor.deinit(); continue; } result.items[result.count] = descriptor; result.count += 1; } } return result; }, .sell_spmv => |facts| { if (query.structure != null or query.schedule != null) { if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return result; const structure = structure_mod.sparseResolvedSellStructure(query) orelse return result; const thread_candidates = sparse_mod.spmvSellThreadCandidatesForRows(facts.rows); for (thread_candidates.slice()) |threads| { var candidate = sparse_mod.SpmvSell{ .rows = facts.rows, .slice_size = facts.slice_size, .values_size = facts.values_size, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }; candidate.threads = sparse_mod.spmvSellRepresentableThreads(candidate) orelse continue; var scheduled = query; scheduled.schedule = .{ .thread_blocks = candidate.threads }; if (try descriptor_build.spmvSellDescriptorForInstance(backing_allocator, scheduled, candidate)) |descriptor_owned| { var descriptor = descriptor_owned; if (candidate_mod.sparseCandidateTargetsContain(result.slice(), descriptor.descriptor.metadata.target)) { descriptor.deinit(); continue; } result.items[result.count] = descriptor; result.count += 1; } } return result; }, .csr_spmm => |facts| { if (query.structure != null or query.schedule != null) { if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } if (try selectSparse(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return result; const structure = structure_mod.sparseResolvedSpmmStructure(query) orelse return result; const thread_candidates = sparse_mod.spmmCsrThreadCandidatesForExtents(facts.rows, facts.columns); for (thread_candidates.slice()) |threads| { var candidate = sparse_mod.SpmmCsr{ .rows = facts.rows, .columns = facts.columns, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }; candidate.threads = sparse_mod.spmmCsrRepresentableThreads(candidate) orelse continue; var scheduled = query; scheduled.schedule = .{ .thread_blocks_2d = candidate.threads }; if (try descriptor_build.spmmCsrDescriptorForInstance(backing_allocator, scheduled, candidate)) |descriptor_owned| { var descriptor = descriptor_owned; if (candidate_mod.sparseCandidateTargetsContain(result.slice(), descriptor.descriptor.metadata.target)) { descriptor.deinit(); continue; } result.items[result.count] = descriptor; result.count += 1; } } return result; }, }}Source: lib/accy/src/kernel/library/catalog/family/sparse/selection.zig:264
pub fn selectSparseWithTuning( backing_allocator: std.mem.Allocator, query: SparseQuery, reader: tuning_mod.FamilyTuningReader,) !?OwnedDescriptor { if (!structure_mod.canonicalSparse(query)) return null; if (query.structure != null) return selectSparse(backing_allocator, query); switch (query.kind) { .coo_spmv => |facts| { const structure = structure_mod.sparseResolvedCooStructure(query) orelse return null; const accumulation_dtype = sparse_mod.spmvCooAccumulationDTypeForStructure(structure, query.dtype) orelse return null; const threads = thread_mod.sparseQueryCooThreads(query, facts.rows, facts.nnz, structure) orelse return null; const resolved = try sparse_mod.resolveSpmvCooStructure(backing_allocator, reader, .{ .rows = facts.rows, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); var tuned = query; tuned.structure = if (resolved) |resolved_structure| switch (resolved_structure) { .element_thread => .element_thread, .row_thread => .row_thread, } else return selectSparse(backing_allocator, query); return selectSparse(backing_allocator, tuned); }, .csr_spmv => |facts| { const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return null; const structure = structure_mod.sparseResolvedSpmvStructure(query) orelse return null; const threads = thread_mod.sparseQuerySpmvThreads(query, facts.rows, structure) orelse return null; const resolved = try sparse_mod.resolveSpmvCsrStructure(backing_allocator, reader, .{ .rows = facts.rows, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); var tuned = query; tuned.structure = if (resolved) |resolved_structure| switch (resolved_structure) { .row_thread => .row_thread, .row_warp => .row_warp, } else return selectSparse(backing_allocator, query); return selectSparse(backing_allocator, tuned); }, .ell_spmv => |facts| { if (query.schedule != null) return selectSparse(backing_allocator, query); const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return null; const structure = structure_mod.sparseResolvedEllStructure(query) orelse return null; const threads = thread_mod.sparseQueryEllThreads(query, facts.rows) orelse return null; const resolved = try sparse_mod.resolveSpmvEllThreads(backing_allocator, reader, .{ .rows = facts.rows, .slots = facts.slots, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); var tuned = query; tuned.schedule = if (resolved) |resolved_threads| .{ .thread_blocks = resolved_threads } else return selectSparse(backing_allocator, query); return selectSparse(backing_allocator, tuned); }, .sell_spmv => |facts| { if (query.schedule != null) return selectSparse(backing_allocator, query); const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return null; const structure = structure_mod.sparseResolvedSellStructure(query) orelse return null; const threads = thread_mod.sparseQuerySellThreads(query, facts.rows) orelse return null; const resolved = try sparse_mod.resolveSpmvSellThreads(backing_allocator, reader, .{ .rows = facts.rows, .slice_size = facts.slice_size, .values_size = facts.values_size, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); var tuned = query; tuned.schedule = if (resolved) |resolved_threads| .{ .thread_blocks = resolved_threads } else return selectSparse(backing_allocator, query); return selectSparse(backing_allocator, tuned); }, .csr_spmm => |facts| { if (query.schedule != null) return selectSparse(backing_allocator, query); const accumulation_dtype = sparse_mod.sparseAccumulationDType(query.dtype) orelse return null; const structure = structure_mod.sparseResolvedSpmmStructure(query) orelse return null; const threads = thread_mod.sparseQuerySpmmThreads(query, facts) orelse return null; const resolved = try sparse_mod.resolveSpmmCsrThreads(backing_allocator, reader, .{ .rows = facts.rows, .columns = facts.columns, .nnz = facts.nnz, .x_extent = facts.x_extent, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, .structure = structure, }); var tuned = query; tuned.schedule = if (resolved) |resolved_threads| .{ .thread_blocks_2d = resolved_threads } else return selectSparse(backing_allocator, query); return selectSparse(backing_allocator, tuned); }, }}Source: lib/accy/src/kernel/library/catalog/family/spatial.zig:27
pub fn selectSpatial(backing_allocator: std.mem.Allocator, query: SpatialQuery) !?OwnedDescriptor { if (!canonicalSpatial(query)) return null; const threads = spatialQueryThreads(query) orelse return null; return try spatialDescriptorForThreads(backing_allocator, query, threads);}Source: lib/accy/src/kernel/library/catalog/family/spatial.zig:33
pub fn selectSpatialCandidates( backing_allocator: std.mem.Allocator, query: SpatialQuery,) !SpatialCandidateDescriptors { var result = SpatialCandidateDescriptors{}; errdefer result.deinit(); if (!canonicalSpatial(query)) return result; if (query.schedule != null) { if (try selectSpatial(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = spatial_mod.spatialThreadCandidatesForCount(query.count); for (thread_candidates.slice()) |threads| { if (result.count >= result.items.len) break; if (try spatialDescriptorForThreads(backing_allocator, query, threads)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/family/stencil.zig:35
pub fn selectStencilWindowCandidates( backing_allocator: std.mem.Allocator, query: StencilQuery,) !StencilWindowCandidateDescriptors { var result = StencilWindowCandidateDescriptors{}; errdefer result.deinit(); const accumulation_dtype = stencil.windowAccumulationDType(query.dtype) orelse return result; if (!canonicalStencilWindow(query)) return result; if (query.schedule != null) { if (try selectStencilWindow(backing_allocator, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } return result; } const thread_candidates = stencil.windowThreadCandidatesForExtents(query.rows, query.cols); for (thread_candidates.slice()) |threads| { const instance = stencil.Window{ .rows = query.rows, .cols = query.cols, .radius = query.radius, .dtype = query.dtype, .accumulation_dtype = accumulation_dtype, .threads = threads, }; if (try stencilWindowDescriptorForInstance(backing_allocator, instance, query)) |descriptor| { result.items[result.count] = descriptor; result.count += 1; } } return result;}Source: lib/accy/src/kernel/library/catalog/registry.zig:63
pub const descriptors = buildDescriptors(entries);Source: lib/accy/src/kernel/library/catalog/registry.zig:20
pub const entries = .{ attention.ScaledDotProductAttention2x2x3x2x2F32, elementwise.VectorAdd8F32, elementwise.Axpy8F32, elementwise.Gelu8F32, elementwise.Relu8F32, elementwise.Silu8F32, elementwise.AuthoredScale8F32, fused.BiasGelu8F32, fused.BiasRelu8F32, fused.BiasSilu8F32, fused.GeGlu8F32, fused.ReGlu8F32, fused.SwiGlu8F32, fused.MatrixProductBiasGelu2x3x4F32, fused.MatrixProductBiasGelu2x3x4ThreadBlocks1x2F32, fused.MatrixProductBiasRelu2x3x4F32, fused.MatrixProductBiasSilu2x3x4F32, fused.MatrixVectorProductBiasGelu4x8F32, fused.MatrixVectorProductBiasRelu4x8F32, fused.MatrixVectorProductBiasSilu4x8F32, normalization.RowResidualRmsNorm2x4F32, layout.Transpose8x16F32, reduction.Sum8F32, reduction.Dot8F32, normalization.RowSoftmax2x4F32, normalization.RowSoftmax2x4ThreadBlocks2x2F32, normalization.RowLogSoftmax2x4F32, normalization.RowRmsNorm2x4F32, normalization.RowLayerNorm2x4F32, normalization.RowAffineLayerNorm2x4F32, linalg.MatrixProduct4x16x8F32, linalg.MatrixProduct4x16x8ThreadBlocks4x2F32, stencil.Window2x3R1F32, indexing.Gather8F32, indexing.Scatter8F32, compaction.Filter8F32, random.Philox8F32, random.Threefry8F32, segmented.SegmentSum4F32, scan.PrefixSum8F32,};Source: lib/accy/src/kernel/library/catalog/registry.zig:80
pub fn findEntry(target: []const u8, version: u32) ?Descriptor { for (descriptors) |descriptor| { if (descriptor.metadata.version != version) continue; if (!std.mem.eql(u8, descriptor.metadata.target, target)) continue; return descriptor; } return null;}Source: lib/accy/src/kernel/library/catalog/select/root.zig:13
pub fn select(query: Query) ?Descriptor { return static.select(query);}Source: lib/accy/src/kernel/library/catalog/select/root.zig:17
pub fn selectOwned(backing_allocator: std.mem.Allocator, query: Query) !?OwnedDescriptor { return owned.selectOwned(backing_allocator, query);}Source: lib/accy/src/kernel/library/catalog/root.zig
const artifact_mod = @import("artifact/root.zig");const descriptor_mod = @import("descriptor.zig");const query_mod = @import("query.zig");const registry_mod = @import("registry.zig");const family_mod = @import("family/root.zig");const select_mod = @import("select/root.zig");pub const Descriptor = descriptor_mod.Descriptor;pub const OwnedDescriptor = descriptor_mod.OwnedDescriptor;pub const OwnedKernelCallArtifactRegistry = artifact_mod.OwnedKernelCallArtifactRegistry;pub const OwnedKernelCallPipelinePackage = artifact_mod.OwnedKernelCallPipelinePackage;pub const Query = query_mod.Query;pub const ActivationKind = query_mod.ActivationKind;pub const ActivationQuery = query_mod.ActivationQuery;pub const AttentionKind = query_mod.AttentionKind;pub const AttentionSchedule = query_mod.AttentionSchedule;pub const AttentionQuery = query_mod.AttentionQuery;pub const FusedQuery = query_mod.FusedQuery;pub const FusedVectorKind = query_mod.FusedVectorKind;pub const FusedVectorQuery = query_mod.FusedVectorQuery;pub const FusedLinalgEpilogue = query_mod.FusedLinalgEpilogue;pub const FusedMatrixProductQuery = query_mod.FusedMatrixProductQuery;pub const FusedMatrixVectorProductQuery = query_mod.FusedMatrixVectorProductQuery;pub const MatrixProductSchedule = query_mod.MatrixProductSchedule;pub const BatchedMatrixProductSchedule = query_mod.BatchedMatrixProductSchedule;pub const MatrixVectorProductSchedule = query_mod.MatrixVectorProductSchedule;pub const OuterProductSchedule = query_mod.OuterProductSchedule;pub const FusedRowNormalizationKind = query_mod.FusedRowNormalizationKind;pub const FusedRowNormalizationQuery = query_mod.FusedRowNormalizationQuery;pub const LayoutKind = query_mod.LayoutKind;pub const LayoutQuery = query_mod.LayoutQuery;pub const TransposeQuery = query_mod.TransposeQuery;pub const MatrixProductQuery = query_mod.MatrixProductQuery;pub const MatrixProductCandidateDescriptors = family_mod.MatrixProductCandidateDescriptors;pub const BatchedMatrixProductQuery = query_mod.BatchedMatrixProductQuery;pub const MatrixVectorProductQuery = query_mod.MatrixVectorProductQuery;pub const OuterProductQuery = query_mod.OuterProductQuery;pub const ReductionKind = query_mod.ReductionKind;pub const ReductionOperand = query_mod.ReductionOperand;pub const ReductionQuery = query_mod.ReductionQuery;pub const RowNormalizationParameterization = query_mod.RowNormalizationParameterization;pub const RowNormalizationKind = query_mod.RowNormalizationKind;pub const RowNormalizationSchedule = query_mod.RowNormalizationSchedule;pub const RowNormalizationQuery = query_mod.RowNormalizationQuery;pub const RowSparseCrossEntropyQuery = query_mod.RowSparseCrossEntropyQuery;pub const RowSparseCrossEntropySchedule = query_mod.RowSparseCrossEntropySchedule;pub const GatherSchedule = query_mod.GatherSchedule;pub const GatherQuery = query_mod.GatherQuery;pub const GatherCandidateDescriptors = family_mod.GatherCandidateDescriptors;pub const ScanKind = query_mod.ScanKind;pub const ScanSchedule = query_mod.ScanSchedule;pub const ScanQuery = query_mod.ScanQuery;pub const SortKind = query_mod.SortKind;pub const SortQuery = query_mod.SortQuery;pub const SortSchedule = query_mod.SortSchedule;pub const SortStructure = query_mod.SortStructure;pub const PrefixSumCandidateDescriptors = family_mod.PrefixSumCandidateDescriptors;pub const CompactionPredicateKind = query_mod.CompactionPredicateKind;pub const FilterSchedule = query_mod.FilterSchedule;pub const FilterQuery = query_mod.FilterQuery;pub const FilterCandidateDescriptors = family_mod.FilterCandidateDescriptors;pub const RandomAlgorithm = query_mod.RandomAlgorithm;pub const RandomSchedule = query_mod.RandomSchedule;pub const RandomQuery = query_mod.RandomQuery;pub const RandomCandidateDescriptors = family_mod.RandomCandidateDescriptors;pub const ScatterSchedule = query_mod.ScatterSchedule;pub const ScatterQuery = query_mod.ScatterQuery;pub const ScatterCandidateDescriptors = family_mod.ScatterCandidateDescriptors;pub const ScatterAddSchedule = query_mod.ScatterAddSchedule;pub const ScatterAddQuery = query_mod.ScatterAddQuery;pub const ScatterAddCandidateDescriptors = family_mod.ScatterAddCandidateDescriptors;pub const HistogramSchedule = query_mod.HistogramSchedule;pub const HistogramBinningPolicy = query_mod.HistogramBinningPolicy;pub const HistogramQuery = query_mod.HistogramQuery;pub const HistogramCandidateDescriptors = family_mod.HistogramCandidateDescriptors;pub const FactorKind = query_mod.FactorKind;pub const FactorTileLayout = query_mod.FactorTileLayout;pub const FactorSchedule = query_mod.FactorSchedule;pub const FactorQuery = query_mod.FactorQuery;pub const SparseKind = query_mod.SparseKind;pub const SparseStructure = query_mod.SparseStructure;pub const SparseSchedule = query_mod.SparseSchedule;pub const SparseQuery = query_mod.SparseQuery;pub const SparseCandidateDescriptors = family_mod.SparseCandidateDescriptors;pub const SpatialKind = query_mod.SpatialKind;pub const SpatialSchedule = query_mod.SpatialSchedule;pub const SpatialQuery = query_mod.SpatialQuery;pub const SpatialCandidateDescriptors = family_mod.SpatialCandidateDescriptors;pub const ImageKind = query_mod.ImageKind;pub const ImageSchedule = query_mod.ImageSchedule;pub const ImageQuery = query_mod.ImageQuery;pub const ImageCandidateDescriptors = family_mod.ImageCandidateDescriptors;pub const SegmentedKind = query_mod.SegmentedKind;pub const SegmentedSchedule = query_mod.SegmentedSchedule;pub const SegmentedQuery = query_mod.SegmentedQuery;pub const SegmentSumCandidateDescriptors = family_mod.SegmentSumCandidateDescriptors;pub const StencilKind = query_mod.StencilKind;pub const StencilSchedule = query_mod.StencilSchedule;pub const StencilQuery = query_mod.StencilQuery;pub const StencilWindowCandidateDescriptors = family_mod.StencilWindowCandidateDescriptors;pub const ArtifactRequest = query_mod.ArtifactRequest;pub const entries = registry_mod.entries;pub const descriptors = registry_mod.descriptors;pub const findEntry = registry_mod.findEntry;pub const createKernelCallArtifact = artifact_mod.createKernelCallArtifact;pub const createOwnedKernelCallArtifact = artifact_mod.createOwnedKernelCallArtifact;pub const createOwnedKernelCallPipelinePackage = artifact_mod.createOwnedKernelCallPipelinePackage;pub const createOwnedKernelCallArtifactRegistry = artifact_mod.createOwnedKernelCallArtifactRegistry;pub const select = select_mod.select;pub const selectOwned = select_mod.selectOwned;pub const selectOwnedMatrixProductCandidates = family_mod.selectMatrixProductCandidates;pub const selectOwnedStencilWindowCandidates = family_mod.selectStencilWindowCandidates;pub const selectOwnedGatherCandidates = family_mod.selectGatherCandidates;pub const selectOwnedScatterCandidates = family_mod.selectScatterCandidates;pub const selectOwnedScatterAddCandidates = family_mod.selectScatterAddCandidates;pub const selectOwnedHistogramCandidates = family_mod.selectHistogramCandidates;pub const selectOwnedFactor = family_mod.selectFactor;pub const selectOwnedSparse = family_mod.selectSparse;pub const selectOwnedSparseCandidates = family_mod.selectSparseCandidates;pub const selectSparseWithTuning = family_mod.selectSparseWithTuning;pub const selectOwnedSpatial = family_mod.selectSpatial;pub const selectOwnedSpatialCandidates = family_mod.selectSpatialCandidates;pub const selectOwnedImageCandidates = family_mod.selectImageCandidates;pub const selectOwnedRandomCandidates = family_mod.selectRandomCandidates;pub const selectOwnedFilterCandidates = family_mod.selectFilterCandidates;pub const selectOwnedPrefixSumCandidates = family_mod.selectPrefixSumCandidates;pub const selectRadixSortWithTuning = family_mod.selectRadixSortWithTuning;pub const selectOwnedSegmentSumCandidates = family_mod.selectSegmentSumCandidates;Source: lib/accy/src/kernel/library/root.zig:1
pub const catalog = @import("catalog/root.zig");Complete caller list for kernel.library.createOwnedKernelCallArtifact
10 direct callers.
tiny.accy.kernel.library.createOwnedKernelCallArtifactRegistry[function] atlib/accy/src/kernel/library/catalog/artifact/owned.zig:31lib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_rejects_malformed_factor_descriptor_artifacts[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:567in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_rejects_malformed_sparse_descriptor_artifacts[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:954in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_rejects_malformed_spatial_descriptor_artifacts[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:1117in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.scan_tests.test_kernel_library_catalog_device_scan_pipeline_descriptor_declines_artifact_creation[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3436in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.selection_matrix_vector_tests.test_kernel_library_catalog_builds_matrix_vector_product_scheduled_artifact[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:4890in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.sort_tests.test_kernel_library_catalog_selects_and_dispatches_block_top-k_families[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:4474in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.sort_tests.test_kernel_library_catalog_selects_and_dispatches_radix_sort_pipelines[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:4317in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.variants_tests.test_kernel_library_catalog_creates_batched_matrix_product_family_artifact_from_owned_descriptor[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:1336in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.variants_tests.test_kernel_library_catalog_creates_outer_product_family_artifact_from_owned_descriptor[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:1481in nearest public ownerlib.accy.src.kernel.library.catalog.test
Complete caller list for kernel.library.createOwnedKernelCallArtifactRegistry
17 direct callers.
lib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_factor_descriptor_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:490in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_histogram_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:367in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_image_descriptor_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:408in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_sparse_descriptor_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:621in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_spatial_descriptor_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:1050in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_static_descriptor_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:1199in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.artifact_tests.test_kernel_library_catalog_builds_tiny_csr_spmv_candidate_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:919in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.family_tests.test_kernel_library_catalog_builds_gather_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:2912in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.family_tests.test_kernel_library_catalog_builds_stencil_window_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:2837in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.random_tests.test_kernel_library_catalog_builds_filter_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3025in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.random_tests.test_kernel_library_catalog_builds_greater_filter_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3053in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.random_tests.test_kernel_library_catalog_builds_random_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:2951in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.scan_tests.test_kernel_library_catalog_builds_prefix_sum_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3465in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.segment_tests.test_kernel_library_catalog_builds_scatter_add_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3289in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.segment_tests.test_kernel_library_catalog_builds_scatter_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3254in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.segment_tests.test_kernel_library_catalog_builds_segment_sum_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:3161in nearest public ownerlib.accy.src.kernel.library.catalog.testlib.accy.src.kernel.library.catalog.test.selection_matrix_product_tests.test_kernel_library_catalog_builds_matrix_product_scheduled_artifact_registry[function] — test source atlib/accy/src/kernel/library/catalog/test.zig:4791in nearest public ownerlib.accy.src.kernel.library.catalog.test
Complete call list for kernel.library.selectOwnedPrefixSumCandidates
8 direct calls.
lib.accy.src.kernel.library.catalog.family.scan.prefix.canonicalDeviceScan[function] — private source atlib/accy/src/kernel/library/catalog/family/scan/prefix.zig:93in nearest public ownerlib.accy.src.kernel.library.catalog.family.scan.prefixlib.accy.src.kernel.library.catalog.family.scan.prefix.canonicalPrefixSum[function] — private source atlib/accy/src/kernel/library/catalog/family/scan/prefix.zig:88in nearest public ownerlib.accy.src.kernel.library.catalog.family.scan.prefixlib.accy.src.kernel.library.catalog.family.scan.prefix.deviceScanDescriptorForInstance[function] — private source atlib/accy/src/kernel/library/catalog/family/scan/prefix.zig:117in nearest public ownerlib.accy.src.kernel.library.catalog.family.scan.prefixlib.accy.src.kernel.library.catalog.family.scan.prefix.prefixSumDescriptorForInstance[function] — private source atlib/accy/src/kernel/library/catalog/family/scan/prefix.zig:142in nearest public ownerlib.accy.src.kernel.library.catalog.family.scan.prefixlib.accy.src.kernel.library.catalog.family.scan.prefix.selectPrefixSum[function] — private source atlib/accy/src/kernel/library/catalog/family/scan/prefix.zig:26in nearest public ownerlib.accy.src.kernel.library.catalog.family.scan.prefixtiny.accy.kernel.library.scan.PrefixSumMode.fromOperation[function] atlib/accy/src/kernel/library/scan.zig:27tiny.accy.kernel.library.scan.deviceScanThreadCandidatesForExtent[function] atlib/accy/src/kernel/library/scan.zig:461tiny.accy.kernel.library.scan.prefixSumThreadCandidatesForExtent[function] atlib/accy/src/kernel/library/scan.zig:78
Audit
| Definitions | 144 |
|---|---|
| Public names | 299 |
| Members | 301 |
| Version | 26.7.0 |
| Revision | daab053ee433 |