tiny.accy.kernel.logical
Defined in kernel.
API (42)
Actions
Public operations.
BuilderFamilyOwnedSelectedEinsumKernel.deinitProgramaxisselectActivationCatalogselectEinsumCatalogselectFusedCatalogselectOwnedEinsumCatalogselectRowNormalizationCatalogwrap
Types and contracts
Public types and contracts.
ActivationKindActivationSelectionRequestAxisDomain2DDomain3DEinsumKernelKindEinsumOperandEinsumScheduleEinsumSelectionRequestFusedKernelKindFusedLinalgEpilogueFusedMatrixProductScheduleFusedMatrixProductSelectionRequestFusedMatrixVectorProductScheduleFusedMatrixVectorProductSelectionRequestFusedRowNormalizationKindFusedRowNormalizationScheduleFusedRowNormalizationSelectionRequestFusedSelectionRequestFusedVectorKindFusedVectorSelectionRequestOwnedSelectedEinsumKernelRowNormalizationKindRowNormalizationParameterizationRowNormalizationScheduleRowNormalizationSelectionRequestSelectedActivationKernelSelectedEinsumKernelSelectedFusedKernelSelectedRowNormalizationKernel
Namespaces
Public namespaces.
Source
Source: lib/accy/src/kernel/logical/selection/activation.zig:12
pub const ActivationSelectionRequest = struct { dtype: DType, kind: ActivationKind, extent: u64,};Source: lib/accy/src/kernel/logical/selection/activation.zig:18
pub const SelectedActivationKernel = struct { kind: ActivationKind, descriptor: library.CatalogDescriptor,};Source: lib/accy/src/kernel/logical/selection/einsum.zig:29
pub const EinsumKernelKind = enum { batched_matrix_product, dot_product, matrix_product, matrix_vector_product, outer_product, sum_reduction, transpose,};Source: lib/accy/src/kernel/logical/selection/einsum.zig:9
pub const EinsumOperand = struct { indices: []const u8, dims: []const i64,};Source: lib/accy/src/kernel/logical/selection/einsum.zig:14
pub const EinsumSchedule = union(enum) { batched_matrix_product: library.BatchedMatrixProductSchedule, matrix_product: library.MatrixProductSchedule, matrix_vector_product: library.MatrixVectorProductSchedule, outer_product: library.OuterProductSchedule,};Source: lib/accy/src/kernel/logical/selection/einsum.zig:21
pub const EinsumSelectionRequest = struct { dtype: DType, inputs: []const EinsumOperand, output_indices: []const u8, output_dims: []const i64, schedule: ?EinsumSchedule = null,};Source: lib/accy/src/kernel/logical/selection/einsum.zig:44
pub const OwnedSelectedEinsumKernel = struct { kind: EinsumKernelKind, descriptor: library.OwnedCatalogDescriptor, pub fn deinit(self: *OwnedSelectedEinsumKernel) void { self.descriptor.deinit(); self.* = undefined; }};Source: lib/accy/src/kernel/logical/selection/einsum.zig:39
pub const SelectedEinsumKernel = struct { kind: EinsumKernelKind, descriptor: library.CatalogDescriptor,};Source: lib/accy/src/kernel/logical/selection/fused.zig:66
pub const FusedKernelKind = union(enum) { vector: FusedVectorKind, matrix_product: FusedLinalgEpilogue, matrix_vector_product: FusedLinalgEpilogue, row_normalization: FusedRowNormalizationKind,};Source: lib/accy/src/kernel/logical/selection/fused.zig:23
pub const FusedMatrixProductSelectionRequest = struct { dtype: 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: ?FusedMatrixProductSchedule = null,};Source: lib/accy/src/kernel/logical/selection/fused.zig:37
pub const FusedMatrixVectorProductSelectionRequest = struct { dtype: 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: ?FusedMatrixVectorProductSchedule = null,};Source: lib/accy/src/kernel/logical/selection/fused.zig:51
pub const FusedRowNormalizationSelectionRequest = struct { dtype: DType, kind: FusedRowNormalizationKind, rows: u64, cols: u64, schedule: ?FusedRowNormalizationSchedule = null,};Source: lib/accy/src/kernel/logical/selection/fused.zig:59
pub const FusedSelectionRequest = union(enum) { vector: FusedVectorSelectionRequest, matrix_product: FusedMatrixProductSelectionRequest, matrix_vector_product: FusedMatrixVectorProductSelectionRequest, row_normalization: FusedRowNormalizationSelectionRequest,};Source: lib/accy/src/kernel/logical/selection/fused.zig:15
pub const FusedVectorSelectionRequest = struct { dtype: DType, kind: FusedVectorKind, extent: u64,};Source: lib/accy/src/kernel/logical/selection/fused.zig:73
pub const SelectedFusedKernel = struct { kind: FusedKernelKind, descriptor: library.CatalogDescriptor,};Source: lib/accy/src/kernel/logical/selection/normalization.zig:13
pub const RowNormalizationSelectionRequest = struct { dtype: DType, kind: RowNormalizationKind, rows: u64, cols: u64, schedule: ?RowNormalizationSchedule = null,};Source: lib/accy/src/kernel/logical/selection/normalization.zig:21
pub const SelectedRowNormalizationKernel = struct { kind: RowNormalizationKind, descriptor: library.CatalogDescriptor,};Source: lib/accy/src/kernel/model/logical/domain/root.zig:1
pub const Axis = struct { name: []const u8, extent: u64,};Source: lib/accy/src/kernel/model/logical/domain/root.zig:6
Source: lib/accy/src/kernel/model/logical/domain/root.zig:11
Source: lib/accy/src/kernel/logical/family.zig:7
pub fn Family(comptime definition: anytype) type { return struct { const FamilySource: type = kernel.Family(FamilyDefinition(definition)); pub const name = definition.name; pub const parameters = definition.parameters; pub const Layout: type = FamilySource.Layout; pub const Instance: type = definition.Instance; pub const Limits: type = FamilySource.Limits; pub const arg = FamilySource.arg; pub const schema = FamilySource.schema; pub const build = FamilySource.build; pub const buildNamed = FamilySource.buildNamed; pub const interpret = FamilySource.interpret; pub const launch = FamilySource.launch; pub const scheduleSnapshot = FamilySource.scheduleSnapshot; pub const createPlan = FamilySource.createPlan; pub const createCheckedPlan = FamilySource.createCheckedPlan; pub const compileFragment = FamilySource.compileFragment; pub const createKernelArtifact = FamilySource.createKernelArtifact; pub const createKernelCallArtifact = FamilySource.createKernelCallArtifact; pub const runCpu = FamilySource.runCpu; pub const runCpuWithDiagnostic = FamilySource.runCpuWithDiagnostic; pub const verify = FamilySource.verify; };}Source: lib/accy/src/kernel/logical/program.zig:9
pub fn Program(comptime definition: anytype) type { return struct { const Default: type = Scheduled(definition, schedule_mod.default()); pub const name = definition.name; pub const parameters = definition.parameters; pub const Layout: type = Default.Layout; pub const Limits: type = Default.Limits; pub fn withSchedule(comptime schedule: anytype) type { return Scheduled(definition, schedule); } pub const arg = Default.arg; pub const schema = Default.schema; pub const build = Default.build; pub const interpret = Default.interpret; pub const analyze = Default.analyze; pub const transform = Default.transform; pub const launch = Default.launch; pub const scheduleSnapshot = Default.scheduleSnapshot; pub const createPlan = Default.createPlan; pub const createCheckedPlan = Default.createCheckedPlan; pub const compileFragment = Default.compileFragment; pub const createKernelArtifact = Default.createKernelArtifact; pub const createKernelCallArtifact = Default.createKernelCallArtifact; pub const runCpu = Default.runCpu; pub const runCpuWithDiagnostic = Default.runCpuWithDiagnostic; pub const verify = Default.verify; };}Source: lib/accy/src/kernel/logical/selection/activation.zig:23
pub fn selectCatalog(request: ActivationSelectionRequest) ?SelectedActivationKernel { const descriptor = library.select(.{ .activation = .{ .dtype = request.dtype, .kind = request.kind, .extent = request.extent, } }) orelse return null; return .{ .kind = request.kind, .descriptor = descriptor, };}Source: lib/accy/src/kernel/logical/selection/einsum.zig:54
pub fn selectCatalog(request: EinsumSelectionRequest) ?SelectedEinsumKernel { if (selectReduction(request)) |selected| return selected; if (selectBatchedMatrixProduct(request)) |selected| return selected; if (selectMatrixProduct(request)) |selected| return selected; if (selectMatrixVectorProduct(request)) |selected| return selected; if (selectOuterProduct(request)) |selected| return selected; if (selectTranspose(request)) |selected| return selected; return null;}Source: lib/accy/src/kernel/logical/selection/einsum.zig:64
pub fn selectOwnedCatalog(backing_allocator: std.mem.Allocator, request: EinsumSelectionRequest) !?OwnedSelectedEinsumKernel { if (selectCatalog(request)) |selected| return ownedSelectedStatic(selected); if (try selectOwnedBatchedMatrixProduct(backing_allocator, request)) |selected| return selected; if (try selectOwnedMatrixProduct(backing_allocator, request)) |selected| return selected; if (try selectOwnedMatrixVectorProduct(backing_allocator, request)) |selected| return selected; if (try selectOwnedOuterProduct(backing_allocator, request)) |selected| return selected; return null;}Source: lib/accy/src/kernel/logical/selection/fused.zig:78
pub fn selectCatalog(request: FusedSelectionRequest) ?SelectedFusedKernel { return switch (request) { .vector => |vector| selectVector(vector), .matrix_product => |matrix_product| selectMatrixProduct(matrix_product), .matrix_vector_product => |matrix_vector_product| selectMatrixVectorProduct(matrix_vector_product), .row_normalization => |row_normalization| selectRowNormalization(row_normalization), };}Source: lib/accy/src/kernel/logical/selection/normalization.zig:26
pub fn selectCatalog(request: RowNormalizationSelectionRequest) ?SelectedRowNormalizationKernel { const descriptor = library.select(.{ .row_normalization = .{ .dtype = request.dtype, .kind = request.kind, .rows = request.rows, .cols = request.cols, .schedule = request.schedule, } }) orelse return null; return .{ .kind = request.kind, .descriptor = descriptor, };}Source: lib/accy/src/kernel/model/logical/builder.zig:13
pub fn Builder(comptime Inner: type, comptime Schedule: type) type { return struct { token: *anyopaque, schedule: Schedule, const Self = @This(); pub fn init(source: *Inner, schedule: Schedule) Self { return .{ .token = source, .schedule = schedule, }; } pub fn index1D(self: *Self, name: []const u8, extent: u64) !kernel_domain.Index1D { return self.schedule.index1D(self.owner(), domain.axis(name, extent)); } pub fn index2D(self: *Self, shape: domain.Domain2D) !kernel_domain.Index2D { return self.schedule.index2D(self.owner(), shape); } pub fn index3D(self: *Self, shape: domain.Domain3D) !kernel_domain.Index3D { return self.schedule.index3D(self.owner(), shape); } pub fn guardDo(self: *Self, condition: anytype, context: anytype, comptime body: anytype) !void { var active_guard = try self.owner().guard(condition); errdefer active_guard.abort(); try body(self, context); try active_guard.leave(); } pub fn guardIndexDo(self: *Self, index: kernel_domain.Index1D, context: anytype, comptime body: anytype) !void { var active_guard = try self.owner().guardIndex(index); errdefer active_guard.abort(); try body(self, index, context); try active_guard.leave(); } pub fn guardIndex2DDo(self: *Self, index: kernel_domain.Index2D, context: anytype, comptime body: anytype) !void { var x_guard = try self.owner().guardIndex(index.x); errdefer x_guard.abort(); var y_guard = try self.owner().guardIndex(index.y); errdefer y_guard.abort(); try body(self, index, context); try y_guard.leave(); try x_guard.leave(); } pub fn guardIndex3DDo(self: *Self, index: kernel_domain.Index3D, context: anytype, comptime body: anytype) !void { var x_guard = try self.owner().guardIndex(index.x); errdefer x_guard.abort(); var y_guard = try self.owner().guardIndex(index.y); errdefer y_guard.abort(); var z_guard = try self.owner().guardIndex(index.z); errdefer z_guard.abort(); try body(self, index, context); try z_guard.leave(); try y_guard.leave(); try x_guard.leave(); } pub fn forEach1D(self: *Self, name: []const u8, extent: u64, context: anytype, comptime body: anytype) !kernel_domain.Index1D { const index = try self.index1D(name, extent); try self.guardIndexDo(index, context, body); return index; } pub fn forEach2D(self: *Self, shape: domain.Domain2D, context: anytype, comptime body: anytype) !kernel_domain.Index2D { const index = try self.index2D(shape); try self.guardIndex2DDo(index, context, body); return index; } pub fn forEach3D(self: *Self, shape: domain.Domain3D, context: anytype, comptime body: anytype) !kernel_domain.Index3D { const index = try self.index3D(shape); try self.guardIndex3DDo(index, context, body); return index; } pub fn fold(self: *Self, lower: base.Value, upper: base.Value, step: base.Value, initial: anytype, context: anytype, comptime body: anytype) !@TypeOf(initial) { return self.owner().fold(lower, upper, step, initial, .{ .logical = self, .payload = context, }, struct { fn each(_: anytype, iteration: anytype, acc: anytype, fold_ctx: anytype) !@TypeOf(acc) { return body(fold_ctx.logical, iteration, acc, fold_ctx.payload); } }.each); } pub fn foldRange(self: *Self, lower: i64, upper: i64, step: i64, initial: anytype, context: anytype, comptime body: anytype) !@TypeOf(initial) { const lower_value = try self.constantIndex(lower); const upper_value = try self.constantIndex(upper); const step_value = try self.constantIndex(step); return self.fold(lower_value, upper_value, step_value, initial, context, body); } pub fn whileLoop(self: *Self, initial: anytype, context: anytype, comptime condition: anytype, comptime body: anytype) !@TypeOf(initial) { return self.owner().whileLoop(initial, .{ .logical = self, .payload = context, }, struct { fn keepGoing(_: anytype, carry: anytype, loop_ctx: anytype) !base.Value { return typed.raw(try condition(loop_ctx.logical, carry, loop_ctx.payload)); } }.keepGoing, struct { fn each(_: anytype, carry: anytype, loop_ctx: anytype) !@TypeOf(carry) { return body(loop_ctx.logical, carry, loop_ctx.payload); } }.each); } pub fn forScope(self: *Self, lower: base.Value, upper: base.Value, step: base.Value, init_args: []const base.Value, result_types: []const base.Type) !ForScope(Inner) { return self.owner().forScope(lower, upper, step, init_args, result_types); } pub fn whileScope(self: *Self, init_args: []const base.Value, result_types: []const base.Type) !WhileScope(Inner) { return self.owner().whileScope(init_args, result_types); } pub fn forDo(self: *Self, lower: base.Value, upper: base.Value, step: base.Value, context: anytype, comptime body: anytype) !base.For { var scope = try self.forScope(lower, upper, step, &.{}, &.{}); errdefer scope.abort(); try body(self, scope.inductionVar(), context); try scope.leave(&.{}); return scope.loop; } pub fn forValueDo(self: *Self, comptime dtype: DType, lower: base.Value, upper: base.Value, step: base.Value, context: anytype, comptime body: anytype) !base.For { var scope = try self.forScope(lower, upper, step, &.{}, &.{}); errdefer scope.abort(); try body(self, try self.castValue(scope.inductionVar(), dtype), context); try scope.leave(&.{}); return scope.loop; } pub fn forRangeDo(self: *Self, lower: i64, upper: i64, step: i64, context: anytype, comptime body: anytype) !base.For { const lower_value = try self.constantIndex(lower); const upper_value = try self.constantIndex(upper); const step_value = try self.constantIndex(step); return self.forDo(lower_value, upper_value, step_value, context, body); } pub fn forRangeValueDo(self: *Self, comptime dtype: DType, lower: i64, upper: i64, step: i64, context: anytype, comptime body: anytype) !base.For { const lower_value = try self.constantIndex(lower); const upper_value = try self.constantIndex(upper); const step_value = try self.constantIndex(step); return self.forValueDo(dtype, lower_value, upper_value, step_value, context, body); } pub fn argument(self: *Self, index: usize) base.Value { return self.owner().argument(index); } pub fn globalId(self: *Self, dim: base.Dimension) !base.Value { return self.owner().globalId(dim); } pub fn globalIdValue(self: *Self, comptime dtype: DType, dim: base.Dimension) !typed.Value(dtype) { return self.owner().globalIdValue(dtype, dim); } pub fn laneId(self: *Self) !base.Value { return self.owner().laneId(); } pub fn threadId(self: *Self, dim: base.Dimension) !base.Value { return self.owner().threadId(dim); } pub fn blockId(self: *Self, dim: base.Dimension) !base.Value { return self.owner().blockId(dim); } pub fn blockDim(self: *Self, dim: base.Dimension) !base.Value { return self.owner().blockDim(dim); } pub fn gridDim(self: *Self, dim: base.Dimension) !base.Value { return self.owner().gridDim(dim); } pub fn warpReduce(self: *Self, op_kind: base.WarpOpKind, value: anytype) !@TypeOf(value) { return self.owner().warpReduce(op_kind, value); } pub fn warpScan(self: *Self, op_kind: base.WarpOpKind, mode: base.WarpScanMode, value: anytype) !@TypeOf(value) { return self.owner().warpScan(op_kind, mode, value); } pub fn warpId(self: *Self) !base.Value { return self.owner().warpId(); } pub fn mmaSync(self: *Self, shape: base.MmaShape, a: [4]base.Value, b: [2]base.Value, c: [4]base.Value) ![4]base.Value { return self.owner().mmaSync(shape, a, b, c); } pub fn shuffleSync(self: *Self, mode: base.ShuffleMode, value: base.Value, lane_or_delta: base.Value) !base.Value { return self.owner().shuffleSync(mode, value, lane_or_delta); } pub fn fence(self: *Self, scope: base.Scope) !void { return self.owner().fence(scope); } pub fn asyncCopyShared(self: *Self, dst: base.Value, dst_index: base.Value, src: base.Value, src_index: base.Value, bytes: u32) !void { return self.owner().asyncCopyShared(dst, dst_index, src, src_index, bytes); } pub fn asyncCopyCommit(self: *Self) !void { return self.owner().asyncCopyCommit(); } pub fn asyncCopyWait(self: *Self, groups: u32) !void { return self.owner().asyncCopyWait(groups); } pub fn sharedBuffer(self: *Self, dtype: DType, size: u64) !base.Value { return self.owner().sharedBuffer(dtype, size); } pub fn dynamicSharedBuffer(self: *Self, dtype: DType, size: u64, byte_offset: u64) !base.Value { return self.owner().dynamicSharedBuffer(dtype, size, byte_offset); } pub fn barrier(self: *Self, scope: base.Scope) !void { return self.owner().barrier(scope); } pub fn typedArgument(self: *Self, comptime dtype: DType, index: usize) typed.Value(dtype) { return self.owner().typedArgument(dtype, index); } pub fn typedValue(self: *Self, comptime dtype: DType, value: base.Value) typed.Value(dtype) { return self.owner().typedValue(dtype, value); } pub fn castValue(self: *Self, input: anytype, comptime dtype: DType) !typed.Value(dtype) { return self.owner().castValue(input, dtype); } pub fn bufferArgument(self: *Self, comptime dtype: DType, index: usize) view.BufferView(dtype) { return self.owner().bufferArgument(dtype, index); } pub fn bufferView(self: *Self, comptime dtype: DType, value: base.Value) view.BufferView(dtype) { return self.owner().bufferView(dtype, value); } pub fn constantInt(self: *Self, dtype: DType, value: i64) !base.Value { return self.owner().constantInt(dtype, value); } pub fn constantIndex(self: *Self, value: i64) !base.Value { return self.owner().constantIndex(value); } pub fn constantFloat(self: *Self, dtype: DType, value: f64) !base.Value { return self.owner().constantFloat(dtype, value); } pub fn constantBool(self: *Self, value: bool) !base.Value { return self.owner().constantBool(value); } pub fn constantValue(self: *Self, comptime dtype: DType, value: anytype) !typed.Value(dtype) { return self.owner().constantValue(dtype, value); } pub fn add(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().add(lhs, rhs); } pub fn sub(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().sub(lhs, rhs); } pub fn mul(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().mul(lhs, rhs); } pub fn umulhi(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().umulhi(lhs, rhs); } pub fn div(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().div(lhs, rhs); } pub fn min(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().min(lhs, rhs); } pub fn max(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().max(lhs, rhs); } pub fn and_(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().and_(lhs, rhs); } pub fn or_(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().or_(lhs, rhs); } pub fn xor(self: *Self, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().xor(lhs, rhs); } pub fn not(self: *Self, input: base.Value) !base.Value { return self.owner().not(input); } pub fn popcount(self: *Self, input: base.Value) !base.Value { return self.owner().popcount(input); } pub fn ballotSync(self: *Self, predicate: base.Value) !base.Value { return self.owner().ballotSync(predicate); } pub fn shl(self: *Self, value: base.Value, shift: base.Value) !base.Value { return self.owner().shl(value, shift); } pub fn shr(self: *Self, value: base.Value, shift: base.Value) !base.Value { return self.owner().shr(value, shift); } pub fn ushr(self: *Self, value: base.Value, shift: base.Value) !base.Value { return self.owner().ushr(value, shift); } pub fn bitcast(self: *Self, input: base.Value, dtype: DType) !base.Value { return self.owner().bitcast(input, dtype); } pub fn neg(self: *Self, input: base.Value) !base.Value { return self.owner().neg(input); } pub fn abs(self: *Self, input: base.Value) !base.Value { return self.owner().abs(input); } pub fn sqrt(self: *Self, input: base.Value) !base.Value { return self.owner().sqrt(input); } pub fn exp(self: *Self, input: base.Value) !base.Value { return self.owner().exp(input); } pub fn log(self: *Self, input: base.Value) !base.Value { return self.owner().log(input); } pub fn tanh(self: *Self, input: base.Value) !base.Value { return self.owner().tanh(input); } pub fn sin(self: *Self, input: base.Value) !base.Value { return self.owner().sin(input); } pub fn cos(self: *Self, input: base.Value) !base.Value { return self.owner().cos(input); } pub fn tan(self: *Self, input: base.Value) !base.Value { return self.owner().tan(input); } pub fn floor(self: *Self, input: base.Value) !base.Value { return self.owner().floor(input); } pub fn round(self: *Self, input: base.Value) !base.Value { return self.owner().round(input); } pub fn trunc(self: *Self, input: base.Value) !base.Value { return self.owner().trunc(input); } pub fn tf32Round(self: *Self, input: base.Value) !base.Value { return self.owner().tf32Round(input); } pub fn pow(self: *Self, base_value: base.Value, exponent: base.Value) !base.Value { return self.owner().pow(base_value, exponent); } pub fn atan2(self: *Self, y: base.Value, x: base.Value) !base.Value { return self.owner().atan2(y, x); } pub fn fma(self: *Self, a: base.Value, b: base.Value, c: base.Value) !base.Value { return self.owner().fma(a, b, c); } pub fn compare(self: *Self, predicate: base.Compare, lhs: base.Value, rhs: base.Value) !base.Value { return self.owner().compare(predicate, lhs, rhs); } pub fn select(self: *Self, condition: base.Value, true_value: base.Value, false_value: base.Value) !base.Value { return self.owner().select(condition, true_value, false_value); } pub fn cast(self: *Self, input: base.Value, dtype: DType) !base.Value { return self.owner().cast(input, dtype); } pub fn castIndex(self: *Self, input: base.Value) !base.Value { return self.owner().castIndex(input); } pub fn linearIndex(self: *Self, index: anytype) !base.Value { return self.owner().linearIndex(index); } pub fn linearIndexValue(self: *Self, index: anytype, comptime dtype: DType) !typed.Value(dtype) { return self.owner().linearIndexValue(index, dtype); } pub fn loadIndex(self: *Self, memref: base.Value, index: anytype) !base.Value { return self.owner().loadIndex(memref, index); } pub fn loadVector(self: *Self, memref: base.Value, index: base.Value, width: u32) !base.Value { return self.owner().loadVector(memref, index, width); } pub fn extractLane(self: *Self, vec: base.Value, lane: u32, dtype: DType) !base.Value { return self.owner().extractLane(vec, lane, dtype); } pub fn insertLane(self: *Self, vec: base.Value, scalar: base.Value, lane: u32) !base.Value { return self.owner().insertLane(vec, scalar, lane); } pub fn packVector(self: *Self, lanes: [4]base.Value) !base.Value { return self.owner().packVector(lanes); } pub fn storeIndex(self: *Self, value: base.Value, memref: base.Value, index: anytype) !void { try self.owner().storeIndex(value, memref, index); } pub fn atomicRmw( self: *Self, kind: base.AtomicRmwKind, value: base.Value, memref: base.Value, index: base.Value, ) !base.Value { return self.owner().atomicRmw(kind, value, memref, index); } pub fn atomicRmwIndex( self: *Self, kind: base.AtomicRmwKind, value: base.Value, memref: base.Value, index: anytype, ) !base.Value { return self.atomicRmw(kind, value, memref, try self.linearIndex(index)); } pub fn atomicCas( self: *Self, expected: base.Value, desired: base.Value, memref: base.Value, index: base.Value, ) !base.Value { return self.owner().atomicCas(expected, desired, memref, index); } pub fn atomicCasIndex( self: *Self, expected: base.Value, desired: base.Value, memref: base.Value, index: anytype, ) !base.Value { return self.atomicCas(expected, desired, memref, try self.linearIndex(index)); } pub fn vec2(self: *Self, x: base.Value, y: base.Value) vector.Vec2 { return self.owner().vec2(x, y); } pub fn typedVec2(self: *Self, comptime dtype: DType, x: anytype, y: anytype) !typed.Vec2(dtype) { return self.owner().typedVec2(dtype, x, y); } pub fn vec3(self: *Self, x: base.Value, y: base.Value, z: base.Value) vector.Vec3 { return self.owner().vec3(x, y, z); } pub fn typedVec3(self: *Self, comptime dtype: DType, x: anytype, y: anytype, z: anytype) !typed.Vec3(dtype) { return self.owner().typedVec3(dtype, x, y, z); } pub fn splat2(self: *Self, value: base.Value) vector.Vec2 { return self.owner().splat2(value); } pub fn typedSplat2(self: *Self, comptime dtype: DType, value: anytype) !typed.Vec2(dtype) { return self.owner().typedSplat2(dtype, value); } pub fn splat3(self: *Self, value: base.Value) vector.Vec3 { return self.owner().splat3(value); } pub fn typedSplat3(self: *Self, comptime dtype: DType, value: anytype) !typed.Vec3(dtype) { return self.owner().typedSplat3(dtype, value); } fn owner(self: *Self) *Inner { return @ptrCast(@alignCast(self.token)); } };}Source: lib/accy/src/kernel/model/logical/builder.zig:543
pub fn wrap(inner: anytype, schedule: anytype) Builder(PointerChild(@TypeOf(inner)), @TypeOf(schedule)) { return Builder(PointerChild(@TypeOf(inner)), @TypeOf(schedule)).init(inner, schedule);}Source: lib/accy/src/kernel/model/logical/domain/root.zig:17
pub fn axis(name: []const u8, extent: u64) Axis { return .{ .name = name, .extent = extent, };}Source: lib/accy/src/kernel/logical/root.zig
const model = @import("../model/logical/root.zig");const family_mod = @import("family.zig");const program = @import("program.zig");const selection = @import("selection/root.zig");pub const Axis = model.Axis;pub const ActivationKind = selection.ActivationKind;pub const ActivationSelectionRequest = selection.ActivationSelectionRequest;pub const Builder = model.Builder;pub const Domain2D = model.Domain2D;pub const Domain3D = model.Domain3D;pub const EinsumKernelKind = selection.EinsumKernelKind;pub const EinsumOperand = selection.EinsumOperand;pub const EinsumSchedule = selection.EinsumSchedule;pub const EinsumSelectionRequest = selection.EinsumSelectionRequest;pub const Family = family_mod.Family;pub const FusedKernelKind = selection.FusedKernelKind;pub const FusedLinalgEpilogue = selection.FusedLinalgEpilogue;pub const FusedMatrixProductSchedule = selection.FusedMatrixProductSchedule;pub const FusedMatrixProductSelectionRequest = selection.FusedMatrixProductSelectionRequest;pub const FusedMatrixVectorProductSchedule = selection.FusedMatrixVectorProductSchedule;pub const FusedMatrixVectorProductSelectionRequest = selection.FusedMatrixVectorProductSelectionRequest;pub const FusedRowNormalizationKind = selection.FusedRowNormalizationKind;pub const FusedRowNormalizationSchedule = selection.FusedRowNormalizationSchedule;pub const FusedRowNormalizationSelectionRequest = selection.FusedRowNormalizationSelectionRequest;pub const FusedSelectionRequest = selection.FusedSelectionRequest;pub const FusedVectorKind = selection.FusedVectorKind;pub const FusedVectorSelectionRequest = selection.FusedVectorSelectionRequest;pub const Program = program.Program;pub const RowNormalizationKind = selection.RowNormalizationKind;pub const RowNormalizationParameterization = selection.RowNormalizationParameterization;pub const RowNormalizationSchedule = selection.RowNormalizationSchedule;pub const RowNormalizationSelectionRequest = selection.RowNormalizationSelectionRequest;pub const SelectedActivationKernel = selection.SelectedActivationKernel;pub const SelectedEinsumKernel = selection.SelectedEinsumKernel;pub const OwnedSelectedEinsumKernel = selection.OwnedSelectedEinsumKernel;pub const SelectedFusedKernel = selection.SelectedFusedKernel;pub const SelectedRowNormalizationKernel = selection.SelectedRowNormalizationKernel;pub const axis = model.axis;pub const schedule = model.schedule;pub const selectActivationCatalog = selection.selectActivationCatalog;pub const selectEinsumCatalog = selection.selectEinsumCatalog;pub const selectOwnedEinsumCatalog = selection.selectOwnedEinsumCatalog;pub const selectFusedCatalog = selection.selectFusedCatalog;pub const selectRowNormalizationCatalog = selection.selectRowNormalizationCatalog;pub const wrap = model.wrap;Source: lib/accy/src/kernel/root.zig:55
pub const logical = logical_mod;Complete caller list for kernel.logical.selectEinsumCatalog
16 direct callers.
tiny.accy.kernel.logical.selectOwnedEinsumCatalog[function] atlib/accy/src/kernel/logical/selection/einsum.zig:64lib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_batched_matrix_product_family_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:435in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_batched_matrix_product_family_schedule_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:461in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_f16_matrix_product_family_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:632in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_product_family_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:604in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_vector_product_family_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:685in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_vector_product_family_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:711in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_outer_product_family_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:763in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_outer_product_family_schedule_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:789in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_chooses_matrix_product_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:415in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_chooses_matrix_product_schedule_specialization[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:561in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_chooses_scalar_dot_product_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:396in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_chooses_scalar_sum_reduction_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:378in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_chooses_transpose_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:867in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_keeps_attention-shaped_pure_einsum_generic[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:542in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_selection_rejects_unknown_catalog_shape[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:885in nearest public ownerlib.accy.src.kernel.logical.selection.einsum
Complete caller list for kernel.logical.selectOwnedEinsumCatalog
15 direct callers.
lib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_batched_matrix_product_family[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:490in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_batched_matrix_product_family_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:435in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_batched_matrix_product_family_schedule[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:516in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_batched_matrix_product_family_schedule_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:461in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_f16_matrix_product_family_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:632in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_product_family_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:604in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_product_family_schedule[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:660in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_vector_product_family_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:685in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_vector_product_family_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:711in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_matrix_vector_product_family_schedule[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:739in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_outer_product_family[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:817in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_outer_product_family_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:763in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_outer_product_family_schedule[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:842in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_chooses_outer_product_family_schedule_at_catalog_smoke_extents[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:789in nearest public ownerlib.accy.src.kernel.logical.selection.einsumlib.accy.src.kernel.logical.selection.einsum.test_logical_einsum_owned_selection_preserves_fixed_matrix_product_descriptor[function] — test source atlib/accy/src/kernel/logical/selection/einsum.zig:582in nearest public ownerlib.accy.src.kernel.logical.selection.einsum
Complete caller list for kernel.logical.selectFusedCatalog
12 direct callers.
lib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_matrix_product_bias_gelu_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:215in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_matrix_product_bias_relu_and_silu_catalog_entries[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:264in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_matrix_vector_product_bias_gelu_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:301in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_matrix_vector_product_bias_relu_and_silu_catalog_entries[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:324in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_row_residual_rmsnorm_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:361in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_schedule-specialized_matrix_product_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:238in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_vector_bias_gelu_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:153in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_vector_bias_relu_and_silu_catalog_entries[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:164in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_vector_geglu_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:193in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_vector_reglu_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:204in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_chooses_vector_swiglu_catalog_entry[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:182in nearest public ownerlib.accy.src.kernel.logical.selection.fusedlib.accy.src.kernel.logical.selection.fused.test_logical_fused_selection_rejects_unavailable_catalog_entries[function] — test source atlib/accy/src/kernel/logical/selection/fused.zig:373in nearest public ownerlib.accy.src.kernel.logical.selection.fused
Complete call list for kernel.logical.Builder
8 direct calls.
lib.accy.src.kernel.model.core.typed.Value[function] — private source atlib/accy/src/kernel/model/core/typed.zig:8in nearest public ownerlib.accy.src.kernel.model.core.typedlib.accy.src.kernel.model.core.typed.Vec2[function] — private source atlib/accy/src/kernel/model/core/typed.zig:277in nearest public ownerlib.accy.src.kernel.model.core.typedlib.accy.src.kernel.model.core.typed.Vec3[function] — private source atlib/accy/src/kernel/model/core/typed.zig:401in nearest public ownerlib.accy.src.kernel.model.core.typedlib.accy.src.kernel.model.core.typed.raw[function] — private source atlib/accy/src/kernel/model/core/typed.zig:266in nearest public ownerlib.accy.src.kernel.model.core.typedlib.accy.src.kernel.model.core.view.BufferView[function] — private source atlib/accy/src/kernel/model/core/view.zig:11in nearest public ownerlib.accy.src.kernel.model.core.viewlib.accy.src.kernel.model.logical.builder.ForScope[function] — private source atlib/accy/src/kernel/model/logical/builder.zig:565in nearest public ownerlib.accy.src.kernel.model.logical.builderlib.accy.src.kernel.model.logical.builder.WhileScope[function] — private source atlib/accy/src/kernel/model/logical/builder.zig:554in nearest public ownerlib.accy.src.kernel.model.logical.builderlib.machine.src.instance.reference.execute.condition[function] — private source atlib/machine/src/instance/reference/execute.zig:1243in nearest public ownerlib.machine.src.instance.reference.execute
Audit
| Definitions | 32 |
|---|---|
| Public names | 32 |
| Members | 81 |
| Version | 26.7.0 |
| Revision | daab053ee433 |