Skip to content
/ polar Public
forked from ecrc/polar

Distributed-memory, double-precision, polar decomposition (QDWH/ZOLO-PD) of a dense matrix, svd (QDWH/ZOLOPD-SVD) of a dense matrix

License

Notifications You must be signed in to change notification settings

advanpix/polar

 
 

Repository files navigation

POLAR

POLAR is a high performance open-source software package to compute the polar decomposition ((PD)) of a dense matrix A = UH based on QR-based Dynamically Weighted Halley (QDWH) and ZOLO-PD algorithms.

QDWH

The QR-based Dynamically Weighted Halley (QDWH) is one of the most popular algorithms to compute the polar decomposition. It is backward stable and converges in at most six iterations.

ZOLO-PD

ZOLO-PD relies on the Zolotarev function which is the best rational approximant to the sign function
for computing the polar decomposition. Building upon on the QR-based Dynamically Weighted Halley (QDWH) algorithm, the key idea lies in finding the best rational approximation for the scalar sign function, which also corresponds to the polar factor for symmetric matrices, to further accelerate the QDWH convergence. Based on the Zolotarev rational functions---introduced by Zolotarev (ZOLO) in 1877--- this new PD algorithm ZOLO-PD converges within two iterations even for ill-conditioned matrices, instead of the original six iterations needed for QDWH. ZOLO-PD uses the property of Zolotarev functions that optimality is maintained when two functions are composed in an appropriate manner. The resulting ZOLO-PD has a convergence rate up to seventeen, in contrast to the cubic convergence rate for QDWH. This comes at the price of higher arithmetic costs and memory footprint. These extra floating-point operations can, however, be processed in an embarrassingly parallel fashion.

Current Features of QDWH/ZOLOPD

  • Written in C.
  • Support for Double Precision.
  • Support for Two-Dimensional Block Cyclic Data Distribution.
  • ScaLAPACK Interface / Native Interface.
  • ScaLAPACK-Compliant Error Handling.
  • ScaLAPACK-Derived Testing Suite
  • ScaLAPACK-Compliant Accuracy.

Programming models and backends:

  1. MPI
  2. ScaLAPACK

Installation

The installation requires at least CMake of version 3.2.3. To build the polar decomposition based on QDWH/ZOLOPD, follow these instructions:

  1. Get polar from git repository

    git clone [email protected]:ecrc/polar
    
  2. Go into polar folder

    cd polar
    
  3. Create build directory and go there

    mkdir build && cd build
    
  4. Use CMake to get all the dependencies

    cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/install/ 
    
  5. To use exist dependencies

    cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/install/ -DSCALAPACK_DIR=/path/to/scalapack/install/ -DSLTMG_LIBRARIES=/path/to/scalapack/install/lib/libsltmg.a
    
  6. To build the testing binaries (optional) add the following: