Intel MKL Lapack and BLAZE argument mismatch

Issue #302 resolved
Stefan Sicklinger created an issue

Hi,

I am trying to use BLAZE (3.6) with Intel MKL 2019u4.

#define BLAZE_BLAS_INCLUDE_FILE <mkl_cblas.h>
#define BLAZE_BLAS_MODE 1

During compilation I get a lot of errors of type:

\BLAZE\blaze/math/lapack/clapack/geev.h(180,4): error C2660: "sgeev_": Funktion akzeptiert keine 16 Argumente
\MKL\include\mkl_lapack.h(20462,6): message : Siehe Deklaration von "sgeev_"

It seems than the mkl_lapack.h interface is mismatching lapack/geev.h.

It there an additional parameter inside Blaze which I need to set?

Thanks a lot in advance!

Stefan

VS2019 WIN10

Comments (13)

  1. Klaus Iglberger

    Hi Stefan!

    Thanks a lot for pointing out this defect. Despite the fact that we are constantly testing with the MKL we have not encountered this problem before. However, it seems to be related to the changes we integrated for issue #251.

    I’m at Meeting C++ right now, thus my access to the necessary systems is limited. If you are not afraid to touch code, however, you could help me to fix the issue as quickly as possible. Please replace the file <blaze/math/lapack/clapack/geev.h> with the attached file. If all geev() related errors are gone, I’d be able to fix the issue within the next two days. Your help is very much appreciated!

    Best regards,

    Klaus!

  2. Klaus Iglberger

    Hi Stefan!

    Thanks again for reporting this issue. I’ve just pushed commit 917ab7a, which fixes the compilation issues with Intel MKL 2019u4. If you continue to experience compilation issues despite this commit, please reopen this issue.

    Best regards,

    Klaus!

  3. Klaus Iglberger

    Commit 917ab7a fixes the compilation issues of the Blaze LAPACK functions with the Intel MKL 2019u4. The fix is immediately available via cloning the Blaze repository and will be officially released in Blaze 3.7.

  4. Stefan Sicklinger reporter
    • changed status to open

    Hi Klaus,

    thanks a lot for the quick fix. It eliminated a lot of errors. However, the following errors are still occurring:

    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(428,4): error C2664: "void cgges_(const char *,const char *,const char *,MKL_C_SELECT_FUNCTION_2,const int *,MKL_Complex8 *,const int *,MKL_Complex8 *,const int *,int *,MKL_Complex8 *,MKL_Complex8 *,MKL_Complex8 *,const int *,MKL_Complex8 *,const int *,MKL_Complex8 *,const int *,float *,int *,int *)" : Konvertierung von Argument 4 von "Selctg" in "MKL_C_SELECT_FUNCTION_2" nicht möglich
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(428,63): message : Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    1>C:\software\libs\MKL\include\mkl_lapack.h(8557,6): message : Siehe Deklaration von "cgges_"
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(539,4): error C2664: "void zgges_(const char *,const char *,const char *,MKL_Z_SELECT_FUNCTION_2,const int *,MKL_Complex16 *,const int *,MKL_Complex16 *,const int *,int *,MKL_Complex16 *,MKL_Complex16 *,MKL_Complex16 *,const int *,MKL_Complex16 *,const int *,MKL_Complex16 *,const int *,double *,int *,int *)" : Konvertierung von Argument 4 von "Selctg" in "MKL_Z_SELECT_FUNCTION_2" nicht möglich
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(539,63): message : Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    1>C:\software\libs\MKL\include\mkl_lapack.h(27386,6): message : Siehe Deklaration von "zgges_"
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/trsv.h(144,4): error C3861: "strsv_": Bezeichner wurde nicht gefunden.
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/trsv.h(191,4): error C3861: "dtrsv_": Bezeichner wurde nicht gefunden.
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/trsv.h(240,4): error C3861: "ctrsv_": Bezeichner wurde nicht gefunden.
    
  5. Klaus Iglberger

    Hi Stefan!

    I apologize for the continued trouble, but unfortunately we cannot reproduce the compilation issue on our system. Still, this problem could affect many users of Blaze and thus we are of course interested in a solution. Thus your help is highly appreciated. We are dealing with the issue now and will provide a fix as soon as possible.

    Best regards,

    Klaus!

  6. Stefan Sicklinger reporter

    I could fix:

    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(428,4): error C2664: "void cgges_(const char *,const char *,const char *,MKL_C_SELECT_FUNCTION_2,const int *,MKL_Complex8 *,const int *,MKL_Complex8 *,const int *,int *,MKL_Complex8 *,MKL_Complex8 *,MKL_Complex8 *,const int *,MKL_Complex8 *,const int *,MKL_Complex8 *,const int *,float *,int *,int *)" : Konvertierung von Argument 4 von "Selctg" in "MKL_C_SELECT_FUNCTION_2" nicht möglich
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(428,63): message : Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    1>C:\software\libs\MKL\include\mkl_lapack.h(8557,6): message : Siehe Deklaration von "cgges_"
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(539,4): error C2664: "void zgges_(const char *,const char *,const char *,MKL_Z_SELECT_FUNCTION_2,const int *,MKL_Complex16 *,const int *,MKL_Complex16 *,const int *,int *,MKL_Complex16 *,MKL_Complex16 *,MKL_Complex16 *,const int *,MKL_Complex16 *,const int *,MKL_Complex16 *,const int *,double *,int *,int *)" : Konvertierung von Argument 4 von "Selctg" in "MKL_Z_SELECT_FUNCTION_2" nicht möglich
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/gges.h(539,63): message : Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    1>C:\software\libs\MKL\include\mkl_lapack.h(27386,6): message : Siehe Deklaration von "zgges_"
    

    by changing line 426 in clapack/gges.h

     using Selctg = int (*)( const float*, const float* ) to
     using Selctg = int (*)(const MKL_Complex8*, const MKL_Complex8* );
    

    and line 537

    using Selctg = int (*)( const double*, const double* ); to
    using Selctg = int (*)( const MKL_Complex16*, const MKL_Complex16* );
    

  7. Stefan Sicklinger reporter

    For the errors:

    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/trsv.h(144,4): error C3861: "strsv_": Bezeichner wurde nicht gefunden.
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/trsv.h(191,4): error C3861: "dtrsv_": Bezeichner wurde nicht gefunden.
    1>C:\software\libs\BLAZE\blaze/math/lapack/clapack/trsv.h(240,4): error C3861: "ctrsv_": Bezeichner wurde nicht gefunden.
    

    It seems that these routines are now part of mkl_cblas.h there no adapters strsv_, dtrsv_, ctrsv_ available anymore in the mkl header files. At least I could not find them anymore 😉.

    https://software.intel.com/en-us/mkl-developer-reference-c-cblas-trsv

    I removed the adapters (I dot need ?trsv_ support. ==> It works now.

    Thanks again for your help and time!

    Stefan

  8. Klaus Iglberger

    Hi Stefan!

    Thanks a lot for your help. I’ve pushed two more commits that hopefully take care of all issues. Could you please confirm that there is no more issues with the MKL 2019u4? Thanks,

    Best regards,

    Klaus!

  9. Klaus Iglberger

    Commits a3f6b7a and fd397e6 resolve the remaining issues of the Blaze LAPACK functions with the Intel MKL 2019u4. The fix is immediately available via cloning the Blaze repository and will be officially released in Blaze 3.7.

  10. Log in to comment