Skip to documentation
SLOP

tiny.accy.kernel.oracle

Reference tiny.accy kernel oracle

Defined in kernel.

API (24)

Actions

Public operations.

Types and contracts

Public types and contracts.

Values and defaults

Public values and defaults.

No direct callersNo direct callskerneloracle
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/accy/src/eval/evaluator.zig:234

zig
pub const KernelArgument = union(enum) {    memref: []u8,    scalar: Scalar,};

Source: lib/accy/src/eval/evaluator.zig:58

zig
pub const Machine = struct {    allocator: std.mem.Allocator,    evaluator: Evaluator,    bound: std.ArrayListUnmanaged(RuntimeValue) = .empty,    lanes: std.ArrayListUnmanaged(LaneState) = .empty,    lane_refs: std.ArrayListUnmanaged(*LaneState) = .empty,    pub fn init(allocator: std.mem.Allocator) Machine {        return .{            .allocator = allocator,            .evaluator = Evaluator.init(allocator),        };    }    pub fn deinit(self: *Machine) void {        for (self.lanes.items) |*lane| lane.deinit();        self.lanes.deinit(self.allocator);        self.lane_refs.deinit(self.allocator);        self.bound.deinit(self.allocator);        self.evaluator.deinit();        self.* = undefined;    }    pub fn run(        self: *Machine,        func_op: *ir.Operation,        args: []const KernelArgument,        launch: anytype,    ) EvalError!void {        return self.runWithDiagnostic(func_op, args, launch, null);    }    pub fn runWithDiagnostic(        self: *Machine,        func_op: *ir.Operation,        args: []const KernelArgument,        launch: anytype,        diagnostic: ?*Diagnostic,    ) EvalError!void {        if (diagnostic) |captured| captured.len = 0;        return self.runChecking(func_op, args, launch, diagnostic) catch |err| {            captureFunctionDiagnostic(diagnostic, "accy/kernel/run", func_op, err);            return err;        };    }    fn runChecking(        self: *Machine,        func_op: *ir.Operation,        args: []const KernelArgument,        launch: anytype,        diagnostic: ?*Diagnostic,    ) EvalError!void {        if (!std.mem.eql(u8, func_op.name.name, dialects.FuncDialect.FuncOp.operation_name)) {            return error.InvalidFunction;        }        const region = func_op.getRegion(0) orelse return error.InvalidFunction;        const entry = region.getEntryBlock() orelse return error.InvalidFunction;        if (entry.arguments.items.len != args.len) return error.InputCountMismatch;        self.evaluator.resetRun();        self.evaluator.setDiagnostic("accy/kernel/run", diagnostic);        try self.bound.resize(self.allocator, args.len);        for (args, 0..) |arg, i| {            const block_arg = entry.getArgument(i) orelse return error.InvalidFunction;            self.bound.items[i] = switch (arg) {                .memref => |bytes| .{ .memref = try self.evaluator.addBorrowedMemref(block_arg.type, bytes) },                .scalar => |value| .{ .scalar = try castScalar(try scalarKindOfType(block_arg.type), value) },            };        }        const lane_count = try launchBlockThreadCount(launch);        try self.ensureLanes(lane_count);        const lane_refs = self.lane_refs.items[0..lane_count];        for (0..@as(usize, @intCast(launch.grid[2]))) |block_z| {            for (0..@as(usize, @intCast(launch.grid[1]))) |block_y| {                for (0..@as(usize, @intCast(launch.grid[0]))) |block_x| {                    self.evaluator.refillSharedSentinel();                    var lane_index: usize = 0;                    for (0..@as(usize, @intCast(launch.block[2]))) |thread_z| {                        for (0..@as(usize, @intCast(launch.block[1]))) |thread_y| {                            for (0..@as(usize, @intCast(launch.block[0]))) |thread_x| {                                const lane = lane_refs[lane_index];                                lane_index += 1;                                lane.reset(launchIndex(launch, block_x, block_y, block_z, thread_x, thread_y, thread_z));                                for (self.bound.items, 0..) |value, i| {                                    const block_arg = entry.getArgument(i) orelse return error.InvalidFunction;                                    try lane.setValue(block_arg, value);                                }                            }                        }                    }                    std.debug.assert(lane_index == lane_count);                    try self.evaluator.evalKernelBlock(entry, lane_refs);                }            }        }    }    fn ensureLanes(self: *Machine, lane_count: usize) EvalError!void {        while (self.lanes.items.len < lane_count) {            try self.lanes.append(self.allocator, LaneState.init(self.allocator, .{}));        }        try self.lane_refs.resize(self.allocator, self.lanes.items.len);        for (self.lanes.items, 0..) |*lane, index| {            self.lane_refs.items[index] = lane;        }        std.debug.assert(self.lane_refs.items.len >= lane_count);    }};

