@Override public void swap(IComplexNDArray x, IComplexNDArray y) { if (x.data().dataType() == DataBuffer.Type.DOUBLE) zswap(x.length(), x, BlasBufferUtil.getBlasStride(x), y, BlasBufferUtil.getBlasStride(y)); else cswap(x.length(), x, BlasBufferUtil.getBlasStride(x), y, BlasBufferUtil.getBlasStride(y)); }
@Override public IComplexNDArray gemm(IComplexNumber alpha, IComplexNDArray a, IComplexNDArray b, IComplexNumber beta, IComplexNDArray c) { LinAlgExceptions.assertMatrix(a, b, c); level3().gemm(BlasBufferUtil.getCharForTranspose(a), BlasBufferUtil.getCharForTranspose(b), BlasBufferUtil.getCharForTranspose(c), alpha, a, b, beta, c); return c; }
@Override protected void sswap(int N, INDArray X, int incX, INDArray Y, int incY) { float[] yData = getFloatData(Y); float[] xData = getFloatData(X); BLAS.getInstance().sswap(N, xData, getBlasOffset(X), incX, yData, getBlasOffset(Y), incY); setData(xData,X); setData(yData,Y); }
@Override protected double dzasum(int N, IComplexNDArray X, int incX) { X = (IComplexNDArray) Shape.toOffsetZero(X); return NativeBlas.dzasum(N, getDoubleData(X), getBlasOffset(X), incX); }
public double[] getDoubleData(DataBuffer buf) { return BlasBufferUtil.getDoubleData(buf); }
public float[] getFloatData(DataBuffer buf) { return BlasBufferUtil.getFloatData(buf); }
@Override protected void zswap(int N, IComplexNDArray X, int incX, IComplexNDArray Y, int incY) { double[] yData = getDoubleData(Y); NativeBlas.zswap(N,getDoubleData(X),getBlasOffset(X),incX,yData,getBlasOffset(Y),incY); setData(yData, Y); }
@Override protected int izamax(int N, IComplexNDArray X, int incX) { X = (IComplexNDArray) Shape.toOffsetZero(X); return NativeBlas.izamax(N, getDoubleData(X), getBlasOffset(X), incX); }
public double[] getDoubleData(INDArray buf) { return BlasBufferUtil.getDoubleData(buf); }
public float[] getFloatData(INDArray buf) { return BlasBufferUtil.getFloatData(buf); }
@Override protected void zcopy(int N, IComplexNDArray X, int incX, IComplexNDArray Y, int incY) { double[] yData = getDoubleData(Y); NativeBlas.zcopy(N,getDoubleData(X),getBlasOffset(X),incX,yData,getBlasOffset(Y),incY); setData(yData,Y); }
/** * copy a vector to another vector. * * @param x * @param y */ @Override public void copy(IComplexNDArray x, IComplexNDArray y) { if (x.data().dataType() == DataBuffer.Type.DOUBLE) zcopy(x.length(), x, BlasBufferUtil.getBlasStride(x), y, BlasBufferUtil.getBlasStride(y)); else ccopy(x.length(), x, BlasBufferUtil.getBlasStride(x), y, BlasBufferUtil.getBlasStride(y)); }
@Override public INDArray ger(Number alpha, INDArray x, INDArray y, INDArray a) { level2().ger(BlasBufferUtil.getCharForTranspose(x), alpha.doubleValue(), x, y, a); return a; }
@Override protected double dznrm2(int N, IComplexNDArray X, int incX) { X = (IComplexNDArray) Shape.toOffsetZero(X); return NativeBlas.dznrm2(N,getDoubleData(X),getBlasOffset(X),incX); }
@Override protected void sgbmv(char order, char TransA, int M, int N, int KL, int KU, float alpha, INDArray A, int lda, INDArray X, int incX, float beta, INDArray Y, int incY) { float[] yData = getFloatData(Y); BLAS.getInstance().sgbmv(String.valueOf(TransA),M,N,KL,KU,alpha,getFloatData(A),getBlasOffset(A),lda,getFloatData(X),getBlasOffset(X),incX,beta,yData,getBlasOffset(Y),incY); setData(yData,Y); }
/** * computes a vector-scalar product and adds the result to a vector. * * @param n * @param alpha * @param x * @param y */ @Override public void axpy(long n, IComplexNumber alpha, IComplexNDArray x, IComplexNDArray y) { if (x.data().dataType() == DataBuffer.Type.DOUBLE) zaxpy(n, alpha.asDouble(), x, BlasBufferUtil.getBlasStride(x), y, BlasBufferUtil.getBlasStride(y)); else caxpy(n, alpha.asFloat(), x, BlasBufferUtil.getBlasStride(x), y, BlasBufferUtil.getBlasStride(y)); }
@Override public INDArray gemv(Number alpha, INDArray a, INDArray x, double beta, INDArray y) { LinAlgExceptions.assertVector(x, y); LinAlgExceptions.assertMatrix(a); level2().gemv(BlasBufferUtil.getCharForTranspose(a), BlasBufferUtil.getCharForTranspose(x), alpha.doubleValue(), a, x, beta, y); return y; }
@Override protected void ssyr2(char order, char Uplo, int N, float alpha, INDArray X, int incX, INDArray Y, int incY, INDArray A, int lda) { float[] aData = getFloatData(A); BLAS.getInstance().ssyr2(String.valueOf(Uplo),N,alpha,getFloatData(X),getBlasOffset(X),incY,getFloatData(Y),getBlasOffset(Y),incY,aData,getBlasOffset(A),lda); setData(aData,A); }
private String shapeInfo(INDArray arr) { return Arrays.toString(arr.shape()) + " and stride " + Arrays.toString(arr.stride()) + " and offset " + arr.offset() + " and blas stride of " + BlasBufferUtil.getBlasStride(arr); }
@Override public INDArray gemm(float alpha, INDArray a, INDArray b, float beta, INDArray c) { LinAlgExceptions.assertMatrix(a, b, c); if (a.data().dataType() == DataBuffer.Type.DOUBLE) { return gemm((double) alpha, a, b, (double) beta, c); } level3().gemm(BlasBufferUtil.getCharForTranspose(a), BlasBufferUtil.getCharForTranspose(b), BlasBufferUtil.getCharForTranspose(c), alpha, a, b, beta, c); return c; }