Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
6435 Discussions

program sleep when set OMP_NUM_THREADS more than one

chao_n_
Beginner
299 Views

Dear all,

   I have written some codes with MKL, but recently I found this codes did not work if the set OMP_NUM_THREADS more than one. Here is an example code. I compile it with icc test.c -mkl. When I run ./a.out, it will keep running and in sleep status. It seems that openMP did not work well. How can I solve the problem?

#include <omp.h>
#include <stdio.h>
#include <mkl.h>
int main(){
	int nID=100;
	int nSNP=100;
	double *mMatrix = (double*) calloc(nID*nSNP,sizeof(double));
	double *AGmatrix = (double*) calloc(nID*nID,sizeof(double));
    const CBLAS_LAYOUT Layout=CblasRowMajor;
    double alpha=1;
    double beta=0;
    cblas_dgemm (Layout, CblasTrans, CblasNoTrans, nID, nID, nSNP, alpha, mMatrix, 
	nID, mMatrix, nID, beta, AGmatrix, nID);
} 

 

0 Kudos
10 Replies
Zhen_Z_Intel
Employee
299 Views

Hi Chao,

What's your version of MKL? I tested with 2017 beta, the program could work. Because you set value of beta to 0, the error might be caused by dgemm function. Please try with other value of input parameters.

If you would like to use threading, also try with mkl_set_num_thread(1), if there still remain same problem, it should be problem of dgemm function. Please download and use latest version of MKL to avoid this problem.

Best regards,
Fiona

chao_n_
Beginner
299 Views

Fiona Z. (Intel) wrote:

Hi Chao,

What's your version of MKL? I tested with 2017 beta, the program could work. Because you set value of beta to 0, the error might be caused by dgemm function. Please try with other value of input parameters.

If you would like to use threading, also try with mkl_set_num_thread(1), if there still remain same problem, it should be problem of dgemm function. Please download and use latest version of MKL to avoid this problem.

Best regards,
Fiona

I have updated my MKL to 2017 beta. When I set  mkl_set_num_thread(1) in the script, it reported undefined reference to `mkl_set_num_thread'. How can I solve this problem?

chao_n_
Beginner
299 Views

Fiona Z. (Intel) wrote:

Hi Chao,

What's your version of MKL? I tested with 2017 beta, the program could work. Because you set value of beta to 0, the error might be caused by dgemm function. Please try with other value of input parameters.

If you would like to use threading, also try with mkl_set_num_thread(1), if there still remain same problem, it should be problem of dgemm function. Please download and use latest version of MKL to avoid this problem.

Best regards,
Fiona

I have updated my MKL to 2017 beta. When I set  mkl_set_num_thread(1) in the script, it reported undefined reference to `mkl_set_num_thread'. How can I solve this problem?

chao_n_
Beginner
299 Views

Fiona Z. (Intel) wrote:

Hi Chao,

What's your version of MKL? I tested with 2017 beta, the program could work. Because you set value of beta to 0, the error might be caused by dgemm function. Please try with other value of input parameters.

If you would like to use threading, also try with mkl_set_num_thread(1), if there still remain same problem, it should be problem of dgemm function. Please download and use latest version of MKL to avoid this problem.

Best regards,
Fiona

I have updated my MKL to 2017 beta. When I set  mkl_set_num_thread(1) in the script, it reported undefined reference to `mkl_set_num_thread'. How can I solve this problem?

TimP
Black Belt
299 Views

If you don't resolve mkl_set_num_threads (I think it requires the plural 's') when linking, it seems possible you aren't linking against MKL (maybe some other BLAS library).

The MKL library should also parse the environment variable MKL_NUM_THREADS so as to permit you to test whether your problem is associated with number of threads.  MKL or any OpenMP threaded library should respond to OMP_NUM_THREADS if no over-riding setting is present.

Zhen_Z_Intel
Employee
299 Views

Hi Chao,

Tim is right. If you use MKL defined function but you still get error message -- "undefined reference" while you build program, that means you didn't link with MKL correctly. However, I noticed it seems you used incorrect function, the name should be "mkl_set_num_threads", not "mkl_set_num_thread". Sorry for my typing mistake that misled you, hope you didn't waste time for this.

If you would like to learn more information about how to use threading in MKL program, please follow article:
Intel MKL-specific Environment Variables for OpenMP Threading Control

Hope it would be helpful to you. Thank you.

Best regards,
Fiona

chao_n_
Beginner
299 Views

Fiona Z. (Intel) wrote:

Hi Chao,

Tim is right. If you use MKL defined function but you still get error message -- "undefined reference" while you build program, that means you didn't link with MKL correctly. However, I noticed it seems you used incorrect function, the name should be "mkl_set_num_threads", not "mkl_set_num_thread". Sorry for my typing mistake that misled you, hope you didn't waste time for this.

If you would like to learn more information about how to use threading in MKL program, please follow article:
Intel MKL-specific Environment Variables for OpenMP Threading Control

Hope it would be helpful to you. Thank you.

Best regards,
Fiona

I have tried mkl_set_num_threads, it works well now. Now it seems that it can run with multi-threads, even when I use "export OMP_NUM_THREADS=4" in the shell.  Maybe some other things mislead it before. 

Another question, can I package the codes with MKL into R with R CMD SHLIB

Zhen_Z_Intel
Employee
299 Views

Hi Chao,

Yes, you could use Intel MKL with R programming and compile with GNU/ICC for MKL project. Here are some link could guide you how to link MKL to R and compile in Linux system:

Using Intel® MKL with R
Quick Linking Intel® MKL BLAS, LAPACK to R

Hope it could be useful to you. Thanks.

Best regards,
Fiona

chao_n_
Beginner
299 Views

Fiona Z. (Intel) wrote:

Hi Chao,

Yes, you could use Intel MKL with R programming and compile with GNU/ICC for MKL project. Here are some link could guide you how to link MKL to R and compile in Linux system:

Using Intel® MKL with R
Quick Linking Intel® MKL BLAS, LAPACK to R

Hope it could be useful to you. Thanks.

Best regards,
Fiona

 

Hi Fiona,

    In the "Extending R with Intel MKL", it tells a method suited to windows system with Rtools. But how can I achieve the same goal in the linux system?

Zhen_Z_Intel
Employee
299 Views

Hi Chao,

You could write c/cpp file using MKL function and call from R directly. There's no necessary to install any tool in linux. Here's a link telling some way of call c file from R, https://www.r-bloggers.com/three-ways-to-call-cc-from-r/

Best regards,
Fiona

Reply