ExternalBlasBackend

Struct ExternalBlasBackend 

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

Conversion rules for row-major data to column-major BLAS:

Goal: Compute C = A * B where:

  • A is m×k (row-major)
  • B is k×n (row-major)
  • C is m×n (row-major)

Row-major to column-major interpretation:

  • Row-major A (m×k) appears as A^T (k×m) in column-major → call this At
  • Row-major B (k×n) appears as B^T (n×k) in column-major → call this Bt
  • Row-major C (m×n) appears as C^T (n×m) in column-major → call this Ct
  • To compute C = A * B, we need: C^T = (A * B)^T = B^T * A^T
  • So: Ct = Bt * At

BLAS call transformation:

  • Original: C = A * B (row-major world)
  • BLAS call: Ct = Bt * At (column-major world)
  • transa = ‘N’ (Bt is already transposed-looking, no transpose needed)
  • transb = ‘N’ (At is already transposed-looking, no transpose needed)
  • Call: dgemm(‘N’, ‘N’, n, m, k, alpha, B, lda, A, ldb, beta, C, ldc)

Dimension conversions:

  • m_blas = n (Ct rows = Bt rows)
  • n_blas = m (Ct cols = At cols)
  • k_blas = k (common dimension)
  • lda = n (leading dimension of Bt: n×k in column-major, lda = n)
  • ldb = k (leading dimension of At: k×m in column-major, ldb = k)
  • ldc = n (leading dimension of Ct: n×m in column-major, ldc = n) External BLAS backend (LP64: 32-bit integers)

Implementations§

Source§

impl ExternalBlasBackend

Source

pub fn new(dgemm: DgemmFnPtr, zgemm: ZgemmFnPtr) -> Self

Trait Implementations§

Source§

impl GemmBackend for ExternalBlasBackend

Source§

unsafe fn dgemm( &self, m: usize, n: usize, k: usize, a: *const f64, b: *const f64, c: *mut f64, )

Matrix multiplication: C = A * B (f64) Read more
Source§

unsafe fn zgemm( &self, m: usize, n: usize, k: usize, a: *const Complex<f64>, b: *const Complex<f64>, c: *mut Complex<f64>, )

Matrix multiplication: C = A * B (Complex) Read more
Source§

fn name(&self) -> &'static str

Returns backend name for debugging
Source§

fn is_ilp64(&self) -> bool

Returns true if this backend uses 64-bit integers (ILP64)

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> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

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

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoCloned<T> for T

Source§

fn clone_to(self, target: &mut T)

Moves an existing object or clones from a reference to the target object.
Source§

fn into_cloned(self) -> T

Returns an existing object or a new clone from a reference.
Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V