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.
- fn add_scalar_vulkan
- fn add_vec_vulkan
- fn gemm_vulkan
- fn gemm_vulkan_f32
- fn gemv_vulkan
- fn gemv_vulkan_f32
- fn layernorm_vulkan
- fn mul_scalar_vulkan
- fn mul_vec_vulkan
- fn new_vulkan_backend
- fn relu_vulkan
- fn relu_vulkan_f32
- fn sigmoid_vulkan
- fn sigmoid_vulkan_f32
- fn softmax_vulkan
- fn tanh_vulkan
- struct VulkanBackend