#[non_exhaustive]pub enum CpuVendorBatch {
Allowed {
max_item_dim: usize,
},
Required,
Forbidden,
}Expand description
Whether a provider may, must, or must not execute a batch of GEMMs with
one vendor batch call (cblas_?gemm_batch).
The engine resolves this from the effective crate::CpuBatchPolicy
before any output write. A provider without a vendor batch routine treats
Self::Allowed and Self::Forbidden alike and reports
CpuProviderUnsupported::RuntimeUnavailable for Self::Required.
§Examples
use tenferro_cpu::provider::CpuVendorBatch;
let allowed = CpuVendorBatch::Allowed { max_item_dim: 16 };
assert!(allowed.permits([[4, 4, 4], [8, 8, 8]]));
assert!(!allowed.permits([[4, 4, 32], [8, 8, 8]]));
assert!(!CpuVendorBatch::Forbidden.permits([[1, 1, 1], [1, 1, 1]]));Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Allowed
Use a vendor batch call when there is more than one item and every
item’s m, n and k are at most max_item_dim.
Required
Execute the whole batch with one vendor batch call.
Forbidden
Never use a vendor batch call.
Implementations§
Source§impl CpuVendorBatch
impl CpuVendorBatch
Sourcepub fn permits(self, dims: impl IntoIterator<Item = [usize; 3]>) -> bool
pub fn permits(self, dims: impl IntoIterator<Item = [usize; 3]>) -> bool
Whether this control selects a vendor batch call for GEMMs of the given
[m, n, k] dimensions; Self::Required always does.
§Examples
use tenferro_cpu::provider::CpuVendorBatch;
assert!(CpuVendorBatch::Required.permits([[64, 64, 64]]));Trait Implementations§
Source§impl Clone for CpuVendorBatch
impl Clone for CpuVendorBatch
Source§fn clone(&self) -> CpuVendorBatch
fn clone(&self) -> CpuVendorBatch
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for CpuVendorBatch
Source§impl Debug for CpuVendorBatch
impl Debug for CpuVendorBatch
Source§impl Default for CpuVendorBatch
impl Default for CpuVendorBatch
impl Eq for CpuVendorBatch
Source§impl PartialEq for CpuVendorBatch
impl PartialEq for CpuVendorBatch
impl StructuralPartialEq for CpuVendorBatch
Auto Trait Implementations§
impl Freeze for CpuVendorBatch
impl RefUnwindSafe for CpuVendorBatch
impl Send for CpuVendorBatch
impl Sync for CpuVendorBatch
impl Unpin for CpuVendorBatch
impl UnsafeUnpin for CpuVendorBatch
impl UnwindSafe for CpuVendorBatch
Blanket Implementations§
impl<T> Boilerplate for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more