groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sterg <st...@teiemt.gr>
Subject in GroovyLab operation multiply on Matrix does not seem to use OpenBLAS
Date Tue, 19 Dec 2017 12:54:24 GMT
Hi all,


I implemented fast matrix multiplication in GroovyLab using OpenBLAS as:



final public Matrix multiply( double[][] that)  {


    double [] flmThis = Mat.oneDTransposeDoubleArray(d);   // construct 
a FloatMatrix for the receiver
    double [] flmThat = Mat.oneDTransposeDoubleArray(that);  // 
construct a FloatMatrix for the argument
    int Arows = Nrows(); int Acolumns = Ncols();
    int Ccolumns = that[0].length;
    double [] result = new double[Arows*Ccolumns];
    double alpha=1.0;
    double beta=0.0;
    int lda = Arows;
    int ldb = Acolumns;
    int ldc = Arows;
       // perform the multiplication using openblas
     cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, Arows, 
Ccolumns,  Acolumns, alpha, flmThis, lda, flmThat, ldb, beta,
          result, ldc);

     double [][] rd = new double[Arows][Ccolumns];
     int cnt = 0;
     int r = 0;
     int c = 0;
     while (c < Ccolumns) {
       r=0;
      while (r < Arows ) {
         rd[r][c] = result[cnt];
         cnt++;
         r++;
       }
       c++;
     }
     return new Matrix(rd);
}


public Matrix multiply( Matrix that)  {

     return multiply(that.d);
}


however, calling it on Matrix objects is slow:


n=2000

x=rand(n,n)

tic()
xx=x*x   // Matrix * Matrix, slow however the method that calls OpenBLAS 
is called
tm=toc()   // delays a lot!!


but however on double[][] * Matrix is very fast:



n=2000

x=rand(n,n)

tic()
xx=x.d * x   // double[][] * Matrix, is very fast !!
tm=toc()    // very fast, uses OpenBLAS



What can happen here?



Best Regards

Stergios



Mime
View raw message