Source: lib/accy/src/eval/evaluator.zig:217

zig
pub const Scalar = union(ScalarKind) {    bool: bool,    index: i64,    i8: i8,    i16: i16,    i32: i32,    u8: u8,    u16: u16,    u32: u32,    i64: i64,    u64: u64,    f16: f16,    bf16: Bf16,    f32: f32,    f64: f64,};

Source: lib/accy/src/kernel/model/core/schedule/model.zig:29

zig
pub const Launch = struct {    grid: [3]u32 = .{ 1, 1, 1 },    block: [3]u32 = .{ 1, 1, 1 },    pub fn oneDim(extent: usize) Launch {        return .{ .grid = .{ @intCast(extent), 1, 1 } };    }};
Called byCallsprivate sourcelib.accy.src.eval.evaluatorexecuteKernelFunctionWithDiagnosticprivate sourcelib.accy.src.kernel.oracle.machinerunMachineLifecycletest sourcelib.accy.src.kernel.oracle.machinetest: Machine failed acquisition leav...test sourcelib.accy.src.kernel.oracle.machinetest: Machine grown grids reuse warme...test sourcelib.accy.src.kernel.oracle.machinetest: Machine runs zero-thread launch...+2 moreprivate sourcelib.accy.src.eval.evaluator.Evaluatordeinitkernel.oracle.Machinedeinit
Static calls · unresolved targets: 0 · external targets: 2.
Called byCallsprivate sourcelib.accy.src.eval.evaluatorexecuteKernelFunctionWithDiagnosticprivate sourcelib.accy.src.kernel.oracle.machinerunMachineLifecycletest sourcelib.accy.src.kernel.oracle.machinetest: Machine failed acquisition leav...test sourcelib.accy.src.kernel.oracle.machinetest: Machine grown grids reuse warme...test sourcelib.accy.src.kernel.oracle.machinetest: Machine runs zero-thread launch...+2 moreprivate sourcelib.accy.src.eval.evaluator.Evaluatorinitkernel.oracle.Machineinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsprivate sourcelib.accy.src.kernel.oracle.machinerunMachineLifecycletest sourcelib.accy.src.kernel.oracle.machinetest: Machine failed acquisition leav...test sourcelib.accy.src.kernel.oracle.machinetest: Machine grown grids reuse warme...test sourcelib.accy.src.kernel.oracle.machinetest: Machine runs zero-thread launch...test sourcelib.accy.src.kernel.oracle.machinetest: Machine steady launches make no...test sourcelib.accy.src.kernel.oracle.machinetest: Machine steady shared launches ...kernel.oracle.MachinerunWithDiagnostickernel.oracle.Machinerun
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallskernel.oracle.Machinerunprivate sourcelib.accy.src.eval.evaluatorexecuteKernelFunctionWithDiagnosticprivate sourcelib.accy.src.eval.evaluator.MachinerunCheckingprivate sourcelib.accy.src.eval.evaluatorcaptureFunctionDiagnostickernel.oracle.MachinerunWithDiagnostic
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/eval/evaluator.zig:274

