ITK/Release 4/Refactor Numerical Libraries

From KitwarePublic
Jump to navigationJump to search

Background

ITK largely relies on third party libraries to provide support for numerical computations such as linear solvers, eigen analysis and non-linear optimization. These libraries have been integrated over the years of the project, based on content from other libraries, immediate needs and requirements of particular projects.

Goal

  • The purpose of this project is to revise the numerical libraries currently used in ITK, and to determine whether they are the best (or a good enough) option to use, and whether they are being used properly in the toolkit.
    • When appropriate, some of these libraries will be replaced with better options.
    • When possible, the code will be restructured to make possible for users to pick other options of third party libraries that may provide better support for their particular applications.

Inventory

  • First, we proceed to make an inventory of the numerical libraries currently used in ITK. This will serve as basis for the analysis of whether there are better options to use, and/or whether they are being used correctly.

Inventory of Numerical Libraries

Licensing

Alternatives

Tcons

Repository

Currently there is a github clone of the ITK repository under Chuck's github page: https://github.com/chuckatkins/ITK . There is a branch numlibs_refactor where the effort can be worked on.

Progress

  • Remove LINPACK
    • Remove netlib code
      • Done. (Chuck Atkins)
    • Netlib lbfgsb code links to LINPACK for dpofa. Needs to be ported to LAPACK dpotrf.
      • Done. (Chuck Atkins)
    • Port vnl classes using LINPACK over to calling LAPACKE interface into LAPACK.
  • Remove EISPACK
    • Remove netlib code
      • Done. (Chuck Atkins)
    • Port vnl classes using EISPACK over to calling LAPACKE interface into LAPACK.
  • Replace f2c reference BLAS with the CBLAS, the C interface to BLAS linking against an externally supplied BLAS.
    • Remove netlib f2c code and replace with CBLAS
      • Done. (Chuck Atkins)
        • cblas.h slightly modified to better handle complex numbers in C++
        • Build modified to remove remaining FORTRAN dependencies
    • Port vnl classes using BLAS over to calling CBLAS interface into BLAS.
      • N/A (No calls to BLAS in vnl. (Chuck Atkins)
  • Replace f2c LAPACK with LAPACKE, the C interface to LAPACK linking against an externally supplied LAPACK.
    • Remove netlib f2c code and replace with LAPACKE
      • Done. (Chuck Atkins)
        • lapacke.h slightly modified to better handle complex numbers in C++ and to remove prototypes of extended precision LAPACK functions that are not available in slightly older LAPACK interfaces.
    • Port vnl classes using LAPACK over to calling LAPACKE interface into LAPACK
      • In Progress. (Chuck Atkins, Julie Langou)
        • Converted function calls but tests don't pass. (Chuck Atkins)
      • vnl_complex_eigenssytem
      • vnl_generalized_schur
      • vnl_complex_generalized_schur
      • test_qsvd
  • Optimize LBFGSB code using level 3 BLAS routines
  • Implement vnl matrix and vector operations in terms of CBLAS
    • In Progress. (Chuck Atkins)