Class BlockMultiply

java.lang.Object
org.ujmp.core.doublematrix.impl.BlockMultiply
All Implemented Interfaces:
Callable<Void>

public class BlockMultiply extends Object implements Callable<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) +=
&nbsp&nbsp &nbsp&nbsp  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 Details

    • 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 Details

    • 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 A
      toM - - end row M in A
      fromN - - start column N in A (or start row N in B)
      toN - - end row N
      fromK - - start column K in B
      toK - - end column K in B
  • Method Details

    • call

      public Void call()
      Specified by:
      call in interface Callable<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.
      Parameters:
      a - - block from matrixA
      b - - block from matrixB
      c - - block from result matrix matrixC
    • 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)