package lacaml

  1. Overview
  2. Docs
type patt = [
  1. | `Full
  2. | `Utr
  3. | `Ltr
  4. | `Upent of int
  5. | `Lpent of int
]

Pattern of a matrix operation

Documentation of matrix patterns:

x = accessed ? = not accessed

`Full for an (m, n) = (3, 4) full matrix operation:

x x x x x x x x x x x x

`Utr for an (m, n) = (3, 4) upper trapezoidal matrix operation:

x x x x ? x x x ? ? x x

`Utr for an (m, n) = (4, 3) upper trapezoidal matrix operation (the accessed part is actually only upper triangular due to dimension constraints):

x x x ? x x ? ? x ? ? ?

`Utr for an (m, n) = (3, 3) upper triangular matrix operation:

x x x ? x x ? ? x

`Ltr for an (m, n) = (4, 3) lower trapezoidal matrix operation:

x ? ? x x ? x x x x x x

`Ltr for an (m, n) = (3, 4) lower trapezoidal matrix operation (the accessed part is actually only lower triangular due to dimension constraints):

x ? ? ? x x ? ? x x x ?

`Ltr for an (m, n) = (3, 3) lower triangular matrix operation:

x x x ? x x ? ? x

`Upent 2 for an (m, n) = (4, 3) upper pentagonal matrix operation. The pattern argument describes the number of topmost full rows:

x x x x x x ? x x ? ? x

`Lpent 2 for an (m, n) = (3, 4) lower pentagonal matrix operation. The pattern argument describes the number of leftmost full columns:

x x ? ? x x x ? x x x x

The transpose of a `Upent l operation is an `Lpent l operation if m and n are also flipped.

Note that the following holds:

* `Utr = `Upent 1 * `Ltr = `Lpent 1

Whether an operation operates on a triangular or trapezoidal part of a matrix is inferred from size parameters m and n, which are passed separately.

Pentagonal matrix patterns have the advantage of being fractal: it is always possible to cut a pentagonal pattern along an arbitrary row or column and obtain two sub-problems that can also be described by a pentagonal pattern. This makes pentagonal patterns suitable for parallelizing many operations, e.g. on triagonal matrices, by cutting them into smaller problems using pentagonal patterns. Neither triagonal nor trapezoidal patterns are fractal. Rectangular patterns are fractal, but too limited in expressiveness.

type 'mat unop = ?patt:patt -> ?m:int -> ?n:int -> ?br:int -> ?bc:int -> ?b:'mat -> ?ar:int -> ?ac:int -> 'mat -> 'mat
type 'mat binop = ?patt:patt -> ?m:int -> ?n:int -> ?cr:int -> ?cc:int -> ?c:'mat -> ?ar:int -> ?ac:int -> 'mat -> ?br:int -> ?bc:int -> 'mat -> 'mat