nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org/nd4j/linalg/api/blas/impl/BaseLevel2.java
@Override
    public void gemv(char order, char transA, double alpha, INDArray A, INDArray X, double beta, INDArray Y) {
        if (Nd4j.getExecutioner().getProfilingMode() == OpExecutioner.ProfilingMode.ALL)
            OpProfiler.getInstance().processBlasCall(false, A, X, Y);

        if (A.isSparse() && !X.isSparse()) {
            Nd4j.getSparseBlasWrapper().level2().gemv(order, transA, alpha, A, X, beta, Y);
            return;
        }

        GemvParameters parameters = new GemvParameters(A, X, Y);
        if (A.data().dataType() == DataBuffer.Type.DOUBLE) {
            DefaultOpExecutioner.validateDataType(DataBuffer.Type.DOUBLE, parameters.getA(), parameters.getX(),
                            parameters.getY());
            dgemv(order, parameters.getAOrdering(), parameters.getM(), parameters.getN(), alpha, parameters.getA(),
                            parameters.getLda(), parameters.getX(), parameters.getIncx(), beta, parameters.getY(),
                            parameters.getIncy());
        } else {
            DefaultOpExecutioner.validateDataType(DataBuffer.Type.FLOAT, parameters.getA(), parameters.getX(),
                            parameters.getY());
            sgemv(order, parameters.getAOrdering(), parameters.getM(), parameters.getN(), (float) alpha,
                            parameters.getA(), parameters.getLda(), parameters.getX(), parameters.getIncx(),
                            (float) beta, parameters.getY(), parameters.getIncy());
        }

        OpExecutionerUtil.checkForAny(Y);
    }
@Override
    public void gemv(char order, char transA, double alpha, INDArray A, INDArray X, double beta, INDArray Y) {
        if (Nd4j.getExecutioner().getProfilingMode() == OpExecutioner.ProfilingMode.ALL)
            OpProfiler.getInstance().processBlasCall(false, A, X, Y);

        if (A.isSparse() && !X.isSparse()) {
            Nd4j.getSparseBlasWrapper().level2().gemv(order, transA, alpha, A, X, beta, Y);
            return;
        }

        GemvParameters parameters = new GemvParameters(A, X, Y);
        if (A.data().dataType() == DataBuffer.Type.DOUBLE) {
            DefaultOpExecutioner.validateDataType(DataBuffer.Type.DOUBLE, parameters.getA(), parameters.getX(),
                            parameters.getY());
            dgemv(order, parameters.getAOrdering(), parameters.getM(), parameters.getN(), alpha, parameters.getA(),
                            parameters.getLda(), parameters.getX(), parameters.getIncx(), beta, parameters.getY(),
                            parameters.getIncy());
        } else {
            DefaultOpExecutioner.validateDataType(DataBuffer.Type.FLOAT, parameters.getA(), parameters.getX(),
                            parameters.getY());
            sgemv(order, parameters.getAOrdering(), parameters.getM(), parameters.getN(), (float) alpha,
                            parameters.getA(), parameters.getLda(), parameters.getX(), parameters.getIncx(),
                            (float) beta, parameters.getY(), parameters.getIncy());
        }

        OpExecutionerUtil.checkForAny(Y);
    }
@ Override public void gemv ( char order , char transA , double alpha , INDArray A , INDArray X , double beta , INDArray Y ) { if ( Nd4j . getExecutioner ( ) . getProfilingMode ( ) == OpExecutioner . ProfilingMode . ALL ) OpProfiler . getInstance ( ) . processBlasCall ( false , A , X , Y ) ; if ( A . isSparse ( ) && ! X . isSparse ( ) ) { Nd4j . getSparseBlasWrapper ( ) . level2 ( ) . gemv ( order , transA , alpha , A , X , beta , Y ) ; return ; } GemvParameters parameters = new GemvParameters ( A , X , Y ) ; if ( A . data ( ) . dataType ( ) == DataBuffer . Type . DOUBLE ) { DefaultOpExecutioner . validateDataType ( DataBuffer . Type . DOUBLE , parameters . getA ( ) , parameters . getX ( ) , parameters . getY ( ) ) ; dgemv ( order , parameters . getAOrdering ( ) , parameters . getM ( ) , parameters . getN ( ) , alpha , parameters . getA ( ) , parameters . getLda ( ) , parameters . getX ( ) , parameters . getIncx ( ) , beta , parameters . getY ( ) , parameters . getIncy ( ) ) ; } else { DefaultOpExecutioner . validateDataType ( DataBuffer . Type . FLOAT , parameters . getA ( ) , parameters . getX ( ) , parameters . getY ( ) ) ; sgemv ( order , parameters . getAOrdering ( ) , parameters . getM ( ) , parameters . getN ( ) , ( float ) alpha , parameters . getA ( ) , parameters . getLda ( ) , parameters . getX ( ) , parameters . getIncx ( ) , ( float ) beta , parameters . getY ( ) , parameters . getIncy ( ) ) ; } OpExecutionerUtil . checkForAny ( Y ) ; }
gemv computes a matrix-vector product using a general matrix and performs one of the following matrix-vector operations:
y := alpha*a*x + beta*y  for trans = 'N'or'n';
y := alpha*a'*x + beta*y  for trans = 'T'or't';
y := alpha*conjg(a')*x + beta*y  for trans = 'C'or'c'.
Here a is an m-by-n band matrix, x and y are vectors, alpha and beta are scalars.

@param order
@param transA
@param alpha
@param A
@param X
@param beta
@param Y
gemv computes a matrix - vector product using a general matrix and performs one of the following matrix - vector operations : y : = alpha * a * x + beta * y for trans = N or n ; y : = alpha * a * x + beta * y for trans = T or t ; y : = alpha * conjg ( a ) * x + beta * y for trans = C or c . Here a is an m - by - n band matrix x and y are vectors alpha and beta are scalars .