Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
公告
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

Compilation Errors with MKL_DIRECT_CALL_SEQ

Daniele_S_1
初学者
1,466 次查看

Hi,

I'm compiling a cpp file that includes mkl.h and contains a single cblas_dgemm call with the following:

icpc -DMKL_DIRECT_CALL_SEQ -DMKL_ILP64 -I/opt/intel/mkl/include -c -o main.o main.cpp

Compilation breaks and I get mutliple times the following message:

error: expression must be an lvalue or a function designator
    cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 4, 4, 4, 1, A, 4, B, 4, 1, C, 4);

If a remove -DMKL_DIRECT_CALL_SEQ the compilation works as expected.

Is this a bug or am I doing anything wrong?

Thanks,

Daniele

0 项奖励
4 回复数
Daniele_S_1
初学者
1,466 次查看

I forgot to mention that the very same code used to compile with Intel MKL 11.2 and that now I've upgraded to Intel MKL 11.3.2.

Daniele

0 项奖励
Ying_H_Intel
主持人
1,466 次查看

Hi Daniele, 

Thanks for the report.  The issue looks familiar. We will check and get back to you later. 

Thanks

Ying 

 

0 项奖励
Sarah_K_Intel
员工
1,466 次查看

Hi Daniele~

Thank you for your interest in this functionality!  Direct call support for CBLAS interfaces was introduced in Intel MKL 11.2.2, which may explain why the compilation works as expected for Intel MKL 11.2.  The implementation assumes that variables, rather than literals, are passed as arguments to the cblas_dgemm call.  We will need to change the implementation to allow both variables and literals to work for the CBLAS interfaces with direct call.

In the meantime, if you change your code to:

      MKL_INT four = 4;

      double one = 1.0;

      cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, four, four, four, one, A, four, B, four, one, C, four);

instead of

      cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 4, 4, 4, 1, A, 4, B, 4, 1, C, 4);

does the compilation succeed?

Thanks,

Sarah

0 项奖励
Ying_H_Intel
主持人
1,466 次查看

Dear All,

Just update the thread.  MKL 2017 update 1 release recently, which fix the issue. 

@Daniele, thank you for report the bug!

Best Regards,

Ying

0 项奖励
回复