Dear readers,
I am writing software for statistical analysis that performs eigen value
decompositions. I need to be able to calculate all of the eigen values and
the first few hundred eigen vectors of matrices of dimension 3000. I wrote
some code that used the QR algorithm from Numerical Recipes in C. It is too
slow. I started a sample test on Friday a week and a half ago, and my
machine still has not finished.
I am reading the book "Applied Numerical Linear Algebra" by James Demmel.
Section 5.3.3 discusses the Divide-and-Conquer algorithm. Professor Demmel
states that the LAPACK routine ssyevd uses the Divide-and-Conquer algorithm.
I downloaded version 2 of CLAPACK and compiled the libraries. This was very
difficult to do. I had to translate the Unix make files to Watcom/Dos make
files, and rewrite the functions that called UNIX system calls. I timed the
function ssyevd versus tred2 and tqli from Numerical Recipes. The CLAPACK
routine is 20 times slower and shows N^3 performance. From the graphs in
section 5.4 I expected ssyevd to be more than 15 times faster for these size
matrices.
I also downloaded the linpack.h++ files and documentation. The documentation
leaves me with the impression that linpack.h++ uses the QR algorithm instead
of Divide and Conquer.
I can think of a few possible problems with my current programs:
1) There is something messed up inside of ssyevd and it is calling the QR
routine instead of divide and conquer.
2) The subscripting of matrices in LAPACK is not being performed efficiently
by my compiler, which causes the marked degradation versus NRC's QR
3) Maybe this version of CLAPACK was not created from a current version of
LAPACK, and so it contains QR instead of Divide and Conquer.
Do anybody have any advice?
Do anybody know if version 2 of CLAPACK is an accurate translation of the
current LAPACK?
Do anybody know where I can get a copy of Divide-and-Conquer written in C or
C++?
Thanks in Advance,
Clark Sims
This archive was generated by hypermail 2b29 : Wed Feb 20 2002 - 03:20:08 EST