public class LibMatrixMult extends Object
In general all implementations use internally dense outputs for direct access, but change the final result to sparse if necessary. The only exceptions are ultra-sparse matrix mult, wsloss and wsigmoid.
Modifier and Type | Field and Description |
---|---|
static int |
L2_CACHESIZE |
static int |
L3_CACHESIZE |
Modifier and Type | Method and Description |
---|---|
static long |
copyUpperToLowerTriangle(MatrixBlock ret)
Used for all version of TSMM where the result is known to be symmetric.
|
static double |
dotProduct(double[] a,
double[] b,
int[] aix,
int ai,
int bi,
int len) |
static double |
dotProduct(double[] a,
double[] b,
int ai,
int bi,
int len) |
static boolean |
isSkinnyRightHandSide(long m1rlen,
long m1clen,
long m2rlen,
long m2clen,
boolean inclCacheSize) |
static boolean |
isUltraSparseMatrixMult(MatrixBlock m1,
MatrixBlock m2) |
static void |
matrixMult(MatrixBlock m1,
MatrixBlock m2,
MatrixBlock ret)
Performs a matrix multiplication and stores the result in the output matrix.
|
static void |
matrixMult(MatrixBlock m1,
MatrixBlock m2,
MatrixBlock ret,
boolean fixedRet)
This method allows one to disabling exam sparsity.
|
static void |
matrixMult(MatrixBlock m1,
MatrixBlock m2,
MatrixBlock ret,
int k)
Performs a multi-threaded matrix multiplication and stores the result in the output matrix.
|
static void |
matrixMult(MatrixBlock m1,
MatrixBlock m2,
MatrixBlock ret,
int rl,
int ru) |
static void |
matrixMult(MatrixBlock m1,
MatrixBlock m2,
MatrixBlock ret,
int rl,
int ru,
boolean fixedRet) |
static void |
matrixMultChain(MatrixBlock mX,
MatrixBlock mV,
MatrixBlock mW,
MatrixBlock ret,
org.apache.sysml.lops.MapMultChain.ChainType ct)
Performs a matrix multiplication chain operation of type t(X)%*%(X%*%v) or t(X)%*%(w*(X%*%v)).
|
static void |
matrixMultChain(MatrixBlock mX,
MatrixBlock mV,
MatrixBlock mW,
MatrixBlock ret,
org.apache.sysml.lops.MapMultChain.ChainType ct,
int k)
Performs a parallel matrix multiplication chain operation of type t(X)%*%(X%*%v) or t(X)%*%(w*(X%*%v)).
|
static void |
matrixMultDenseDenseMM(DenseBlock a,
DenseBlock b,
DenseBlock c,
int n,
int cd,
int rl,
int ru,
int cl,
int cu) |
static void |
matrixMultPermute(MatrixBlock pm1,
MatrixBlock m2,
MatrixBlock ret1,
MatrixBlock ret2) |
static void |
matrixMultPermute(MatrixBlock pm1,
MatrixBlock m2,
MatrixBlock ret1,
MatrixBlock ret2,
int k) |
static void |
matrixMultTransposeSelf(MatrixBlock m1,
MatrixBlock ret,
boolean leftTranspose) |
static void |
matrixMultTransposeSelf(MatrixBlock m1,
MatrixBlock ret,
boolean leftTranspose,
int k) |
static void |
matrixMultWCeMM(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
double eps,
MatrixBlock ret,
org.apache.sysml.lops.WeightedCrossEntropy.WCeMMType wt) |
static void |
matrixMultWCeMM(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
double eps,
MatrixBlock ret,
org.apache.sysml.lops.WeightedCrossEntropy.WCeMMType wt,
int k) |
static void |
matrixMultWDivMM(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock mX,
MatrixBlock ret,
org.apache.sysml.lops.WeightedDivMM.WDivMMType wt)
NOTE: This operation has limited NaN support, which is acceptable because all our sparse-safe operations
have only limited NaN support.
|
static void |
matrixMultWDivMM(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock mX,
MatrixBlock ret,
org.apache.sysml.lops.WeightedDivMM.WDivMMType wt,
int k)
NOTE: This operation has limited NaN support, which is acceptable because all our sparse-safe operations
have only limited NaN support.
|
static void |
matrixMultWSigmoid(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock ret,
org.apache.sysml.lops.WeightedSigmoid.WSigmoidType wt) |
static void |
matrixMultWSigmoid(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock ret,
org.apache.sysml.lops.WeightedSigmoid.WSigmoidType wt,
int k) |
static void |
matrixMultWSLoss(MatrixBlock mX,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock mW,
MatrixBlock ret,
org.apache.sysml.lops.WeightedSquaredLoss.WeightsType wt) |
static void |
matrixMultWSLoss(MatrixBlock mX,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock mW,
MatrixBlock ret,
org.apache.sysml.lops.WeightedSquaredLoss.WeightsType wt,
int k) |
static void |
matrixMultWuMM(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock ret,
org.apache.sysml.lops.WeightedUnaryMM.WUMMType wt,
org.apache.sysml.runtime.functionobjects.ValueFunction fn) |
static void |
matrixMultWuMM(MatrixBlock mW,
MatrixBlock mU,
MatrixBlock mV,
MatrixBlock ret,
org.apache.sysml.lops.WeightedUnaryMM.WUMMType wt,
org.apache.sysml.runtime.functionobjects.ValueFunction fn,
int k) |
static MatrixBlock |
prepMatrixMultTransposeSelfInput(MatrixBlock m1,
boolean leftTranspose,
boolean par) |
static boolean |
satisfiesMultiThreadingConstraints(MatrixBlock m1,
boolean checkMem,
boolean checkFLOPs,
long FPfactor,
int k) |
static boolean |
satisfiesMultiThreadingConstraints(MatrixBlock m1,
int k) |
static boolean |
satisfiesMultiThreadingConstraints(MatrixBlock m1,
MatrixBlock m2,
boolean checkMem,
boolean checkFLOPs,
long FPfactor,
int k) |
static void |
vectAdd(double[] a,
double[] c,
int[] aix,
int ai,
int ci,
int alen) |
static void |
vectAdd(double[] a,
double[] c,
int ai,
int ci,
int len) |
static void |
vectAdd(double[] a,
double bval,
double[] c,
int ai,
int ci,
int len) |
static void |
vectAddInPlace(double aval,
double[] c,
int ci,
int len) |
static void |
vectMultiplyAdd(double aval,
double[] b,
double[] c,
int[] bix,
int bi,
int ci,
int len) |
static void |
vectMultiplyAdd(double aval,
double[] b,
double[] c,
int bi,
int ci,
int len) |
static void |
vectMultiplyInPlace(double aval,
double[] c,
int ci,
int len) |
static void |
vectMultiplyWrite(double[] a,
double[] b,
double[] c,
int[] bix,
int ai,
int bi,
int ci,
int len) |
static void |
vectMultiplyWrite(double[] a,
double[] b,
double[] c,
int ai,
int bi,
int ci,
int len) |
static void |
vectMultiplyWrite(double aval,
double[] b,
double[] c,
int bi,
int ci,
int len) |
public static final int L2_CACHESIZE
public static final int L3_CACHESIZE
public static void matrixMult(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret)
m1
- first matrixm2
- second matrixret
- result matrixpublic static void matrixMult(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret, boolean fixedRet)
m1
- first matrixm2
- second matrixret
- result matrixfixedRet
- if true, output representation is fixed and nnzs not recomputedpublic static void matrixMult(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret, int rl, int ru)
public static void matrixMult(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret, int rl, int ru, boolean fixedRet)
public static void matrixMult(MatrixBlock m1, MatrixBlock m2, MatrixBlock ret, int k)
m1
- first matrixm2
- second matrixret
- result matrixk
- maximum parallelismpublic static void matrixMultChain(MatrixBlock mX, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, org.apache.sysml.lops.MapMultChain.ChainType ct)
mX
- X matrixmV
- v matrixmW
- w matrixret
- result matrixct
- chain typepublic static void matrixMultChain(MatrixBlock mX, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, org.apache.sysml.lops.MapMultChain.ChainType ct, int k)
mX
- X matrixmV
- v matrixmW
- w matrixret
- result matrixct
- chain typek
- maximum parallelismpublic static void matrixMultTransposeSelf(MatrixBlock m1, MatrixBlock ret, boolean leftTranspose)
public static void matrixMultTransposeSelf(MatrixBlock m1, MatrixBlock ret, boolean leftTranspose, int k)
public static void matrixMultPermute(MatrixBlock pm1, MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2)
public static void matrixMultPermute(MatrixBlock pm1, MatrixBlock m2, MatrixBlock ret1, MatrixBlock ret2, int k)
public static void matrixMultWSLoss(MatrixBlock mX, MatrixBlock mU, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, org.apache.sysml.lops.WeightedSquaredLoss.WeightsType wt)
public static void matrixMultWSLoss(MatrixBlock mX, MatrixBlock mU, MatrixBlock mV, MatrixBlock mW, MatrixBlock ret, org.apache.sysml.lops.WeightedSquaredLoss.WeightsType wt, int k)
public static void matrixMultWSigmoid(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock ret, org.apache.sysml.lops.WeightedSigmoid.WSigmoidType wt)
public static void matrixMultWSigmoid(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock ret, org.apache.sysml.lops.WeightedSigmoid.WSigmoidType wt, int k)
public static void matrixMultWDivMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock mX, MatrixBlock ret, org.apache.sysml.lops.WeightedDivMM.WDivMMType wt)
mW
- matrix WmU
- matrix UmV
- matrix VmX
- matrix Xret
- result typewt
- weighted divide matrix multiplication typepublic static void matrixMultWDivMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock mX, MatrixBlock ret, org.apache.sysml.lops.WeightedDivMM.WDivMMType wt, int k)
mW
- matrix WmU
- matrix UmV
- matrix VmX
- matrix Xret
- result matrixwt
- weighted divide matrix multiplication typek
- maximum parallelismpublic static void matrixMultWCeMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, double eps, MatrixBlock ret, org.apache.sysml.lops.WeightedCrossEntropy.WCeMMType wt)
public static void matrixMultWCeMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, double eps, MatrixBlock ret, org.apache.sysml.lops.WeightedCrossEntropy.WCeMMType wt, int k)
public static void matrixMultWuMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock ret, org.apache.sysml.lops.WeightedUnaryMM.WUMMType wt, org.apache.sysml.runtime.functionobjects.ValueFunction fn)
public static void matrixMultWuMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock ret, org.apache.sysml.lops.WeightedUnaryMM.WUMMType wt, org.apache.sysml.runtime.functionobjects.ValueFunction fn, int k)
public static void matrixMultDenseDenseMM(DenseBlock a, DenseBlock b, DenseBlock c, int n, int cd, int rl, int ru, int cl, int cu)
public static double dotProduct(double[] a, double[] b, int ai, int bi, int len)
public static double dotProduct(double[] a, double[] b, int[] aix, int ai, int bi, int len)
public static void vectMultiplyAdd(double aval, double[] b, double[] c, int bi, int ci, int len)
public static void vectMultiplyAdd(double aval, double[] b, double[] c, int[] bix, int bi, int ci, int len)
public static void vectMultiplyWrite(double aval, double[] b, double[] c, int bi, int ci, int len)
public static void vectMultiplyInPlace(double aval, double[] c, int ci, int len)
public static void vectMultiplyWrite(double[] a, double[] b, double[] c, int ai, int bi, int ci, int len)
public static void vectMultiplyWrite(double[] a, double[] b, double[] c, int[] bix, int ai, int bi, int ci, int len)
public static void vectAdd(double[] a, double bval, double[] c, int ai, int ci, int len)
public static void vectAdd(double[] a, double[] c, int ai, int ci, int len)
public static void vectAdd(double[] a, double[] c, int[] aix, int ai, int ci, int alen)
public static void vectAddInPlace(double aval, double[] c, int ci, int len)
public static long copyUpperToLowerTriangle(MatrixBlock ret)
ret
- matrixpublic static MatrixBlock prepMatrixMultTransposeSelfInput(MatrixBlock m1, boolean leftTranspose, boolean par)
public static boolean isSkinnyRightHandSide(long m1rlen, long m1clen, long m2rlen, long m2clen, boolean inclCacheSize)
public static boolean satisfiesMultiThreadingConstraints(MatrixBlock m1, int k)
public static boolean satisfiesMultiThreadingConstraints(MatrixBlock m1, boolean checkMem, boolean checkFLOPs, long FPfactor, int k)
public static boolean satisfiesMultiThreadingConstraints(MatrixBlock m1, MatrixBlock m2, boolean checkMem, boolean checkFLOPs, long FPfactor, int k)
public static boolean isUltraSparseMatrixMult(MatrixBlock m1, MatrixBlock m2)
Copyright © 2018 The Apache Software Foundation. All rights reserved.