Skip to main content

LevelZeroBackend

Struct LevelZeroBackend 

Source
pub struct LevelZeroBackend { /* private fields */ }
Expand description

Intel Level Zero GPU compute backend.

On Linux and Windows this selects the first Intel GPU via the Level Zero loader library (libze_loader.so / ze_loader.dll) and allocates device memory through the Level Zero memory model.

On macOS every operation returns BackendError::DeviceError wrapping crate::error::LevelZeroError::UnsupportedPlatform.

§Lifecycle

  1. LevelZeroBackend::new() — create an uninitialised backend.
  2. init() — load the Level Zero driver and select a GPU.
  3. Use alloc, copy_htod, compute ops, copy_dtoh, free.
  4. synchronize() — wait for all pending GPU work to finish.

Implementations§

Source§

impl LevelZeroBackend

Source

pub fn new() -> Self

Create a new, uninitialised Level Zero backend.

Trait Implementations§

Source§

impl ComputeBackend for LevelZeroBackend

Source§

fn name(&self) -> &str

Backend name (e.g., "cuda", "rocm", "metal").
Source§

fn init(&mut self) -> BackendResult<()>

Initialize the backend (select device, create context). Read more
Source§

fn is_initialized(&self) -> bool

Returns true if the backend is ready for operations.
Source§

fn gemm( &self, _trans_a: BackendTranspose, _trans_b: BackendTranspose, m: usize, n: usize, k: usize, alpha: f64, a_ptr: u64, _lda: usize, b_ptr: u64, _ldb: usize, beta: f64, c_ptr: u64, _ldc: usize, ) -> BackendResult<()>

General matrix multiply: C = alpha * op(A) * op(B) + beta * C. Read more
Source§

fn batched_gemm( &self, _trans_a: BackendTranspose, _trans_b: BackendTranspose, m: usize, n: usize, k: usize, alpha: f64, a_ptr: u64, _lda: usize, stride_a: usize, b_ptr: u64, _ldb: usize, stride_b: usize, beta: f64, c_ptr: u64, _ldc: usize, stride_c: usize, batch_count: usize, ) -> BackendResult<()>

Strided batched GEMM: for each batch b in 0..batch_count, compute C_b = alpha * op(A_b) * op(B_b) + beta * C_b where A_b starts at a_ptr + b * stride_a * 4 bytes (f32 elements), etc. Read more
Source§

fn conv2d_forward( &self, input_ptr: u64, input_shape: &[usize], filter_ptr: u64, filter_shape: &[usize], output_ptr: u64, output_shape: &[usize], stride: &[usize], padding: &[usize], ) -> BackendResult<()>

2D convolution forward pass. Read more
Source§

fn attention( &self, q_ptr: u64, k_ptr: u64, v_ptr: u64, o_ptr: u64, batch: usize, heads: usize, seq_q: usize, seq_kv: usize, head_dim: usize, scale: f64, causal: bool, ) -> BackendResult<()>

Scaled dot-product attention. Read more
Source§

fn reduce( &self, op: ReduceOp, input_ptr: u64, output_ptr: u64, shape: &[usize], axis: usize, ) -> BackendResult<()>

Reduction along an axis. Read more
Source§

fn unary( &self, op: UnaryOp, input_ptr: u64, output_ptr: u64, n: usize, ) -> BackendResult<()>

Element-wise unary operation. Read more
Source§

fn binary( &self, op: BinaryOp, a_ptr: u64, b_ptr: u64, output_ptr: u64, n: usize, ) -> BackendResult<()>

Element-wise binary operation. Read more
Source§

fn synchronize(&self) -> BackendResult<()>

Synchronize all pending operations on this backend. Read more
Source§

fn alloc(&self, bytes: usize) -> BackendResult<u64>

Allocate device memory. Read more
Source§

fn free(&self, ptr: u64) -> BackendResult<()>

Free device memory previously allocated with alloc.
Source§

fn copy_htod(&self, dst: u64, src: &[u8]) -> BackendResult<()>

Copy data from host memory to device memory. Read more
Source§

fn copy_dtoh(&self, dst: &mut [u8], src: u64) -> BackendResult<()>

Copy data from device memory to host memory. Read more
Source§

impl Debug for LevelZeroBackend

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for LevelZeroBackend

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more