zig
pub const shared_alloc_sentinel: u8 = 0x7F;

Source: lib/accy/src/eval/evaluator.zig:2008

zig
pub fn tf32RoundF32(value: f32) f32 {    const bits: u32 = @bitCast(value);    if (bits & 0x7F80_0000 == 0x7F80_0000) return value;    const rounded = (bits +% 0x1000) & 0xFFFF_E000;    return @bitCast(rounded);}
Called byCallsNo direct callsprivate sourcelib.accy.src.eval.evaluatorevalFloatUnarytest sourcelib.accy.src.eval.evaluatortest: tf32RoundF32 truncates mantissa...kernel.oracletf32RoundF32
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callskernel.oraclerun1Dkernel.oraclerun1DWithDiagnostictest sourcelib.accy.src.kernel.oracle.machinetest: Machine steady shared launches ...kernel.oracle.LaunchoneDim
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/kernel/oracle/machine.zig:24

zig
pub fn argumentBool(value: bool) Argument {    return .{ .scalar = .{ .bool = value } };}

Source: lib/accy/src/kernel/oracle/machine.zig:20

zig
pub fn argumentBuffer(comptime T: type, values: []T) Argument {    return .{ .memref = std.mem.sliceAsBytes(values) };}
Called byCallsNo direct callsprivate sourcelib.accy.src.kernel.oracle.machinerunMachineLifecycletest sourcelib.accy.src.kernel.oracle.machinetest: Machine failed acquisition leav...test sourcelib.accy.src.kernel.oracle.machinetest: Machine grown grids reuse warme...test sourcelib.accy.src.kernel.oracle.machinetest: Machine runs zero-thread launch...test sourcelib.accy.src.kernel.oracle.machinetest: Machine steady launches make no...+17 morekernelargumentBuffer
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/kernel/oracle/machine.zig:40

zig
pub fn argumentF32(value: f32) Argument {    return .{ .scalar = .{ .f32 = value } };}
Called byCallsNo direct callstest sourcelib.accy.src.kernel.oracle.machinetest: run1D binds scalar kernel argum...kernelargumentF32
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/kernel/oracle/machine.zig:44

zig
pub fn argumentF64(value: f64) Argument {    return .{ .scalar = .{ .f64 = value } };}

Source: lib/accy/src/kernel/oracle/machine.zig:28

zig
pub fn argumentI32(value: i32) Argument {    return .{ .scalar = .{ .i32 = value } };}

Source: lib/accy/src/kernel/oracle/machine.zig:36

zig
pub fn argumentI64(value: i64) Argument {    return .{ .scalar = .{ .i64 = value } };}

Source: lib/accy/src/kernel/oracle/machine.zig:32

zig
pub fn argumentU32(value: u32) Argument {    return .{ .scalar = .{ .u32 = value } };}
Called byCallsNo direct callstest sourcelib.accy.src.kernel.oracle.machinetest: run1D executes u32 scalar and b...kernelargumentU32
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/kernel/oracle/machine.zig:48

zig
pub fn run(allocator: std.mem.Allocator, kernel: *builder.Kernel, args: []const Argument, launch: Launch) !void {    try kernel.verify();    try eval.executeKernelFunction(allocator, kernel.func().op, args, launch);}
Called byCallsNo direct callskernel.oraclerun1Dtest sourcelib.accy.src.kernel.oracle.machinetest: run1D executes shared atomic ac...test sourcelib.accy.src.kernel.oracle.machinetest: run1D executes shared integer a...test sourcelib.accy.src.kernel.oracle.machinetest: run1D stages async shared copie...test sourcelib.accy.src.kernel.oracle.machinetest: run executes ballot rank on CPU+33 morekernel.oraclerun
Static calls · unresolved targets: 0 · external targets: 3.

Source: lib/accy/src/kernel/oracle/machine.zig:65

