Documentation
¶
Overview ¶
Package webgpu implements the WebGPU backend for GPU-accelerated tensor operations. Uses go-webgpu (github.com/go-webgpu/webgpu) for zero-CGO WebGPU bindings.
Package webgpu provides embedded WGSL compute shaders for tensor operations.
Index ¶
- func IsAvailable() (available bool)
- func ListAdapters() (adapters []*wgpu.AdapterInfoGo, err error)
- type Backend
- func (b *Backend) AdapterInfo() *wgpu.AdapterInfoGo
- func (b *Backend) Add(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) AddScalar(x *tensor.RawTensor, scalar any) *tensor.RawTensor
- func (b *Backend) And(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Argmax(x *tensor.RawTensor, dim int) *tensor.RawTensor
- func (b *Backend) BatchMatMul(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Cast(x *tensor.RawTensor, dtype tensor.DataType) *tensor.RawTensor
- func (b *Backend) Cat(tensors []*tensor.RawTensor, dim int) *tensor.RawTensor
- func (b *Backend) Chunk(x *tensor.RawTensor, n, dim int) []*tensor.RawTensor
- func (b *Backend) Conv2D(input, kernel *tensor.RawTensor, stride, padding int) *tensor.RawTensor
- func (b *Backend) Cos(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Device() tensor.Device
- func (b *Backend) Div(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) DivScalar(x *tensor.RawTensor, scalar any) *tensor.RawTensor
- func (b *Backend) Embedding(weight, indices *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Equal(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Exp(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Expand(x *tensor.RawTensor, newShape tensor.Shape) *tensor.RawTensor
- func (b *Backend) Gather(input *tensor.RawTensor, dim int, indices *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Greater(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) GreaterEqual(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Log(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Lower(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) LowerEqual(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) MatMul(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) MaxPool2D(input *tensor.RawTensor, kernelSize, stride int) *tensor.RawTensor
- func (b *Backend) MeanDim(x *tensor.RawTensor, dim int, keepDim bool) *tensor.RawTensor
- func (b *Backend) MemoryStats() MemoryStats
- func (b *Backend) Mul(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) MulScalar(x *tensor.RawTensor, scalar any) *tensor.RawTensor
- func (b *Backend) Name() string
- func (b *Backend) Not(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) NotEqual(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Or(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) ReLU(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Release()
- func (b *Backend) Reshape(t *tensor.RawTensor, newShape tensor.Shape) *tensor.RawTensor
- func (b *Backend) Rsqrt(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Sigmoid(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Sin(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Softmax(x *tensor.RawTensor, dim int) *tensor.RawTensor
- func (b *Backend) Sqrt(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Squeeze(x *tensor.RawTensor, dim int) *tensor.RawTensor
- func (b *Backend) Sub(a, other *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) SubScalar(x *tensor.RawTensor, scalar any) *tensor.RawTensor
- func (b *Backend) Sum(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) SumDim(x *tensor.RawTensor, dim int, keepDim bool) *tensor.RawTensor
- func (b *Backend) Tanh(x *tensor.RawTensor) *tensor.RawTensor
- func (b *Backend) Transpose(t *tensor.RawTensor, axes ...int) *tensor.RawTensor
- func (b *Backend) Unsqueeze(x *tensor.RawTensor, dim int) *tensor.RawTensor
- func (b *Backend) Where(condition, x, y *tensor.RawTensor) *tensor.RawTensor
- type BufferPool
- type BufferSize
- type MemoryStats
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsAvailable ¶
func IsAvailable() (available bool)
IsAvailable checks if WebGPU is available on this system.
func ListAdapters ¶
func ListAdapters() (adapters []*wgpu.AdapterInfoGo, err error)
ListAdapters returns information about all available GPU adapters.
Types ¶
type Backend ¶
type Backend struct {
// contains filtered or unexported fields
}
Backend implements tensor operations on GPU using WebGPU.
func New ¶
New creates a new WebGPU backend. Returns an error if WebGPU is not available or initialization fails.
func (*Backend) AdapterInfo ¶
func (b *Backend) AdapterInfo() *wgpu.AdapterInfoGo
AdapterInfo returns information about the GPU adapter.
func (*Backend) And ¶ added in v0.3.0
And performs element-wise logical AND on GPU. Supports mixed dtypes by casting to float32 (for boolean tensors from different sources).
func (*Backend) Argmax ¶ added in v0.3.0
Argmax returns indices of maximum values along dimension on GPU.
func (*Backend) BatchMatMul ¶ added in v0.4.0
BatchMatMul performs batched matrix multiplication on GPU. Supports 3D tensors [batch, M, K] @ [batch, K, N] -> [batch, M, N] and 4D tensors [batch, heads, M, K] @ [batch, heads, K, N].
func (*Backend) Cast ¶ added in v0.3.0
Cast converts tensor to different data type. Supports float32 and int32 as target types.
func (*Backend) Chunk ¶ added in v0.3.0
Chunk splits tensor into n equal parts along the specified dimension.
func (*Backend) Conv2D ¶
Conv2D performs 2D convolution on GPU. Input shape: [batch, in_channels, height, width]. Kernel shape: [out_channels, in_channels, kH, kW].
func (*Backend) Embedding ¶ added in v0.5.1
Embedding performs embedding lookup on GPU. weight: [num_embeddings, embedding_dim], indices: int32 tensor. Returns: [...indices_shape, embedding_dim].
func (*Backend) Equal ¶ added in v0.3.0
Equal performs element-wise equality comparison on GPU. Always returns float32 tensor (0.0 for false, 1.0 for true).
func (*Backend) Expand ¶ added in v0.3.0
Expand broadcasts tensor to new shape. GPU-accelerated for up to 6D tensors.
func (*Backend) Gather ¶ added in v0.3.0
func (b *Backend) Gather(input *tensor.RawTensor, dim int, indices *tensor.RawTensor) *tensor.RawTensor
Gather selects elements along dim using index tensor on GPU.
func (*Backend) Greater ¶ added in v0.3.0
Greater performs element-wise greater-than comparison on GPU. Always returns float32 tensor (0.0 for false, 1.0 for true).
func (*Backend) GreaterEqual ¶ added in v0.3.0
GreaterEqual performs element-wise greater-or-equal comparison on GPU. Always returns float32 tensor (0.0 for false, 1.0 for true).
func (*Backend) Lower ¶ added in v0.3.0
Lower performs element-wise less-than comparison on GPU. Always returns float32 tensor (0.0 for false, 1.0 for true).
func (*Backend) LowerEqual ¶ added in v0.3.0
LowerEqual performs element-wise less-or-equal comparison on GPU. Always returns float32 tensor (0.0 for false, 1.0 for true).
func (*Backend) MaxPool2D ¶
MaxPool2D performs 2D max pooling on GPU. Input shape: [batch, channels, height, width].
func (*Backend) MemoryStats ¶
func (b *Backend) MemoryStats() MemoryStats
MemoryStats returns current GPU memory usage statistics.
func (*Backend) Mul ¶
Mul performs element-wise multiplication on GPU. Supports float32 and int32 dtypes.
func (*Backend) MulScalar ¶ added in v0.3.0
MulScalar multiplies tensor elements by a scalar on GPU.
func (*Backend) NotEqual ¶ added in v0.3.0
NotEqual performs element-wise inequality comparison on GPU. Always returns float32 tensor (0.0 for false, 1.0 for true).
func (*Backend) Or ¶ added in v0.3.0
Or performs element-wise logical OR on GPU. Supports mixed dtypes by casting to float32 (for boolean tensors from different sources).
func (*Backend) Release ¶
func (b *Backend) Release()
Release releases all WebGPU resources. Must be called when the backend is no longer needed.
func (*Backend) Reshape ¶
Reshape returns a tensor with new shape. This is typically a metadata-only operation (zero-copy).
func (*Backend) Softmax ¶
Softmax applies softmax along the specified dimension. Supports N-dimensional tensors with dim=-1 (last dimension).
func (*Backend) Squeeze ¶ added in v0.3.0
Squeeze removes a dimension of size 1 at the specified position.
func (*Backend) Sub ¶
Sub performs element-wise subtraction on GPU. Supports float32 and int32 dtypes.
func (*Backend) SubScalar ¶ added in v0.3.0
SubScalar subtracts a scalar from tensor elements on GPU.
func (*Backend) SumDim ¶ added in v0.3.0
SumDim sums along a dimension. Implemented on CPU as reduction operations are complex on GPU.
func (*Backend) Transpose ¶
Transpose transposes the tensor by permuting its dimensions. GPU-accelerated for 2D (optimized) and ND tensors (up to 6D).
type BufferPool ¶
type BufferPool struct {
// contains filtered or unexported fields
}
BufferPool manages GPU buffer reuse to reduce allocation overhead. Buffers are categorized by size and usage flags.
func NewBufferPool ¶
func NewBufferPool(device *wgpu.Device) *BufferPool
NewBufferPool creates a new buffer pool for the given device.
func (*BufferPool) Acquire ¶
func (p *BufferPool) Acquire(size uint64, usage wgpu.BufferUsage) *wgpu.Buffer
Acquire gets a buffer from the pool or creates a new one. Returns a buffer that matches or exceeds the requested size and usage.
func (*BufferPool) Clear ¶
func (p *BufferPool) Clear()
Clear releases all pooled buffers. Should be called when the backend is released.
func (*BufferPool) Release ¶
func (p *BufferPool) Release(buffer *wgpu.Buffer, size uint64, usage wgpu.BufferUsage)
Release returns a buffer to the pool for reuse. If the pool is full, the buffer is immediately released.
func (*BufferPool) Stats ¶
func (p *BufferPool) Stats() (allocated, released, hits, misses uint64, pooledCount int)
Stats returns statistics about buffer pool usage.
type BufferSize ¶
type BufferSize int
BufferSize represents different buffer size categories for pooling.
const ( // SmallBuffer for tensors < 4KB. SmallBuffer BufferSize = iota // MediumBuffer for tensors 4KB-1MB. MediumBuffer // LargeBuffer for tensors > 1MB. LargeBuffer )
type MemoryStats ¶
type MemoryStats struct {
// Total bytes allocated since backend creation
TotalAllocatedBytes uint64
// Peak memory usage in bytes
PeakMemoryBytes uint64
// Number of currently active buffers
ActiveBuffers int64
// Buffer pool statistics
PoolAllocated uint64
PoolReleased uint64
PoolHits uint64
PoolMisses uint64
PooledBuffers int
}
MemoryStats represents GPU memory usage statistics.