# Class IntAparapiMatrixStrategy

java.lang.Object
org.apfloat.aparapi.IntAparapiMatrixStrategy

All Implemented Interfaces:
  `MatrixStrategy`

public class IntAparapiMatrixStrategy extends Object implements MatrixStrategy
Matrix transposition in the GPU for the `int` type.

Since:
  1.8.3
Version:
  1.8.3
Author:
  Mikko Tommila

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IntAparapiMatrixStrategy()`
  Default constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `permuteToDoubleWidth(ArrayAccess arrayAccess, int n1, int n2)`
  Permute the rows of the n1 x n2 matrix so that it is shaped like a n1/2 x 2*n2 matrix.
  `void`
  `permuteToHalfWidth(ArrayAccess arrayAccess, int n1, int n2)`
  Permute the rows of the n1 x n2 matrix so that it is shaped like a 2*n1 x n2/2 matrix.
  `void`
  `transpose(ArrayAccess arrayAccess, int n1, int n2)`
  Transpose a n1 x n2 matrix.
  `void`
  `transposeSquare(ArrayAccess arrayAccess, int n1, int n2)`
  Transpose a square n1 x n1 block of n1 x n2 matrix.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### IntAparapiMatrixStrategy

    public IntAparapiMatrixStrategy()
    Default constructor.

- ## Method Details

  - ### transpose

    public void transpose(ArrayAccess arrayAccess, int n1, int n2) throws ApfloatRuntimeException
    Description copied from interface: `MatrixStrategy`
    Transpose a n1 x n2 matrix.

    Both n1 and n2 must be powers of two. Additionally, one of these must be true:

    n1 = n2
    n1 = 2*n2
    n2 = 2*n1

    Specified by:
      `transpose` in interface `MatrixStrategy`
    Parameters:
      `arrayAccess` - Accessor to the matrix data. This data will be transposed.
      `n1` - Number of rows in the matrix.
      `n2` - Number of columns in the matrix.
    Throws:
      `ApfloatRuntimeException`

  - ### transposeSquare

    public void transposeSquare(ArrayAccess arrayAccess, int n1, int n2) throws ApfloatRuntimeException
    Description copied from interface: `MatrixStrategy`
    Transpose a square n1 x n1 block of n1 x n2 matrix.

    Both n1 and n2 must be powers of two, and n1 <= n2.

    Specified by:
      `transposeSquare` in interface `MatrixStrategy`
    Parameters:
      `arrayAccess` - Accessor to the matrix data. This data will be transposed.
      `n1` - Number of rows and columns in the block to be transposed.
      `n2` - Number of columns in the matrix.
    Throws:
      `ApfloatRuntimeException`

  - ### permuteToHalfWidth

    public void permuteToHalfWidth(ArrayAccess arrayAccess, int n1, int n2) throws ApfloatRuntimeException
    Description copied from interface: `MatrixStrategy`
    Permute the rows of the n1 x n2 matrix so that it is shaped like a 2*n1 x n2/2 matrix. Logically, the matrix is split in half, and the right half is moved below the left half.

    Both n1 and n2 must be powers of two. E.g. if the matrix layout is originally as follows:

    Matrix before
    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
    8 | 9 | 10 | 11 | 12 | 13 | 14 | 15

    Then after this method it is as follows:

    Matrix after
    0 | 1 | 2 | 3
    8 | 9 | 10 | 11
    4 | 5 | 6 | 7
    12 | 13 | 14 | 15

    Specified by:
      `permuteToHalfWidth` in interface `MatrixStrategy`
    Parameters:
      `arrayAccess` - Accessor to the matrix data. This data will be permuted.
      `n1` - Number of rows in the matrix.
      `n2` - Number of columns in the matrix.
    Throws:
      `ApfloatRuntimeException`

  - ### permuteToDoubleWidth

    public void permuteToDoubleWidth(ArrayAccess arrayAccess, int n1, int n2) throws ApfloatRuntimeException
    Description copied from interface: `MatrixStrategy`
    Permute the rows of the n1 x n2 matrix so that it is shaped like a n1/2 x 2*n2 matrix. Logically, the matrix is split in half, and the lower half is moved to the right side of the upper half.

    Both n1 and n2 must be powers of two, and n1 >= 2.

    E.g. if the matrix layout is originally as follows:

    Matrix before
    0 | 1 | 2 | 3
    4 | 5 | 6 | 7
    8 | 9 | 10 | 11
    12 | 13 | 14 | 15

    Then after this method it is as follows:

    Matrix after
    0 | 1 | 2 | 3 | 8 | 9 | 10 | 11
    4 | 5 | 6 | 7 | 12 | 13 | 14 | 15

    Specified by:
      `permuteToDoubleWidth` in interface `MatrixStrategy`
    Parameters:
      `arrayAccess` - Accessor to the matrix data. This data will be permuted.
      `n1` - Number of rows in the matrix.
      `n2` - Number of columns in the matrix.
    Throws:
      `ApfloatRuntimeException`