zig
pub fn run1D(allocator: std.mem.Allocator, kernel: *builder.Kernel, args: []const Argument, extent: usize) !void {    try run(allocator, kernel, args, Launch.oneDim(extent));}
Called byCallstest sourcelib.accy.src.kernel.oracle.machinetest: run1D binds scalar kernel argum...test sourcelib.accy.src.kernel.oracle.machinetest: run1D executes Choir-backed cop...test sourcelib.accy.src.kernel.oracle.machinetest: run1D executes atomic add kerne...test sourcelib.accy.src.kernel.oracle.machinetest: run1D executes integer atomic c...test sourcelib.accy.src.kernel.oracle.machinetest: run1D executes integer atomic m...+4 morekernel.oracle.LaunchoneDimkernel.oraclerunkernel.oraclerun1D
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/kernel/oracle/machine.zig:69

zig
pub fn run1DWithDiagnostic(    allocator: std.mem.Allocator,    kernel: *builder.Kernel,    args: []const Argument,    extent: usize,    diagnostic: *ExecutionDiagnostic,) !void {    try runWithDiagnostic(allocator, kernel, args, Launch.oneDim(extent), diagnostic);}
Called byCallsNo direct callerskernel.oracle.LaunchoneDimkernel.oraclerunWithDiagnostickernel.oraclerun1DWithDiagnostic
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/accy/src/kernel/oracle/machine.zig:53

zig
pub fn runWithDiagnostic(    allocator: std.mem.Allocator,    kernel: *builder.Kernel,    args: []const Argument,    launch: Launch,    diagnostic: *ExecutionDiagnostic,) !void {    diagnostic.len = 0;    try kernel.verifyWithDiagnostic(diagnostic);    try eval.executeKernelFunctionWithDiagnostic(allocator, kernel.func().op, args, launch, diagnostic);}
Called byCallsNo direct callskernel.oraclerun1DWithDiagnosticprivate sourcelib.accy.src.kernel.program.execution.CpurunWithDiagnostickernel.oraclerunWithDiagnostic
Static calls · unresolved targets: 0 · external targets: 3.

Source: lib/accy/src/eval/evaluator.zig:35

zig
pub const Diagnostic = choir.backends.contract.VerificationDiagnostic;

Source: lib/accy/src/kernel/oracle/machine.zig:11

zig
pub const enabled = true;

Source: lib/accy/src/kernel/oracle/root.zig

zig
const machine = @import("machine.zig");pub const enabled = machine.enabled;pub const Launch = machine.Launch;pub const Argument = machine.Argument;pub const Machine = machine.Machine;pub const Scalar = machine.Scalar;pub const ExecutionDiagnostic = machine.ExecutionDiagnostic;pub const shared_alloc_sentinel = machine.shared_alloc_sentinel;pub const tf32RoundF32 = machine.tf32RoundF32;pub const argumentBuffer = machine.argumentBuffer;pub const argumentBool = machine.argumentBool;pub const argumentI32 = machine.argumentI32;pub const argumentU32 = machine.argumentU32;pub const argumentI64 = machine.argumentI64;pub const argumentF32 = machine.argumentF32;pub const argumentF64 = machine.argumentF64;pub const run = machine.run;pub const runWithDiagnostic = machine.runWithDiagnostic;pub const run1D = machine.run1D;pub const run1DWithDiagnostic = machine.run1DWithDiagnostic;

Source: lib/accy/src/kernel/root.zig:12

zig
pub const oracle = @import("oracle/root.zig");

Complete caller list for kernel.oracle.Machine.deinit

7 direct callers.

Complete caller list for kernel.oracle.Machine.init

7 direct callers.

Complete caller list for kernel.argumentBuffer

22 direct callers.

Complete caller list for kernel.oracle.run

38 direct callers.

Complete caller list for kernel.oracle.run1D

9 direct callers.

Audit

Definitions25
Public names35
Members23
Version26.7.0
Revisiondaab053ee433