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.glas.l2

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

Authors:
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.

    Parameters:
    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)

    Examples:
    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[] =
        [-5.0,
          4.0,
         -4.0,
         -1.0,
          9.0];
    
    auto c = slice!double(3);
    
    gemv!(double, double, double)(1.0, a, b, 0.0, c);
    
    assert(c ==
        [-42.0,
         -69.0,
          23.0]);