Package org.ujmp.core.doublematrix.impl
Class BlockMultiply
- java.lang.Object
-
- org.ujmp.core.doublematrix.impl.BlockMultiply
-
- All Implemented Interfaces:
java.util.concurrent.Callable<java.lang.Void>
public class BlockMultiply extends java.lang.Object implements java.util.concurrent.Callable<java.lang.Void>
Multiply blocks of A and B in the specified range(fromM->toM, fromN->toN, fromK->toK),
and add to matrix C.C(fromM->toM, fromK->toK) +=
      A(fromM->toM, fromN->toN) x B(fromN->toN, fromK->toK)All blocks must be square blocks of the same size, with length of one side =
blockStripeSize
-
-
Field Summary
Fields Modifier and Type Field Description private int
blockStripeSize
Length of one side of a block of data.private int
fromK
range of data in matrix to be processed by this instance.private int
fromM
range of data in matrix to be processed by this instance.private int
fromN
range of data in matrix to be processed by this instance.private BlockDenseDoubleMatrix2D
matrixA
Source matrices to be processed.private BlockDenseDoubleMatrix2D
matrixB
Source matrices to be processed.private BlockDenseDoubleMatrix2D
matrixC
Source matrices to be processed.private int
toK
range of data in matrix to be processed by this instance.private int
toM
range of data in matrix to be processed by this instance.private int
toN
range of data in matrix to be processed by this instance.
-
Constructor Summary
Constructors Constructor Description BlockMultiply(BlockDenseDoubleMatrix2D a, BlockDenseDoubleMatrix2D b, BlockDenseDoubleMatrix2D c, int fromM, int toM, int fromN, int toN, int fromK, int toK)
Constructor taking the two matrices being multiplied, the target matrix C and the range of rows and columns to multiply.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Void
call()
protected void
multiply()
Multiply blocks of two matrices A,B and add to C.private static void
multiplyAxB(double[] aBlock, double[] bBlock, double[] cBlock, int step)
Multiply row-major block (a) x column-major block (b), and add to block c.void
multiplyRowMajorTimesColumnMajorBlocks(double[] aBlock, double[] bBlock, double[] cBlock, int aRows, int bRows, int bCols)
private static void
verifyInput(BlockDenseDoubleMatrix2D a, BlockDenseDoubleMatrix2D b, BlockDenseDoubleMatrix2D c, int fromM, int toM, int fromN, int toN, int fromK, int toK)
-
-
-
Field Detail
-
blockStripeSize
private final int blockStripeSize
Length of one side of a block of data.
-
fromM
private final int fromM
range of data in matrix to be processed by this instance.
-
toM
private final int toM
range of data in matrix to be processed by this instance.
-
fromN
private final int fromN
range of data in matrix to be processed by this instance.
-
toN
private final int toN
range of data in matrix to be processed by this instance.
-
fromK
private final int fromK
range of data in matrix to be processed by this instance.
-
toK
private final int toK
range of data in matrix to be processed by this instance.
-
matrixA
private final BlockDenseDoubleMatrix2D matrixA
Source matrices to be processed.
-
matrixB
private final BlockDenseDoubleMatrix2D matrixB
Source matrices to be processed.
-
matrixC
private final BlockDenseDoubleMatrix2D matrixC
Source matrices to be processed.
-
-
Constructor Detail
-
BlockMultiply
public BlockMultiply(BlockDenseDoubleMatrix2D a, BlockDenseDoubleMatrix2D b, BlockDenseDoubleMatrix2D c, int fromM, int toM, int fromN, int toN, int fromK, int toK)
Constructor taking the two matrices being multiplied, the target matrix C and the range of rows and columns to multiply.- Parameters:
a
- - matrix A, size (M, N)b
- - matrix B, size (N, K)c
- - result matrix C, size (M, K)fromM
- - start row M in matrix AtoM
- - end row M in AfromN
- - start column N in A (or start row N in B)toN
- - end row NfromK
- - start column K in BtoK
- - end column K in B
-
-
Method Detail
-
call
public java.lang.Void call()
- Specified by:
call
in interfacejava.util.concurrent.Callable<java.lang.Void>
-
multiply
protected final void multiply()
Multiply blocks of two matrices A,B and add to C.Blocks of Matrix B are transformed to column-major layout (if not already) to facilitate multiplication.
(If matrices have been created optimally, B should already be column-major)
-
multiplyAxB
private static void multiplyAxB(double[] aBlock, double[] bBlock, double[] cBlock, int step)
Multiply row-major block (a) x column-major block (b), and add to block c.
-
multiplyRowMajorTimesColumnMajorBlocks
public void multiplyRowMajorTimesColumnMajorBlocks(double[] aBlock, double[] bBlock, double[] cBlock, int aRows, int bRows, int bCols)
-
verifyInput
private static void verifyInput(BlockDenseDoubleMatrix2D a, BlockDenseDoubleMatrix2D b, BlockDenseDoubleMatrix2D c, int fromM, int toM, int fromN, int toN, int fromK, int toK)
-
-