Why is pztrevc so slow?

Open discussion regarding features, bugs, issues, vendors, etc.

Why is pztrevc so slow?

Postby Klystron » Mon Sep 03, 2007 6:55 am


I'm implementing a non-Hermitian eigensolver using Scalapack routines. So far, I still use the Lapack routine ztrevc to compute the eigenvectors, after the Schur form has been computed by pzlahqr. It also obtain correct results if I use pztrevc, but this routine seems to be incredibly much slower than the serial ztrevc. Has anyone observed the same? What's the reason for this? Is there any other simple way to compute the eigenvectors in parallel?
Posts: 10
Joined: Thu Jan 04, 2007 11:43 am

Postby Julien Langou » Thu Sep 06, 2007 9:34 am

To answer your question, I have asked around.
Below is the answer from Mark Fahey (currently at Oak Ridge National Lab., US).

When I contributed pzlahqr and pztrevc a few years back, it was known (see
reference below) that pztrevc had scaling issues. If I remember correctly,
I created a subroutine pzlatrs that was used to do numerical scaling
(similar to the serial zlatrs), but this routine does not scale in parallel
sense. If numerical scaling is not needed, then a direct call to the level
2 PB LAS pztrsv rather pztrevc would be much faster.

Since contribution of pzlahqr and pztrevc, I have not revisited pztrevc.

author = "Mark R. Fahey",
title = "Algorithm 826: A Parallel Eigenvalue Routine for Complex
{Hessenberg} Matrices",
journal = "{ACM} Transactions on Mathematical Software",
volume = "29",
number = "3",
pages = "326--336",
month = sep,
year = "2003",
URL = "http://doi.acm.org/10.1145/838250.838256",
abstract = "A code for computing the eigenvalues of a complex
Hessenberg matrix is presented. This code computes the Schur decomposition
of a complex Hessenberg matrix. Together with existing ScaLAPACK routines,
the eigenvalues of dense complex matrices can be directly computed using a
parallel QR algorithm. This parallel complex Schur decomposition routine
was developed to fill a void in the ScaLAPACK library and was based on the
parallel real Schur decomposition routine already in ScaLAPACK. The
real-arithmetic version was appropriately modified to make it work with
complex arithmetic and implement a complex multiple bulge QR algorithm.
also required the development of new auxiliary routines that perform
essential operations for the complex Schur decomposition, and that will
provide additional linear algebra computation capability to the parallel
numerical library community.",
Julien Langou
Posts: 820
Joined: Thu Dec 09, 2004 12:32 pm
Location: Denver, CO, USA

Postby Klystron » Thu Sep 06, 2007 9:50 am

Hi Julien,

thanks a lot for asking around! Ok, I wil try pztrsv and will be back with a working eigensolver :twisted:

Best wishes
Posts: 10
Joined: Thu Jan 04, 2007 11:43 am

Postby Klystron » Mon Sep 10, 2007 3:56 am

Thanks to Julien and to MarkFahey. pztrsv works well and is faster than ztrevc, at least for matrices of size 512 or larger, and 8 processors. As the equation system defining the eigenvectors is underdetermined and cannot be solved as it stands by pztrsv, I have made the following trick: I have added the equation "(i-th component of eigenvector i) =1" to the i-th equation of the system for eigenvector i of the upper triangular matrix to obtain a unique solution. Works fine.

Posts: 10
Joined: Thu Jan 04, 2007 11:43 am

Re: Why is pztrevc so slow?

Postby flodeb » Wed May 25, 2016 11:52 am


I know it has been quite a while you haven't disussed the subject !

I just wanted to know : how exactly have you changed the pztrevc routine to include pztrsv instead ?

I tried to naively change pzlattrs by pztrsv but I dont get the good eigenvectors ...

Thanks !
Posts: 1
Joined: Wed May 11, 2016 6:42 am

Return to User Discussion

Who is online

Users browsing this forum: No registered users and 8 guests