- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I notice there don't seem to be any banded routines for finding only some e-vectors.
I tried the driver routine dsbevx, but it apparently must be using QR or divide-and-conquer because it requires an eigenvector matrix big enough to hold all eigenvectors, even if it's told to return only a few.It also takes the same amount of time to solve a 1000 DOF system for 4 e-vectors as it does to solve the same system for 200 e-vectors.
Is this very useful functionality absent from MKL? Will I have to use packed storage to solve large banded eigenproblems with minimum memory and realistic CPU time? I already have a dirty homemade algorithm that does better than this, surely I must be overlooking something??
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
dsbevx is really using bisection followed by inverse iteration if a) you don't need all the eigenvectors, b) a positive tolerance is set, otherwise it goes to QR.
Actually, if you want eigenvectors, dsbevx needs n^2 memory regardless from the number of eigenvectors needed because it needs to reduce banded form to tri-diagonal and keep track of the orthogonal transformation done during the reduction.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quoting - Gennady Fedorov (Intel)
Hello,
dsbevx is really using bisection followed by inverse iteration if a) you don't need all the eigenvectors, b) a positive tolerance is set, otherwise it goes to QR.
Actually, if you want eigenvectors, dsbevx needs n^2 memory regardless from the number of eigenvectors needed because it needs to reduce banded form to tri-diagonal and keep track of the orthogonal transformation done during the reduction.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello.
It takes approximately the same time, because most time is spent by tri-diagonalization. The following process is quite quick no matter whether you need 4 or 200 vectors, but sure it will be different duration.
Michael.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
These are the speeds it runs on my dual core Intel something-common:
For n=1563:
3 eigenvectors with dsbgvx: 44 seconds
1563 eigenvectors with dsbgvx: 61 seconds
3 eigenvectors with a homemade Visual Basic program without any fancy Intel optimizations: 59 seconds
>4 eigenvectors with the homemade VB program: Too long to wait
It doesn't show any dramatic slowdown with more e-vectors like I expected bisection was supposed to. This really makes it look like the wrong algorithm is being used?? I hope you're not right or LAPACK will be nearly useless to me.
Quoting - Michael Chuvelev (Intel)
Hello.
It takes approximately the same time, because most time is spent by tri-diagonalization. The following process is quite quick no matter whether you need 4 or 200 vectors, but sure it will be different duration.
Michael.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page