Community
cancel
Showing results for 
Search instead for 
Did you mean: 
MiauCat
Beginner
70 Views

How can I interrupt / abort LAPACK and BLAS methods which do not support callback ?

I'm computing some SVDs and other time-consuming things using the mkl C libraries.

I've found that some methods implement a progress call back (https://software.intel.com/en-us/mkl-developer-reference-c-mkl-progress), but that does not seem to be the case for the calls I'm interested in ( _gesvd, _gesdd, _gemm, _imatcopy ).

Is there a clean work-around for this issue?  I would ideally like to be able to post "progress", but at least I would like to be able to cleanly "abort" the computation by user-interaction.

0 Kudos
2 Replies
Zhen_Z_Intel
Employee
70 Views

Hi Miaucat,

I am afraid the mkl_progress do not support for BLAS, only for some functions of LAPACK, Scalapack and DSS/PARDISO. However, I checked, seems also do not support for ?gesvd. If you would like to find a work-around, please try with pardiso or dss. I've tested that it can work correctly in PARDISO and DSS solver. Just add following method before main function:

int mkl_progress( int* ithr, int* step, char* stage, int lstage )
{
  char buf[BUFLEN];
  if( lstage >= BUFLEN ) lstage = BUFLEN-1;
  strncpy( buf, stage, lstage );
  buf[lstage] = '\0';
  printf( "In thread %i, at stage %s, steps passed %i\n", *ithr, buf, *step );
  return 0;
}

Thanks.

Best regards,
Fiona

MiauCat
Beginner
70 Views

Thanks. I have not looked into *pardiso* at all yet and will do.

Do you know what the reason is for mkl_progress not supproting SVD routines?
Is this something which could be requested for future version of MKL, or is there something preventing this from being a sensible suggestion?

Not beeing able to exit long computations in a controlled manner seems a very bad property for a library.

Reply