use crate::buffer::Arena;
#[allow(clippy::too_many_arguments)]
pub fn run_group_norm(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
src: usize,
gamma: usize,
beta: usize,
dst: usize,
n: usize,
c: usize,
h: usize,
w: usize,
num_groups: usize,
eps: f32,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_group_norm_nchw_f32(
src,
gamma,
beta,
dst,
n,
c,
h,
w,
num_groups,
eps,
host.as_mut_ptr(),
);
}
arena.write_bytes_range(queue, 0, &host);
}
#[allow(clippy::too_many_arguments)]
pub fn run_layer_norm2d(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
src: usize,
gamma: usize,
beta: usize,
dst: usize,
n: usize,
c: usize,
h: usize,
w: usize,
eps: f32,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_layer_norm2d_nchw_f32(
src,
gamma,
beta,
dst,
n,
c,
h,
w,
eps,
host.as_mut_ptr(),
);
}
arena.write_bytes_range(queue, 0, &host);
}
pub fn run_reverse(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
src: usize,
dst: usize,
dims: &[u32],
rev_mask: &[bool],
elem_bytes: usize,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_reverse(src, dst, dims, rev_mask, elem_bytes, host.as_mut_ptr());
}
arena.write_bytes_range(queue, 0, &host);
}
#[allow(clippy::too_many_arguments)]
pub fn run_gru(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
x: usize,
w_ih: usize,
w_hh: usize,
b_ih: usize,
b_hh: usize,
h0: usize,
dst: usize,
batch: usize,
seq: usize,
input_size: usize,
hidden: usize,
num_layers: usize,
bidirectional: bool,
carry: bool,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_gru_f32(
x,
w_ih,
w_hh,
b_ih,
b_hh,
h0,
dst,
batch,
seq,
input_size,
hidden,
num_layers,
bidirectional,
carry,
host.as_mut_ptr(),
);
}
arena.write_bytes_range(queue, 0, &host);
}
#[allow(clippy::too_many_arguments)]
pub fn run_rnn(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
x: usize,
w_ih: usize,
w_hh: usize,
bias: usize,
h0: usize,
dst: usize,
batch: usize,
seq: usize,
input_size: usize,
hidden: usize,
num_layers: usize,
bidirectional: bool,
carry: bool,
relu: bool,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_rnn_f32(
x,
w_ih,
w_hh,
bias,
h0,
dst,
batch,
seq,
input_size,
hidden,
num_layers,
bidirectional,
carry,
relu,
host.as_mut_ptr(),
);
}
arena.write_bytes_range(queue, 0, &host);
}
#[allow(clippy::too_many_arguments)]
pub fn run_argreduce(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
src: usize,
dst: usize,
outer: usize,
reduced: usize,
inner: usize,
is_max: bool,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_argreduce_f32(
src,
dst,
outer,
reduced,
inner,
is_max,
host.as_mut_ptr(),
);
}
arena.write_bytes_range(queue, 0, &host);
}
#[allow(clippy::too_many_arguments)]
pub fn run_resize_nearest_2x(
arena: &Arena,
device: &wgpu::Device,
queue: &wgpu::Queue,
src: usize,
dst: usize,
n: usize,
c: usize,
h: usize,
w: usize,
) {
let mut host = arena.read_bytes_range(device, queue, 0, arena.size);
unsafe {
rlx_cpu::thunk::execute_resize_nearest_2x_f32(src, dst, n, c, h, w, host.as_mut_ptr());
}
arena.write_bytes_range(queue, 0, &host);
}