public class SmpBlas extends Object implements Blas
dgemm (matrix-matrix multiplication)dgemv (matrix-vector multiplication)assign(A,function) (generalized matrix scaling/transform): Strong speedup only for expensive functions like logarithm, sin, etc.assign(A,B,function) (generalized matrix scaling/transform): Strong speedup only for expensive functions like pow etc.allocateBlas(int, cern.colt.matrix.linalg.Blas) at the very beginning of your program, supplying the main parameter for SmpBlas, the number of available CPUs.
The method sets the public global variable SmpBlas.smpBlas to a blas using a maximum of CPUs threads, each concurrently processing matrix blocks with the given sequential blas algorithms.
Normally there is no need to call allocateBlas more than once.
Then use SmpBlas.smpBlas.someRoutine(...) to run someRoutine in parallel.
E.g.
int cpu_s = 4; SmpBlas.allocateBlas(cpu_s, SeqBlas.seqBlas); ... SmpBlas.smpBlas.dgemm(...) SmpBlas.smpBlas.dgemv(...) |
EDU.oswego.cs.dl.util.concurrent) built upon Java threads, and geared for parallel computation.EDU.oswego.cs.dl.util.concurrent.RecursiveActionRunnerGroup,
EDU.oswego.cs.dl.util.concurrent.RecursiveAction| Modifier and Type | Field and Description |
|---|---|
protected int |
maxThreads |
protected static int |
NN_THRESHOLD |
protected Blas |
seqBlas |
protected cern.colt.matrix.linalg.Smp |
smp |
static Blas |
smpBlas
The public global parallel blas; initialized via
allocateBlas(int, cern.colt.matrix.linalg.Blas). |
| Modifier | Constructor and Description |
|---|---|
protected |
SmpBlas(int maxThreads,
Blas seqBlas)
Constructs a blas using a maximum of maxThreads threads; each executing the given sequential algos.
|
| Modifier and Type | Method and Description |
|---|---|
static void |
allocateBlas(int maxThreads,
Blas seqBlas)
Sets the public global variable SmpBlas.smpBlas to a blas using a maximum of maxThreads threads, each executing the given sequential algorithm; maxThreads is normally the number of CPUs.
|
void |
assign(DoubleMatrix2D A,
DoubleFunction function)
Assigns the result of a function to each cell; x[row,col] = function(x[row,col]).
|
void |
assign(DoubleMatrix2D A,
DoubleMatrix2D B,
DoubleDoubleFunction function)
Assigns the result of a function to each cell; x[row,col] = function(x[row,col],y[row,col]).
|
double |
dasum(DoubleMatrix1D x)
Returns the sum of absolute values; |x[0]| + |x[1]| + ...
|
void |
daxpy(double alpha,
DoubleMatrix1D x,
DoubleMatrix1D y)
Combined vector scaling; y = y + alpha*x.
|
void |
daxpy(double alpha,
DoubleMatrix2D A,
DoubleMatrix2D B)
Combined matrix scaling; B = B + alpha*A.
|
void |
dcopy(DoubleMatrix1D x,
DoubleMatrix1D y)
Vector assignment (copying); y = x.
|
void |
dcopy(DoubleMatrix2D A,
DoubleMatrix2D B)
Matrix assignment (copying); B = A.
|
double |
ddot(DoubleMatrix1D x,
DoubleMatrix1D y)
Returns the dot product of two vectors x and y, which is Sum(x[i]*y[i]).
|
void |
dgemm(boolean transposeA,
boolean transposeB,
double alpha,
DoubleMatrix2D A,
DoubleMatrix2D B,
double beta,
DoubleMatrix2D C)
Generalized linear algebraic matrix-matrix multiply; C = alpha*A*B + beta*C.
|
void |
dgemv(boolean transposeA,
double alpha,
DoubleMatrix2D A,
DoubleMatrix1D x,
double beta,
DoubleMatrix1D y)
Generalized linear algebraic matrix-vector multiply; y = alpha*A*x + beta*y.
|
void |
dger(double alpha,
DoubleMatrix1D x,
DoubleMatrix1D y,
DoubleMatrix2D A)
Performs a rank 1 update; A = A + alpha*x*y'.
|
double |
dnrm2(DoubleMatrix1D x)
Return the 2-norm; sqrt(x[0]^2 + x[1]^2 + ...).
|
void |
drot(DoubleMatrix1D x,
DoubleMatrix1D y,
double c,
double s)
Applies a givens plane rotation to (x,y); x = c*x + s*y; y = c*y - s*x.
|
void |
drotg(double a,
double b,
double[] rotvec)
Constructs a Givens plane rotation for (a,b).
|
void |
dscal(double alpha,
DoubleMatrix1D x)
Vector scaling; x = alpha*x.
|
void |
dscal(double alpha,
DoubleMatrix2D A)
Matrix scaling; A = alpha*A.
|
void |
dswap(DoubleMatrix1D x,
DoubleMatrix1D y)
Swaps the elements of two vectors; y <==> x.
|
void |
dswap(DoubleMatrix2D A,
DoubleMatrix2D B)
Swaps the elements of two matrices; B <==> A.
|
void |
dsymv(boolean isUpperTriangular,
double alpha,
DoubleMatrix2D A,
DoubleMatrix1D x,
double beta,
DoubleMatrix1D y)
Symmetric matrix-vector multiplication; y = alpha*A*x + beta*y.
|
void |
dtrmv(boolean isUpperTriangular,
boolean transposeA,
boolean isUnitTriangular,
DoubleMatrix2D A,
DoubleMatrix1D x)
Triangular matrix-vector multiplication; x = A*x or x = A'*x.
|
int |
idamax(DoubleMatrix1D x)
Returns the index of largest absolute value; i such that |x[i]| == max(|x[0]|,|x[1]|,...)..
|
protected double[] |
run(DoubleMatrix2D A,
boolean collectResults,
Matrix2DMatrix2DFunction fun) |
protected double[] |
run(DoubleMatrix2D A,
DoubleMatrix2D B,
boolean collectResults,
Matrix2DMatrix2DFunction fun) |
public static Blas smpBlas
allocateBlas(int, cern.colt.matrix.linalg.Blas).
Do not modify this variable via other means (it is public).protected Blas seqBlas
protected cern.colt.matrix.linalg.Smp smp
protected int maxThreads
protected static int NN_THRESHOLD
protected SmpBlas(int maxThreads,
Blas seqBlas)
public static void allocateBlas(int maxThreads,
Blas seqBlas)
maxThreads - the maximum number of threads (= CPUs) to be usedseqBlas - the sequential blas algorithms to be used on concurrently processed matrix blocks.public void assign(DoubleMatrix2D A, DoubleFunction function)
Blaspublic void assign(DoubleMatrix2D A, DoubleMatrix2D B, DoubleDoubleFunction function)
Blaspublic double dasum(DoubleMatrix1D x)
Blaspublic void daxpy(double alpha,
DoubleMatrix1D x,
DoubleMatrix1D y)
Blaspublic void daxpy(double alpha,
DoubleMatrix2D A,
DoubleMatrix2D B)
Blaspublic void dcopy(DoubleMatrix1D x, DoubleMatrix1D y)
Blaspublic void dcopy(DoubleMatrix2D A, DoubleMatrix2D B)
Blaspublic double ddot(DoubleMatrix1D x, DoubleMatrix1D y)
Blaspublic void dgemm(boolean transposeA,
boolean transposeB,
double alpha,
DoubleMatrix2D A,
DoubleMatrix2D B,
double beta,
DoubleMatrix2D C)
Blasdgemm in interface BlastransposeA - set this flag to indicate that the multiplication shall be performed on A'.transposeB - set this flag to indicate that the multiplication shall be performed on B'.alpha - a scale factor.A - the first source matrix.B - the second source matrix.beta - a scale factor.C - the third source matrix, this is also the matrix where results are stored.public void dgemv(boolean transposeA,
double alpha,
DoubleMatrix2D A,
DoubleMatrix1D x,
double beta,
DoubleMatrix1D y)
Blasdgemv in interface BlastransposeA - set this flag to indicate that the multiplication shall be performed on A'.alpha - a scale factor.A - the source matrix.x - the first source vector.beta - a scale factor.y - the second source vector, this is also the vector where results are stored.public void dger(double alpha,
DoubleMatrix1D x,
DoubleMatrix1D y,
DoubleMatrix2D A)
Blas
A = { {6,5}, {7,6} }, x = {1,2}, y = {3,4}, alpha = 1 -->
A = { {9,9}, {13,14} }
public double dnrm2(DoubleMatrix1D x)
Blaspublic void drot(DoubleMatrix1D x, DoubleMatrix1D y, double c, double s)
Blaspublic void drotg(double a,
double b,
double[] rotvec)
Blaspublic void dscal(double alpha,
DoubleMatrix1D x)
Blaspublic void dscal(double alpha,
DoubleMatrix2D A)
Blaspublic void dswap(DoubleMatrix1D x, DoubleMatrix1D y)
Blaspublic void dswap(DoubleMatrix2D A, DoubleMatrix2D B)
Blaspublic void dsymv(boolean isUpperTriangular,
double alpha,
DoubleMatrix2D A,
DoubleMatrix1D x,
double beta,
DoubleMatrix1D y)
Blaspublic void dtrmv(boolean isUpperTriangular,
boolean transposeA,
boolean isUnitTriangular,
DoubleMatrix2D A,
DoubleMatrix1D x)
Blasdtrmv in interface BlasisUpperTriangular - is A upper triangular or lower triangular?transposeA - set this flag to indicate that the multiplication shall be performed on A'.isUnitTriangular - true --> A is assumed to be unit triangular; false --> A is not assumed to be unit triangularA - the source matrix.x - the vector holding source and destination.public int idamax(DoubleMatrix1D x)
Blasprotected double[] run(DoubleMatrix2D A, DoubleMatrix2D B, boolean collectResults, Matrix2DMatrix2DFunction fun)
protected double[] run(DoubleMatrix2D A, boolean collectResults, Matrix2DMatrix2DFunction fun)
Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.