Intel® MKL ScaLAPACK Nonsymmetric Eigensolvers

ID 659682
Updated 4/7/2020
Version Latest
Public

author-image

By

Introduction

Until the release of Intel® Math Kernel Library (Intel® MKL)  2020 Update 1[1],  MKL ScaLAPACK and Netlib ScaLAPACK had not provided expert drivers for nonsymmetric eigenvalue problems. This means that users had to explicitly call subroutines for the three primary steps in the calculation:

  1. Reduce to Hessenberg form by calling the subroutine P?GEHRD
  2. Compute eigenvalues of the Hessenberg form by calling P?LAHQR or P?HSEQR (available only for real single and double precision matrices). 
  3. Compute left and/or right eigenvectors by calling P?TREVC (available only for complex single and double precision matrices).

MKL and Netlib LAPACK provides a matrix balancing routine, ?GEBAL, which transforms the input matrix to improve the accuracy of the computed eigenvalues and/or eigenvectors, and ?GEBAK, which undoes the transformation of matrix balancing to compute the eigenvalues and/or eigenvectors of the original input matrix. However, Netlib ScaLAPACK and earlier MKL releases have only supported real single and double precision matrices for P?GEBAL and have not supported P?GEBAK for any precision or data type.

Intel® Math Kernel Library (Intel® MKL) version 2020 Update 1 introduced ScaLAPACK P?GEEVX expert drivers, which cover many of the gaps mentioned above. Given an n-by-n real/complex nonsymmetric matrix A, the Intel® MKL ScaLAPACK P?GEEVX expert drivers compute its:

  • eigenvalues;
  • left and/or right eigenvectors, optionally;
  • balancing transformation to improve the conditioning of the eigenvalues and eigenvectors, optionally;
  • reciprocal condition numbers for the eigenvalues, optionally.

The Intel® MKL ScaLAPACK P?GEEVX expert driver's implementation includes both Fortran and C interfaces for all types of precisions. However, it should be noted that the P?GEEVX expert drivers do not support the computation of reciprocal condition numbers for eigenvectors as of this release. [2]

Implementation details

To support the new P?GEEVX expert drivers, Intel® MKL also provides the following new routines which are only available in Intel® MKL:   

  • P{C,Z}GEBAL ( first integrated into MKL 2019 Update 2 )
  • P{C,D,S,Z}GEBAK ( first integrated intoMKL 2019 Update 3 )
  • P{D,S}TREVC ( first integrated into MKL 2020 Gold )

The Intel® MKL expert drivers use P?LAHQR, the first parallel multi-shift QR algorithm implemented in ScaLAPACK, to compute the Schur decomposition and/or the eigenvalues of the Hessenberg form.  Alternatively, the routines mentioned above can be used separately as needed and the user may form their own eigensolver using  P?HSEQR, which is another modern implementation of the multi-shift QR algorithm.  However, the user should keep in mind that, at the moment, neither Intel® MKL or Netlib ScaLAPACK only support P?HSEQR for real single or double precision matrices.

Many ScaLAPACK drivers and computational subroutines can be used with any block-cyclicly distributed submatrix.  To support this possibility, their interfaces accept inputs for row and column indices, (IA, JA), of the global array, to indicate the first entry of the submatrix. The new expert driver P?GEEVX does not support this feature. However, if there is a necessity to solve the eigenproblem for a distributed submatrix, ScaLAPACK provides a matrix redistribution/copy routine, P?GEMR2D, to copy from any block-cyclicly distributed matrix or submatrix to any other block-cyclicly distributed matrix or submatrix. For more details, please refer to the MKL documentation.

Unlike other ScaLAPACK expert drivers, P?GEEVX does not return immediately if the allocated size of the work array is smaller than needed. P?GEEVX will first try to allocate the work array of required for the calculation, and return with an error only if this memory allocation fails.

Contacts:

gennady.fedorov@intel.com

juan.durazo@intel.com

sergey.kuznetsov@intel.com

References:

[1] Intel ® Math Kernel Library

[2] Intel ® Math Kernel Library_Developer_Reference