Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

mir.blas

Low-level ndslice wrapper for BLAS.
Authors:
Ilya Yaroshenko
Examples:
import mir.ndslice.slice: sliced;
import mir.ndslice.topology: universal;

auto a = [3.0, 5, 2, 4, 2, 3].sliced(2, 3).universal;
auto b = [2.0, 3, 4].sliced(3, 1).universal;

auto c = [100.0, 100].sliced(2, 1).universal;
gemm(1.0, a, b, 1.0, c);
assert(c == [[6 + 15 + 8 + 100], [8 + 6 + 12 + 100]]);
T dot(T, SliceKind kindX, SliceKind kindY)(Slice!(const(T)*, 1, kindX) x, Slice!(const(T)*, 1, kindY) y);
auto nrm2(T, SliceKind kindX)(Slice!(const(T)*, 1, kindX) x);
auto asum(T, SliceKind kindX)(Slice!(const(T)*, 1, kindX) x);
void axpy(T, SliceKind kindX, SliceKind kindY)(T a, Slice!(const(T)*, 1, kindX) x, Slice!(T*, 1, kindY) y);
void scal(T, SliceKind kindX)(T a, Slice!(T*, 1, kindX) x);
void copy(T, SliceKind kindX, SliceKind kindY)(Slice!(const(T)*, 1, kindX) x, Slice!(T*, 1, kindY) y);
void swap(T, SliceKind kindX, SliceKind kindY)(Slice!(T*, 1, kindX) x, Slice!(T*, 1, kindY) y);
void ger(T, SliceKind kindX, SliceKind kindY, SliceKind kindA)(T alpha, Slice!(const(T)*, 1, kindX) x, Slice!(const(T)*, 1, kindY) y, Slice!(T*, 2, kindA) a);
void gerc(T, SliceKind kindX, SliceKind kindY, SliceKind kindA)(T alpha, Slice!(const(T)*, 1, kindX) x, Slice!(const(T)*, 1, kindY) y, Slice!(T*, 2, kindA) a);
void gemv(T, SliceKind kindA, SliceKind kindX, SliceKind kindY)(T alpha, Slice!(const(T)*, 2, kindA) a, Slice!(const(T)*, 1, kindX) x, T beta, Slice!(T*, 1, kindY) y);
void gemm(T, SliceKind kindA, SliceKind kindB, SliceKind kindC)(T alpha, Slice!(const(T)*, 2, kindA) a, Slice!(const(T)*, 2, kindB) b, T beta, Slice!(T*, 2, kindC) c);
void syrk(T, SliceKind kindA, SliceKind kindC)(Uplo uplo, T alpha, Slice!(const(T)*, 2, kindA) a, T beta, Slice!(T*, 2, kindC) c);
void trmm(T, SliceKind kindA, SliceKind kindB)(cblas.Side side, cblas.Uplo uplo, cblas.Diag diag, T alpha, Slice!(const(T)*, 2, kindA) a, Slice!(T*, 2, kindB) b);
void trsm(T, SliceKind kindA, SliceKind kindB)(cblas.Side side, cblas.Uplo uplo, cblas.Diag diag, T alpha, Slice!(const(T)*, 2, kindA) a, Slice!(T*, 2, kindB) b);
@trusted void symv(T, SliceKind kindA, SliceKind kindX, SliceKind kindY)(Uplo uplo, T alpha, Slice!(const(T)*, 2, kindA) a, Slice!(const(T)*, 1, kindX) x, T beta, Slice!(T*, 1, kindY) y);
@trusted void symm(T, SliceKind kindA, SliceKind kindB, SliceKind kindC)(Side side, Uplo uplo, T alpha, Slice!(const(T)*, 2, kindA) a, Slice!(const(T)*, 2, kindB) b, T beta, Slice!(T*, 2, kindC) c);
auto iamax(T, SliceKind kindX)(Slice!(const(T)*, 1, kindX) x);