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.


Level 2

This is a submodule of mir.glas.
The Level 2 BLAS perform matrix-vector operations.

NoteGLAS is singe thread for now.

Matrix-vector operations

Function Name Description
gemv general matrix-vector multiplication, partially optimized

Ilya Yaroshenko
  • nothrow @nogc @system void gemv(A, B, C, SliceKind kindA, SliceKind kindB, SliceKind kindC)(C alpha, Slice!(const(A)*, 2, kindA) asl, Slice!(const(B)*, 1, kindB) xsl, C beta, Slice!(C*, 1, kindC) ysl)
    if (allSatisfy!(isNumeric, A, B, C));
    DRAFT Performs general matrix-vector multiplication.

    Pseudo codey := alpha A × x + beta y.

    C alphascalar
    Slice!(const(A)*, 2, kindA) aslm ⨉ n matrix
    Slice!(const(B)*, 1, kindB) xsln ⨉ 1 vector
    C betascalar. When beta is supplied as zero then the vector ysl need not be set on input.
    Slice!(C*, 1, kindC) yslm ⨉ 1 vector

    NoteGLAS does not require transposition parameters. Use transposed  to perform zero cost Slice transposition.

    BLASSGEMV, DGEMV, (CGEMV, ZGEMV are not implemented for now)

    import mir.ndslice;
    auto a = slice!double(3, 5);
    a[] =
        [[-5,  1,  7, 7, -4],
         [-1, -5,  6, 3, -3],
         [-5, -2, -3, 6,  0]];
    auto b = slice!double(5);
    b[] =
    auto c = slice!double(3);
    gemv!(double, double, double)(1.0, a, b, 0.0, c);
    assert(c ==