Todo List

Class oski_matCSR_t
Add a flag to indicate whether the matrix has a full (all non-zero) diagonal so that the triangular solve kernel does not have to check this condition explicitly.

Class tagBebop_matTRIPART_t
Fill in formal description of this format.

Global BLAS_xAXPY
Correctly implement the negative stride case (not used in BeBOP).

Global BLAS_xSCAL
Correctly implement the negative stride case (not used in BeBOP).

Global oski_CheckPattern
Check symmetric and Hermitian full storage cases.

Global oski_CheckPattern
Add symmetric/Hermitian pattern check

Global CountZeroRows
This routine duplicates the functionality of oski_CountZeroRowsCSR(), and could be eliminated.

Global ScatterBlockRow
Update documentation for this routine.

File error.c
Wrap error handler get/set routines in mutexes.

Global g_errlogfile
Make g_errlogfile a static global variable that the user can change to redirect errors elsewhere.

Global oski_DestroyBCSRFillProfile
Does not need to be type-dependent.

Global oski_HeurEstimateCost
This implementation currently assumes our pessimistic upper-bound on the heuristic evaluation cost of 40 x (the time to stream through the matrix), and should be changed to use a build-time benchmark.

File src/init.c
Make this module thread-safe!

Global oski_ReallocInternal
Implement oski_ReallocInternal().

Global oski_CalcMatRepr1Norm
Fix the symmetric case; this is only an estimate.

Global SymmMatMult
Test the case when indices are unsorted.

File matopts.h
Reimplement using Hoemmen's matrix generator.

Global oski_CheckArgsMatPowMult
Need more verbose error messages in the event that the vectors have improper dimensions.

Global oski_CreateSubmatReprFromCSR_funcpt
Future functionality: implement submatrix instantiation.

Global oski_InitMatTypeManager
Should call this routine during library initialization.

Global oski_WrapCSR
The output properties data structure actually defines a more general property about the diagonal, namely, that it is all ones. However, the available input matrix properties only allow the user to specify whether or not there is an implicit unit diagonal. Thus, it is possible that the user could create an input matrix with an explicit unit diagonal, but this condition is not checked when wrapping the data structure. It might be desirable to do this to make optimized triangular solve for the unit diagonal case more efficient.

Global oski_WrapCSR
Similarly, the oski_matCSR_t data structure has "is_upper" and "is_lower" flags, which could be set even if the user asserts that the matrix has a "general" pattern.

Global CountZeroRows
This routine duplicates the functionality of oski_CountZeroRowsCSR(), and could be eliminated.

Global testmat_GenDenseCSR
What is the best way to initialize the dense matrix? For benchmarking, it seems sufficient to initialize all entries to 'tiny' values (here, $\frac{1}{\max{m}{n}}$), which is faster than calling the random number generator.

File testvec.h
testmat_ChooseDim and ChooseDivisible do not actually need to be build-type dependent.

Global ChooseFastest
Implement this routine, given that we will need to allocate temporary vectors.

File upper_conj.c
The case of sorted indices assumes not only that the indices are sorted, but also that there is a unique diagonal element. Do we need to fix this? The general ordering case makes no such assumption.

File upper_normal.c
The case of sorted indices assumes not only that the indices are sorted, but also that there is a unique diagonal element. Do we need to fix this? The general ordering case makes no such assumption.

Global OpenLua
Create global OSKI-Lua matrix types for all registered types.

Global oski_CreateLuaMatReprGenericFromCSR
else: possible leak

Global oski_FreeInputMatRepr
Possible leak?

Global oski_GetMatClique
Test thoroughly!

Global oski_GetMatDiagValues
Test thoroughly!

Global oski_IsMatPermuted
Update this routine when Ali Pinar's TSP reordering code is implemented.

Global oski_SetMatClique
Test thoroughly!

Global oski_SetMatDiagValues
Test thoroughly!

Global oski_TuneMat
The current implementation does not try to re-tune if already tuned.

Check that the new data structure really is faster than the old.

Global oski_ViewPermutedMat
Update this routine when Ali Pinar's TSP reordering code is implemented.

Global oski_ViewPermutedMatColPerm
Update this routine when Ali Pinar's TSP reordering code is implemented.

Global oski_ViewPermutedMatRowPerm
Update this routine when Ali Pinar's TSP reordering code is implemented.

Global oski_CreateMatReprFromCSR
This fill ratio is wrong for symmetric matrices.

Global oski_MatReprMult
Delete the following assignment statements, made obsolete by above call to oski_TransposeProps().

Global oski_MatReprMultAndMatReprTransMult
What to do here if either of these calls fails?

Global oski_MatReprTrisolve
Could theoretically encounter OP_CONJ

Group MIXSCALTYPES
Write a short explanation of how to recompile an application to use different scalar index and value types, and how to mix types.

Group FAQ
Write a FAQ based on alpha-tester questions.

Global oski_SetHint
Restructure so that va_end() is always called.

Global oski_MatTrisolve
For efficiency, this routine does not attempt to pre-scan the matrix data structure and ensure there are no zero diagonals. At least for CSR and CSC input matrices, we should add some kind of check somewhere (e.g., at matrix handle creation time). A similar to-do appears elsewhere in this source.

Group MATTYPE_MBCSR
MBCSR currently has an overly strong interdependence on the BCSR data structure as defined in include/oski/BCSR/format.h because MBCSR contains a pointer to a BCSR object, and moreover initializes the fields of the BCSR object explicitly. We should weaken this dependence by implementing the submatrix instantiation functionality (see the defined but unused structure, oski_submat_t).

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