Skip to content

compute

fn add_scalar_vulkan #

fn add_scalar_vulkan(dev &vulkan.Device, x_data []f64, s f64) ![]f64

add_scalar_vulkan adds a scalar to each element via scale pipeline. Since scale is dst = alpha * src (not dst = src + scalar), we emulate by dst = src * 1.0 + scalar via two passes: first copy, then add scalar constant.

fn add_vec_vulkan #

fn add_vec_vulkan(dev &vulkan.Device, a_data []f64, b_data []f64) ![]f64

add_vec_vulkan computes element-wise addition via vector_add pipeline.

fn gemm_vulkan #

fn gemm_vulkan(dev &vulkan.Device, a_data []f64, b_data []f64, m int, n int, k int) ![]f64

gemm_vulkan computes C = A * B with row-major inputs/outputs in f64 API. Internally uses f32 Vulkan kernels and converts back to f64.

fn gemm_vulkan_f32 #

fn gemm_vulkan_f32(dev &vulkan.Device, a_data []f32, b_data []f32, m int, n int, k int) ![]f32

gemm_vulkan_f32 computes C = A * B with row-major inputs/outputs. A is [m x k], B is [k x n], result is [m x n].

fn gemv_vulkan #

fn gemv_vulkan(dev &vulkan.Device, a_data []f64, x_data []f64, m int, n int) ![]f64

fn gemv_vulkan_f32 #

fn gemv_vulkan_f32(dev &vulkan.Device, a_data []f32, x_data []f32, m int, n int) ![]f32

fn layernorm_vulkan #

fn layernorm_vulkan(dev &vulkan.Device, x_data []f64, gamma []f64, beta []f64) ![]f64

layernorm_vulkan applies row-wise layer normalization via the layernorm pipeline. Gamma/beta are applied on CPU since the Vulkan layernorm op does not include affine transform.

fn mul_scalar_vulkan #

fn mul_scalar_vulkan(dev &vulkan.Device, x_data []f64, s f64) ![]f64

mul_scalar_vulkan multiplies each element by scalar via scale pipeline.

fn mul_vec_vulkan #

fn mul_vec_vulkan(dev &vulkan.Device, a_data []f64, b_data []f64) ![]f64

mul_vec_vulkan is not directly supported by Vulkan BLAS; use CPU fallback.

fn new_vulkan_backend #

fn new_vulkan_backend(dev &vulkan.Device) VulkanBackend

fn relu_vulkan #

fn relu_vulkan(dev &vulkan.Device, x_data []f64) ![]f64

fn relu_vulkan_f32 #

fn relu_vulkan_f32(dev &vulkan.Device, x_data []f32) ![]f32

fn sigmoid_vulkan #

fn sigmoid_vulkan(dev &vulkan.Device, x_data []f64) ![]f64

fn sigmoid_vulkan_f32 #

fn sigmoid_vulkan_f32(dev &vulkan.Device, x_data []f32) ![]f32

fn softmax_vulkan #

fn softmax_vulkan(dev &vulkan.Device, x_data []f64) ![]f64

softmax_vulkan applies row-wise softmax via the softmax pipeline.

fn tanh_vulkan #

fn tanh_vulkan(dev &vulkan.Device, x_data []f64) ![]f64

tanh_vulkan applies tanh using GELU shader (contains tanh). WARNING: applies GELU activation, not pure tanh. For accurate tanh, use CPU fallback.

struct VulkanBackend #

struct VulkanBackend {
mut:
	dev &vulkan.Device
}

VulkanBackend implements ComputeBackend using the Vulkan compute API.

fn (VulkanBackend) name #

fn (b &VulkanBackend) name() string

fn (VulkanBackend) supports #

fn (b &VulkanBackend) supports(op string) bool

fn (VulkanBackend) gemm #

fn (b &VulkanBackend) gemm(a_data []f64, b_data []f64, m int, n int, k int) ![]f64

fn (VulkanBackend) gemv #

fn (b &VulkanBackend) gemv(a_data []f64, x_data []f64, m int, n int) ![]f64

fn (VulkanBackend) relu #

fn (b &VulkanBackend) relu(x_data []f64) ![]f64

fn (VulkanBackend) sigmoid #

fn (b &VulkanBackend) sigmoid(x_data []f64) ![]f64

fn (VulkanBackend) tanh #

fn (b &VulkanBackend) tanh(x_data []f64) ![]f64

fn (VulkanBackend) add_vec #

fn (b &VulkanBackend) add_vec(a_data []f64, b_data []f64) ![]f64

fn (VulkanBackend) mul_vec #

fn (b &VulkanBackend) mul_vec(a_data []f64, b_data []f64) ![]f64

fn (VulkanBackend) add_scalar #

fn (b &VulkanBackend) add_scalar(x_data []f64, s f64) ![]f64

fn (VulkanBackend) mul_scalar #

fn (b &VulkanBackend) mul_scalar(x_data []f64, s f64) ![]f64

fn (VulkanBackend) softmax #

fn (b &VulkanBackend) softmax(x_data []f64) ![]f64

fn (VulkanBackend) layernorm #

fn (b &VulkanBackend) layernorm(x_data []f64, gamma []f64, beta []f64) ![]f64

fn (VulkanBackend) conv2d #

fn (b &VulkanBackend) conv2d(input []f64, kernel []f64, batch int, in_h int, in_w int, in_ch int, out_ch int, k_h int, k_w int, stride_h int, stride_w int) ![]f64

fn (VulkanBackend) to_internal #

fn (b &VulkanBackend) to_internal(data []f64, rows int, cols int) ![]f64

to_internal converts row-major to Vulkan's column-major layout.

fn (VulkanBackend) from_internal #

fn (b &VulkanBackend) from_internal(data []f64, rows int, cols int) ![]f64

from_internal converts Vulkan's column-major layout back to row-major.