Kernel Implementations
[Overview of the Implementation]

Detailed Description

Describes the generic, matrix type-independent kernel implementations called by the user.

This implementation includes five kernels:

  1. oski_MatMult: Sparse matrix-vector multiply.
  2. oski_MatTrisolve: Sparse triangular solve.
  3. oski_MatTransMatMult: Sparse $A^TA\cdot x$.
  4. oski_MatMultAndMatTransMult: Simultaneous computation of $A\cdot x$ and $A^T\cdot z$.
  5. oski_MatPowMult: Sparse matrix powers times a vector, i.e., $A^k\cdot x$.

The basic outline of each kernel's implementation is the same. Let the kernel call be KERNEL( A_tunable, ... ) where A_tunable is the matrix handle. Then KERNEL proceeds as follows:

  1. Error check KERNEL's input parameters.
  2. If the A_tunable has a tuned matrix representation, try to execute a matrix type-specific kernel.
  3. If there is no tuned representation or no type-specific kernel, try to execute a default kernel. For example, if the kernel is sparse $A^TA\cdot x$, the default implementation executes multiplication by $A$ and by $A^T$ as separate sparse matrix-vector multiplies.
  4. If the default kernel fails, check if A_tunable has a separate shared input matrix representation, and try to execute that representation's kernel (and default kernel if that fails).
  5. If no kernel could be execute successfully, call the error handler and return ERR_NOT_IMPLEMENTED.
  6. Otherwise, the kernel executed successfully. Record this kernel execution in the trace associated with A_tunable (see Tracing Module).
  7. Return 0 to indicate no errors occurred.

The library implementation distinguishes between these matrix type-independent kernels and matrix type-specific kernels. For sparse matrix-vector multiply, oski_MatMult(), defined in the public interface, is the type-independent kernel. Its corresponding type-dependent implementation is called oski_MatReprMult() and defined in the matrix type's module (see MATTYPES_INTERFACE).


file  a_and_at.h
 Sparse simultaneous multiplication by $A$ and $A^T$.
file  ata.h
 Sparse $A^TA\cdot x$ implementation.
file  kerinfo.h
 Define the kernels available to the library.
file  matmult.h
 Sparse matrix-vector multiply implementation.
file  matpow.h
 Sparse $A^k\cdot x$ implementation.
file  trisolve.h
 Sparse triangular solve implementation.

Generated on Wed Sep 19 16:41:23 2007 for BeBOP Optimized Sparse Kernel Interface Library by  doxygen 1.4.6