pdgesvd 'heterogeneity detected" error.

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

pdgesvd 'heterogeneity detected" error.

Postby jmcqueston » Tue Jul 14, 2015 4:47 pm

I have a case of PDGESVD returning the "heterogeneity detected" error, when requesting left singular vectors.

Here is what happens, and I have an idea for fixing it I'd like to hear feedback on.

In my case, the matrix is more than 2 blocks wider than it is tall. So in the ranks "on the bottom edge", PDEGESVD sets NRU=0, while it is non-zero in the other ranks.

However, when DBDSQR() is then called, the ranks with non-zero NRU ranks have ROTATE set, while the "NRU=0" ranks do not. This sometimes (data dependant) causes the singular values to be different in the last bit, which is reasonable considering that ROTATE or not causes a different algorithm to be used.

So what I'm thinking is that I could modify PDGESVD so that after computing NRU, I could take the collective maximum, so that if *any* set NRU which implies ROTATE in DBDSQR, then I can make adjustments so that they all locally call DBDSQR with at least a minimum of 1, so that they'll use the same algorithm.

Any thoughts whether this sounds like "the right fix?"

If I get this to work, I can certainly submit a patch, but I'm new to ScaLAPACK internals and don't want to take an approach that might be naive, so I welcome all feedback.

thanks
James
jmcqueston
 
Posts: 3
Joined: Mon Jul 13, 2015 5:40 pm

Re: pdgesvd 'heterogeneity detected" error.

Postby jmcqueston » Tue Jul 14, 2015 6:12 pm

According to http://netlib.org/scalapack/slug/node143.html ,
There is a small possibility that PxGESVD will fail to achieve the above error bounds on a heterogeneous network of processors for reasons discussed in section 6.2. On a homogeneous network, PxGESVD is as robust as the corresponding LAPACK routine xGESVD. A future release will attempt to detect heterogeneity and warn the user to use an alternative algorithm.

So I believe that it was not intended for the heterogeneity code to be triggered in my situation, which is homogeneous (in fact the MPI processes are running on the same host).

This raises the question of what the largest difference could be due to using the ROTATE algorithm versus from a heterogeneous set of computers or not setting BLAC_SET for coherence (which isn't at issue in my situation.)
jmcqueston
 
Posts: 3
Joined: Mon Jul 13, 2015 5:40 pm


Return to User Discussion

Who is online

Users browsing this forum: No registered users and 4 guests