- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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??
링크가 복사됨
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
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.